我是靠谱客的博主 坚定店员,最近开发中收集的这篇文章主要介绍Docker详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Docker的基本组成

在这里插入图片描述

镜像(image):

docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像==》run==》tomcat01容器(提供容器服务),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。

容器(container):

Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的
启动,停止,删除,基本命令
目前就可以把这个容器理解为就是一个简易 的linux系统

仓库(repository):

仓库就是存放镜像的地方
仓库分为共有仓库和私有仓库
Docker hub (默认是国外的)
阿里云…都有容器服务器(配置镜像加速)

安装Docker

#环境准备 
[root@localhost docker]# uname -r
3.10.0-1160.el7.x86_64
[root@localhost /]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
第1步:卸载旧的版本
yum remove docker 
docker-client 
docker-client-latest 
docker-common 
docker-latest 
docker-latest-logrotate 
docker-logrotate 
docker-engine
第2步:安装需要的安装包
yum install -y yum-utils
yum-config-manager 
--add-repo 
https://download.docker.com/linux/centos/docker-ce.repo #官方源,国外,下咋爱素服慢
yum-config-manager
--add-repo
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #推荐使用阿里云的源,十分的快
第3步:更新软件包索引
yum makecache fast
第4步:安装docker
docker-ce 社区版 docker-ee 企业版
yum install docker-ce docker-ce-cli containrd.io
第5步:启动docker
systemctl start docker
第6步:检验docker是否启动成功
docker version

在这里插入图片描述

第7步:测试
docker run hello-world

在这里插入图片描述

第8步:查看下载的这个hello-world镜像
docker images

在这里插入图片描述

docker run 的运行流程图

在这里插入图片描述

底层原理

Docker是怎么工作的?
Docker是一个 Client - Server 结构的系统,Docker的守护进程运行主机上,通过Sockets从客户端访问
DockerServer接收到Docker - Client的指令就会执行这个命令
在这里插入图片描述

Docker的常用命令

帮助命令
docker version
#显示docker的版本信息
docker info
#显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help
#帮助命令
镜像命令
docker images
查看所有本地的主机上的镜像
[root@localhost ~]# docker images
REPOSITORY
TAG
IMAGE ID
CREATED
SIZE
hello-world
latest
d1165f221234
3 months ago
13.3kB
# 解释
REPOSITORY
镜像的仓库源
TAG
镜像的标签
IMAGE ID
镜像的id
CREATED
镜像的创建时间
SIZE
镜像的大小
# 可选项
-a, --all
#列出所有镜像
-q, --quiet
#只显示镜像id
docker search 搜索镜像
[root@localhost ~]# docker search mysql
NAME
DESCRIPTION
STARS
OFFICIAL
AUTOMATED
mysql
MySQL is a widely used, open-source relation…
10949
[OK]
mariadb
MariaDB Server is a high performing open sou…
4139
[OK]
mysql/mysql-server
Optimized MySQL Server Docker images. Create…
813
[OK]
# 可选项,通过收藏来过滤
-f, --filter=STARS=3000
-->搜索出来的镜像就是STARS大于3000的
[root@localhost ~]# docker search mysql --filter=STARS=3000
NAME
DESCRIPTION
STARS
OFFICIAL
AUTOMATED
mysql
MySQL is a widely used, open-source relation…
10949
[OK]
mariadb
MariaDB Server is a high performing open sou…
4139
[OK]
docker pull 下载镜像
[root@localhost ~]# docker pull mysql
Using default tag: latest
# 指定下载版本
[root@bogon ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
docker rmi 删除镜像
[root@bogon ~]# docker rmi mysql #删除指定的镜像
Untagged: mysql:latest
[root@bogon ~]# docker rmi mysql:5.7
Untagged: mysql:5.7
# 可选项
-f, --force
#强制删除
[root@bogon ~]# docker rmi -f 镜像id 镜像id
# 删除多个容器
[root@bogon ~]# docker rmi -f $(docker images -aq) # 删除全部的镜像
容器命令

说明:我们有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习

docker pull centos
新建容器并启动
[root@bogon ~]# docker run [可选参数] image
# 参数说明
--name="NAME"
容器名字 tomcat01 tomcat02 ,用来区分容器
-d
后台方式运行
-it
使用交互方式运行,进入容器查看内容
-p
指定容器的端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
容器端口
-P
随机指定端口
# 测试,启动并进入容器
[root@bogon ~]# docker run -it centos /bin/bash
[root@b515fe319a8d /]#
exit
# 从容器中退出
列出所有的运行的容器
[root@bogon ~]# docker ps
# 列出当前正在运行的容器
-a
# 列出当前正在运行的容器+列出历史运行过的容器
-n=?
#显示最近创建的容器
-q
# 只显示容器的编号
[root@bogon ~]# docker ps
CONTAINER ID
IMAGE
COMMAND
CREATED
STATUS
PORTS
NAMES
72e287d72b05
centos
"/bin/bash"
4 minutes ago
Up 4 minutes
great_keldysh
[root@bogon ~]# docker ps -a
CONTAINER ID
IMAGE
COMMAND
CREATED
STATUS
PORTS
NAMES
b515fe319a8d
centos
"/bin/bash"
6 minutes ago
Exited (0) 6 minutes ago
vigorous_ritchie
72e287d72b05
centos
"/bin/bash"
10 minutes ago
Up 10 minutes
great_keldysh
[root@bogon ~]# docker ps -aq
b515fe319a8d
72e287d72b05
edf89af944fb
退出容器

exit # 直接容器停止并退出
Ctrl + P + Q #容器不停止退出

删除容器
docker rm 容器id
# 删除指定容器,不能删除正在运行的容器
docker rm -f $(docker ps -aq)
# 删除所有的容器
[root@bogon ~]# docker ps -aq |xargs docker rm -f # 删除所有的容器
fd723f804e6b
f50dbc8a302c
c37db74a8e67
启动和停止容器的操作
docker start 容器id
# 启动容器
docker restart 容器id
# 重新启动容器
docker stop 容器id
# 停止当前正在运行的容器
docker kill 容器id
# 强制停止当前正在运行的容器

其他常用命令

后台启动容器

docker run -d 镜像名

# 问题 docker ps ,发现 centos停止了
#常见的坑:docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
# nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
查看日志
docker logs -f -t 容器id
# 显示日志
-tf
# 显示日志
--tail + number
# 要显示的日志条数
[root@bogon ~]# docker logs -tf --tail 10 3457b7e330f3
Verifying
: which-2.21-12.el8.x86_64
5/5
2021-06-04T10:29:08.722509956Z
2021-06-04T10:29:08.722532970Z Installed:
2021-06-04T10:29:08.722537236Z
gpm-libs-1.20.7-17.el8.x86_64
vim-common-2:8.0.1763-15.el8.x86_64
2021-06-04T10:29:08.722540443Z
vim-enhanced-2:8.0.1763-15.el8.x86_64
vim-filesystem-2:8.0.1763-15.el8.noarch
2021-06-04T10:29:08.722543744Z
which-2.21-12.el8.x86_64
2021-06-04T10:29:08.722546713Z
2021-06-04T10:29:08.722551256Z Complete!
2021-06-04T10:29:13.185894309Z [root@3457b7e330f3 ~]# exit
2021-06-04T10:29:13.185932873Z exit
查看容器中进程信息
docker top + 容器id
[root@bogon ~]# docker top 8da1e7e1e4f0
UID
PID
PPID
C
STIME
TTY
TIME
CMD
root
5006
4985
0
18:39
pts/0
00:00:00
/bin/bash
查看镜像的元数据
docker inspect 容器id
[root@bogon ~]# docker inspect 8da1e7e1e4f0 
进入当前正在运行的容器
# 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
方式1:docker exec -it 容器id bashshell
[root@bogon ~]# docker exec -it 8da1e7e1e4f0 /bin/bash
[root@8da1e7e1e4f0 /]# 
方式2:docker attach 容器id
[root@bogon ~]# docker attach 8da1e7e1e4f0
[root@8da1e7e1e4f0 /]# 
# docker exec
# 进入容器后开启一个新的终端,可以在里面操作(常用)
# docker attach
# 进入容器正在执行的终端,不会启动新的进程
从容器内拷贝文件到主机上
docker cp 容器id:容器内路径
目的的主机路径
[root@localhost ~]# docker cp e8868725676c:/root/preo.txt .
[root@localhost ~]# ls
anaconda-ks.cfg
hello.sh
passwd_88
preo.txt
school

Docker 安装 Nginx

1、搜索镜像 search 建议去docker hub上查找,可以看到帮助文档
[root@localhost ~]# docker search nginx
NAME
DESCRIPTION
STARS
OFFICIAL
AUTOMATED
nginx
Official build of Nginx.
2、下载镜像 pull
[root@localhost ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
69692152171a: Pull complete
30afc0b18f67: Pull complete
596b1d696923: Pull complete
febe5bd23e98: Pull complete
8283eee92e2f: Pull complete
351ad75a6cfa: Pull complete
Digest: sha256:6d75c99af15565a301e48297fa2d121e15d80ad526f8369c526324f0f7ccb750
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@localhost ~]# docker pull tomcat 
Using default tag: latest
latest: Pulling from library/tomcat
d960726af2be: Pull complete
e8d62473a22d: Pull complete
8962bc0fad55: Pull complete
65d943ee54c1: Pull complete
da20b77f10ac: Pull complete
8669a096f083: Pull complete
e0c0a5e9ce88: Pull complete
f7f46169d747: Pull complete
42d8171e56e6: Pull complete
774078a3f8bb: Pull complete
Digest: sha256:71703331e3e7f8581f2a8206a612dbeedfbc7bb8caeee972eadca1cc4a72e6b1
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest
[root@localhost ~]# docker images
REPOSITORY
TAG
IMAGE ID
CREATED
SIZE
nginx
latest
d1a364dc548d
12 days ago
133MB
3、运行测试
[root@localhost ~]# docker run -d --name nginx01 -p 3344:80 nginx
c27bc2e98bad174982f5017907181d633c9c5484fd836eb3e62709f8a5cfc59c
[root@localhost ~]# docker ps
CONTAINER ID
IMAGE
COMMAND
CREATED
STATUS
PORTS
NAMES
c27bc2e98bad
nginx
"/docker-entrypoint.…"
9 seconds ago
Up 8 seconds
0.0.0.0:3344->80/tcp, :::3344->80/tcp
nginx01
[root@localhost ~]# curl localhost:3344
#
-d
后台运行
#
--name
给容器命名
#
-p
宿主机端口 : 容器内部端口

Docker镜像

镜像概念

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件

Docker镜像加载原理

UnionFS(联合文件系统) UnionS(联合文件系统):Union文件系统(
UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的加,同时可以将不同目录挂载到同一个虛拟文件系统下(unite
several directories into a single virtual filesystem)。 Union文件系统是
Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录
Docker镜像加载原理 docker 的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。 bootfs(boot
file system) 主要包含bootloader和kernel,bootloader
主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在
Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就存在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
roorfs (root file system),在bootfs之上。包含的就是典型Linux系统中的 /dev ,/proc,/bin
,/etx 等标准的目录和文件。rootfs就是各种不同的操作系统发行版。比如Ubuntu,Centos等等。
在这里插入图片描述
对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接用Host(宿主机)的kernel,自己只需要提供rootfs就行了,由此可见对于不同的Linux发行版,bootfs基本是一致的,rootfs会有差别,因此不同的发行版可以公用bootfs。
对于安装虚拟机的压缩包都是很大的,而Docker的镜像却很小在这里插入图片描述

分层理解

在这里插入图片描述
这样最大的好处就是资源共享,例如很多个镜像都从相同的 Base 镜像构建而来,而宿主机只需要在磁盘上保留一份 base 镜像,同时内存中也只需要加载一份 base 镜像,这样就可以为所有的人容器服务了,而且镜像的每一层都可以被共享
在这里插入图片描述

理解

所有的 Docker镜像都起始于一个基础镜像层,进行修改或增加新的内容时,就会在当前的镜像层之上,创建新的镜像层。
举一个简单的例子,假如基于 Ubuntu linux16.04创建一个新的镜像,这就是新镜像的第一层;如果在该镜像中添加Python包就会在基础镜像层之上创建第二个镜像层;如果继续添加一个安全补丁,就会创建第三个镜像层该镜像当前已经包含3个镜像层,如下图所示(这只是一个用于演示的很简单的例子)在这里插入图片描述
在添加额外的镜像层的同时,镜像始终保持是当前所有镜像的组合,理解这一点非常重要。下图中举了一个简单的例子,每个镜像层包含3个文件,而镜像包含了来自两个镜像层的6个文件
在这里插入图片描述
上图中的镜像层跟之前图中的略有区别,主要目的是便于展示文件。
下图中展示了一个稍微复杂的三层镜像,在外部看来整个镜像只有6个文件,这是因为最上层中的文件7是文件5的一个更新版在这里插入图片描述
这种情况下,上层镜像层中的文件覆盖了底层镜像层中的文件。这样就使得文件的更新版本作为一个新镜像层添加到镜像当中。
Docker通过存储引擎(新版本采用快照机制)的方式来实现镜像层堆栈,并保证多镜像层对外屐示为统一的文件系统
Linux上可用的存储引擎有AUFS、 Overlay2、 Device Mapper、Btfs以及ZFS 。顾名思义,每种存储引擎都基于 Linux中对应的文件系统或者块设备技术,并且每种存储引擎都有其独有的性能特点。
Docker在 Windows上仅支持 windowsfilter 一种存储引擎,该引擎基于NTFS文件系统之上实现了分层和CoW。
下图展示了与系统显示相同的三层镜像。所有镜像层堆并合并,对外提供统一的视图
在这里插入图片描述

特点

Docker镜像都是只读的,当容器启动时新的可写层被加载到镜像的顶部,这一层就是我们通常说的容器层,容器之下的都叫镜像层commit镜像

如何提交一个自己的镜像?

docker commit 提交容器成为一个新的副本

# 命令和git原理类似
docker commit -m="提交的描述信息" -a="提交的人" 容器id 目标镜像名 : [TAG]
实战测试
# 1、启动一个默认的tomcat
[root@bogon ~]# docker run -d -p 8080:8080 tomcat /bin/bash
[root@bogon ~]# docker exec -it 7c3ded83d209 /bin/bash
# 2、进入tomcat之后发现这个默认的tomcat是没有webapps应用
[root@bogon ~]# docker exec -it 7c3ded83d209 /bin/bash
root@7c3ded83d209:/usr/local/tomcat# ls webapps
# 3、自己拷贝进去了基本的文件
root@7c3ded83d209:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@7c3ded83d209:/usr/local/tomcat# ls webapps
ROOT
docs
examples
host-manager
manager
# 4、将我们操作过的容器通过commit 提交成为一个新的镜像,就可使用我们修改过的镜像,这就是我们自己完善过的镜像
[root@bogon ~]# docker commit -a="hangcheng.lu" -m="add webapps app" 7c3ded83d209 tomcat02:1.0
sha256:12ffbb9631b36fbbe852684aa5cb580d869810027e0e2c2ada9fd9c9977f7243
[root@bogon ~]# docker images
REPOSITORY
TAG
IMAGE ID
CREATED
SIZE
tomcat02
1.0
12ffbb9631b3
8 seconds ago
672MB

Docker网络

自定义网络

查看所有的docker网络在这里插入图片描述

测试
# 我们直接启动的命令 --net bridge,而这个就是我们的docker0
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat01 --net bridge tomcat
# docker0 特点,默认,域名不能访问, --link可以打通连接
# 我们可以自定义一个网络
[root@bogon ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
cc9132bac77778c28edd0b37842214f4b72d51eff956635bff03950972e21112
[root@bogon ~]# docker network ls
NETWORK ID
NAME
DRIVER
SCOPE
68dbca06b52c
bridge
bridge
local
b5b53392faaf
host
host
local
cc9132bac777
mynet
bridge
local
5c60c6b4da7a
none
null
local
# 查看自定义网络的配置
[root@bogon ~]# docker network inspect mynet
[
{
"Name": "mynet",
"Id": "cc9132bac77778c28edd0b37842214f4b72d51eff956635bff03950972e21112",
"Created": "2021-06-10T10:01:42.39448638+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.0.0/16",
"Gateway": "192.168.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
# 使用自定义网络运行两个tomcat
[root@bogon ~]# docker run -d -P --name tomcat02 --net mynet tomcat
[root@bogon ~]# docker run -d -P --name tomcat04 --net mynet tomcat 
# 通过测试发现可以直接通过ping +容器名 直接ping通
[root@bogon ~]# docker exec -it tomcat02 ping 192.168.0.3
PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=1 ttl=64 time=0.193 ms
64 bytes from 192.168.0.3: icmp_seq=2 ttl=64 time=0.149 ms
64 bytes from 192.168.0.3: icmp_seq=3 ttl=64 time=0.117 ms
64 bytes from 192.168.0.3: icmp_seq=4 ttl=64 time=0.146 ms
^C
--- 192.168.0.3 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 5ms
rtt min/avg/max/mdev = 0.117/0.151/0.193/0.028 ms
[root@bogon ~]# docker exec -it tomcat02 ping tomcat04
PING tomcat04 (192.168.0.3) 56(84) bytes of data.
64 bytes from tomcat04.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.069 ms
64 bytes from tomcat04.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.052 ms
64 bytes from tomcat04.mynet (192.168.0.3): icmp_seq=3 ttl=64 time=0.095 ms
^C
--- tomcat04 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 4ms
rtt min/avg/max/mdev = 0.052/0.072/0.095/0.017 ms

我们能自定义的网络docker都已经帮我们维护好了对应的关系,推荐我们平时这样使用网络

好处:

redis --不同的集群使用不同的网络,保证集群是安全和健康的
mysql
--不同的集群使用不同的网络,保证集群是安全和健康的

网络联通

# 使用bridge桥接方式运行两个tomcat
[root@bogon ~]# docker run -d -P --name tomcat01 --net bridge tomcat
[root@bogon ~]# docker run -d -P --name tomcat03 --net bridge tomcat
测试打通tomcat01和mynet
[root@bogon ~]# docker network connect mynet tomcat01
# 连通之后,发现就是将tomcat01放到了mynet网络下
# 一个容器,两个ip地址

在这里插入图片描述
在这里插入图片描述

容器数据卷

什么是容器数据卷?

容器之间可以有一个数据共享的技术,Docker容器中产生的数据,同步到本地
这就是卷技术,目录的挂载,将我们容器内的目录,挂载到Linux上面。 容器的持久化和同步操作,容器间也是可以数据共享的

使用数据卷
方式1:直接使用命令来挂载 -v

实战:安装MySQL
# 获取镜像
[root@bogon ceshi]# docker pull mysql 
# 运行容器,需要做数据卷挂载
# 安装启动MySQL需要配置密码 -e MYSQL_ROOT_PASSWORD=密码
[root@bogon ceshi]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql
ebb34b7a3ca5276b9a350c9c65374e73211e5e60b517ef79928c82ad12c8f5aa
# 启动成功后,我们在本地使用 sqlyog 来测试一下连接

删除容器,发现我们直接挂载到本地的数据卷依旧没有丢失,这就实现了容器数据的持久化功能在这里插入图片描述

具名挂载和命名挂载
# 匿名挂载
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx
# 查看所有的 volume 的情况
docker volume ls
DRIVER
VOLUME NAME
local
0fb7545eb09121c422feefed573e015280fc3c55b05df3a905808a38d05e1cc9
# 具名挂载
-v 卷名:容器内路径
docker run -d -P --name nginx02 -v juming:/etc/nginx nginx
docker volume ls
DRIVER
VOLUME NAME
local
juming
# 查看数据卷
docker volume inspect 卷名

在这里插入图片描述
所有的docker容器内的卷,在没有指定目录的情况下都是在 /var/lib/docker/volumes 目录下在这里插入图片描述

DockerFile

DockerFile介绍

dockerfile 是用来构建docker镜像的文件。命令参数脚本
构建步骤:

1、编写一个dockerfile文件
2、docker build 构建成为一个镜像
3、docker run 运行镜像
4、docker push 发布镜像(DockerHub、阿里云镜像仓库)

在这里插入图片描述
很多官方镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像

DockerFile构建过程

基础知识:

1、每个保留关键字(指令)都是必须是大写字母
2、从上到下的执行顺序
3、# 表示注释
4、每一个指令都会创建提交一个新的镜像层,并提交

在这里插入图片描述

dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单
Docker镜像逐渐成为企业交付的标准,必须要掌握
DockerFile:构建文件,定义了一切的步骤,源代码
DockerImages:通过DockerFile构建生成的镜像,最终发布和运行的产品
Docker容器:容器就是镜像运行起来提供服务器

DockerFile指令
FROM
# 指定基础镜像,一切从这里开始构建
MAINTAINER
# 指定维护者信息,镜像是谁写的,姓名+邮箱
RUN
# 镜像构建的时候需要运行的命令
ADD
# 添加内容,COPY文件,会自动解压
WORKDIR
# 设置当前的工作目录,即镜像的工作目录 
VOLUME
# 挂载的目录
EXPOSE
# 指定对外的端口,保留端口配置
CMD
# 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT
# 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD
# 当构建一个被继承 DockerFile 这个时候就会运行 ONBUILD 的指令。触发指令
COPY
# 类似ADD,将我们文件拷贝到镜像中
ENV
# 构建的时候设置环境变量
RUN
# 运行
创建一个自己的centos
1、编写DockerFile的文件
[root@bogon dockerfile]# cat mydockerfile_centos 
FROM centos
MIANTAINER hangcheng.lu@mobvista.com
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum install vim -y
RUN yum install net-tools -y
EXPOSE 80
CMD echo $MYPATH
CMD echo "---end---"
CMD echo /bin/bash
2、通过编写好的文件构建镜像
# 命令 docker build -f dockerfile文件路径 -t 镜像名:[tag] 
[root@bogon dockerfile]# docker build -f mydockerfile_centos -t mycentos:1.0 .
Successfully built fca2bdbf5ba3
Successfully tagged mycentos:1.0
3、测试运行
[root@bogon dockerfile]# docker images
REPOSITORY
TAG
IMAGE ID
CREATED
SIZE
mycentos
1.0
fca2bdbf5ba3
3 minutes ago
295MB
[root@bogon dockerfile]# docker run -it mycentos:1.0 /bin/bash
[root@615a10c7201f local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>
mtu 1500
inet 172.17.0.6
netmask 255.255.0.0
broadcast 172.17.255.255
ether 02:42:ac:11:00:06
txqueuelen 0
(Ethernet)
RX packets 8
bytes 656 (656.0 B)
RX errors 0
dropped 0
overruns 0
frame 0
TX packets 0
bytes 0 (0.0 B)
TX errors 0
dropped 0 overruns 0
carrier 0
collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>
mtu 65536
inet 127.0.0.1
netmask 255.0.0.0
loop
txqueuelen 1000
(Local Loopback)
RX packets 0
bytes 0 (0.0 B)
RX errors 0
dropped 0
overruns 0
frame 0
TX packets 0
bytes 0 (0.0 B)
TX errors 0
dropped 0 overruns 0
carrier 0
collisions 0

我们可以列出本地进行的变更历史
在这里插入图片描述

CMD 和 ENTRYPOINT 的区别
CMD
# 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代 
ENTRYPOINT
# 指定这个容器启动的时候要运行的命令,可以追加命令

最后

以上就是坚定店员为你收集整理的Docker详解的全部内容,希望文章能够帮你解决Docker详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部