docker 命令深入理解
目录
一、容器相关
1、docker run centos
2、查看centos容器
3、删除退出的容器
4、两个危险的命令 docker image prune && docker system prune
5、查看容器实际的大小
6、docker cp
7、容器互联
8. docker 查看容器的资源使用状况
二、镜像相关
1、docker pull 拉取镜像
2、docker images或者docker image ls 查看镜像
3、docker tag“重命名”镜像
4、docker rmi或者docker image rm 删除镜像
5、docker container commit 构建镜像
6、docker image build
7、docker commit 和docker build的优劣势
8、镜像的实现原理
9、镜像文件的结果
三、docker架构的理解
四、网络相关
4.1 docker network ls
4.2 docker network inspect {networkid}
五、容器是如何挂载的?
nginx测试html挂载几种不同情况
如何解决空挂载问题呢?
多看看这个图,加深记忆!
一、容器相关
1、docker run centos
首次运行如果本地没有该base image,则会从远端clone一个base images。
[root@MiWiFi-R3L-srv ~]# docker run centos
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
3c72a8ed6814: Pull complete
Digest: sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd
Status: Downloaded newer image for centos:latest
[root@MiWiFi-R3L-srv ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 0d120b6ccaa8 2 months ago 215MB
hello-world latest bf756fb1ae65 10 months ago 13.3kB
[root@MiWiFi-R3L-srv ~]# docker run centos
[root@MiWiFi-R3L-srv ~]#
docker run centos 执行完之后centos对应的/bin/bash 就退出了。
交互式的docker run
- -i, --interactive Keep STDIN open even if not attached
- -t, --tty Allocate a pseudo-TTY
- --name 指定container的名字
[root@MiWiFi-R3L-srv ~]# docker run -it centos
[root@de7d5f1cad4e /]# ls -l
total 0
lrwxrwxrwx. 1 root root 7 May 11 2019 bin -> usr/bin
drwxr-xr-x. 5 root root 360 Nov 3 14:23 dev
drwxr-xr-x. 1 root root 66 Nov 3 14:23 etc
drwxr-xr-x. 2 root root 6 May 11 2019 home
lrwxrwxrwx. 1 root root 7 May 11 2019 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 May 11 2019 lib64 -> usr/lib64
drwx------. 2 root root 6 Aug 9 21:40 lost+found
drwxr-xr-x. 2 root root 6 May 11 2019 media
drwxr-xr-x. 2 root root 6 May 11 2019 mnt
drwxr-xr-x. 2 root root 6 May 11 2019 opt
dr-xr-xr-x. 308 root root 0 Nov 3 14:23 proc
dr-xr-x---. 2 root root 162 Aug 9 21:40 root
drwxr-xr-x. 11 root root 163 Aug 9 21:40 run
lrwxrwxrwx. 1 root root 8 May 11 2019 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 May 11 2019 srv
dr-xr-xr-x. 13 root root 0 Oct 29 14:24 sys
drwxrwxrwt. 7 root root 145 Aug 9 21:40 tmp
drwxr-xr-x. 12 root root 144 Aug 9 21:40 usr
drwxr-xr-x. 20 root root 262 Aug 9 21:40 var
[root@de7d5f1cad4e /]#
此时使用docker container ls 可以看到正在运行的image
2、查看centos容器
[root@MiWiFi-R3L-srv ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@MiWiFi-R3L-srv ~]#
[root@MiWiFi-R3L-srv ~]#
[root@MiWiFi-R3L-srv ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7af01d5e9dda centos "/bin/bash" 13 seconds ago Exited (0) 12 seconds ago happy_sinoussi
9514cf1bd842 centos "/bin/bash" 52 seconds ago Exited (0) 51 seconds ago sweet_curie
0edb374d25bb hello-world "/hello" 24 hours ago Exited (0) 24 hours ago bold_burnell
3、删除退出的容器
docker container的命令列表,使用rm
root@MiWiFi-R3L-srv ~]# docker container
或者docker rm de7 ,默认删除的container
注意不要加上参数 i 就是 删除image。
docker rmi {id}
如何批量删除已经退出的container?
[root@MiWiFi-R3L-srv ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
922dd27b0faf centos "/bin/bash" 10 seconds ago Exited (0) 9 seconds ago mystifying_khorana
af024051dd04 centos "/bin/bash" 13 seconds ago Exited (0) 12 seconds ago inspiring_mendeleev
3c91318afd1e centos "/bin/bash" 16 seconds ago Exited (0) 15 seconds ago modest_johnson
7af01d5e9dda centos "/bin/bash" 21 minutes ago Exited (0) 21 minutes ago happy_sinoussi
9514cf1bd842 centos "/bin/bash" 21 minutes ago Exited (0) 21 minutes ago sweet_curie
0edb374d25bb hello-world "/hello" 24 hours ago Exited (0) 24 hours ago bold_burnell
使用-q参数列出containerId
root@MiWiFi-R3L-srv ~]# docker container ls -aq
922dd27b0faf
af024051dd04
3c91318afd1e
7af01d5e9dda
9514cf1bd842
0edb374d25bb
如果你会使用awk,不使用这个参数完全可以,请看:
[root@MiWiFi-R3L-srv ~]# docker container ls -a|grep -v CONTAINER|awk '{print $1}'
922dd27b0faf
af024051dd04
3c91318afd1e
7af01d5e9dda
9514cf1bd842
0edb374d25bb
删除所有已经退出的container,世界清静了。
[root@MiWiFi-R3L-srv ~]# docker rm $(docker container ls -aq)
922dd27b0faf
af024051dd04
3c91318afd1e
7af01d5e9dda
9514cf1bd842
0edb374d25bb
[root@MiWiFi-R3L-srv ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@MiWiFi-R3L-srv ~]#
这样把正在run的container也干掉了,显然是不行的。例如这样如何只干掉Exited的container呢?
-f 过滤状态,当然shell也可以实现
root@MiWiFi-R3L-srv ~]# docker container ls -f "status=exited"
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e03dda244d80 centos "/bin/bash" 2 minutes ago Exited (0) 2 minutes ago jolly_euclid
590c5bd090d7 centos "/bin/bash" 2 minutes ago Exited (0) 2 minutes ago sweet_hertz
707300b53120 centos "/bin/bash" 2 minutes ago Exited (0) 2 minutes ago pedantic_liskov
dbf30d595e76 centos "/bin/bash" 2 minutes ago Exited (0) 2 minutes ago goofy_leakey
[root@MiWiFi-R3L-srv ~]# docker container ls -f "status=exited" -q
e03dda244d80
590c5bd090d7
707300b53120
dbf30d595e76
docker rm -f $(docker ps -aq) 强制删除所有容器
4、两个危险的命令 docker image prune && docker system prune
- docker image prune -af 仅仅清除没有被容器使用的镜像文件
- docker system prune -f 清除多余的数据,包括停止的容器、多余的镜像、未被使用的volume等等
5、查看容器实际的大小
docker ps -s
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
e06dcb6e2ecc busybox "/bin/sh -c 'while t…" 34 hours ago Up 34 hours vibrant_diffie 0B (virtual 1.24MB)
size:用于每个容器的可写层的数据量(在磁盘上)。
virtual size:容器使用的用于只读图像数据的数据量加上容器的可写图层大小。
多个容器可以共享部分或全部只读图像数据。
从同一图像开始的两个容器共享100%的只读数据,而具有不同图像的两个容器(具有相同的层)共享这些公共
层。 因此,不能只对虚拟大小进行总计。这高估了总磁盘使用量,可能是一笔不小的数目。
6、docker cp
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- :把容器里面的复制出来
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH:把外部的复制进去
SRC_PATH 指定为一个文件
- DEST_PATH 不存在:文件名为 DEST_PATH ,内容为SRC的内容
- DEST_PATH 不存在并且以 / 结尾:报错
- DEST_PATH 存在并且是文件:目标文件内容被替换为SRC_PATH的文件内容。
- DEST_PATH 存在并且是目录:文件复制到目录内,文件名为SRC_PATH指定的名字
SRC_PATH 指定为一个目录
- DEST_PATH 不存在: DEST_PATH 创建文件夹,复制源文件夹内的所有内容
- DEST_PATH 存在是文件:报错
- DEST_PATH 存在是目录
- SRC_PATH 不以 /. 结束:源文件夹复制到目标里面
- SRC_PATH 以 /. 结束:源文件夹里面的内容复制到目标里面
自动创建文件夹不会做递归。把父文件夹做好
~]# docker cp index.html mynginx4:/usr/share/nginx/html
~]# docker cp mynginx4:/etc/nginx/nginx.conf nginx.conf
7、容器互联
场景:我们无需暴露mysql的情况下,让web应用使用mysql;
--link name:alias ,name连接容器的名称,alias连接的别名
docker run -d -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
docker run -d --link mysql01:mysql --name tomcat tomcat:7
docker exec -it tomcat bash
cat /etc/hosts
ping mysql
8. docker 查看容器的资源使用状况
docker stats
二、镜像相关
镜像是一个只读的 Docker 容器模板,包含启动容器所需要的所有文件系统结构和内容。简单来讲,镜像是一个特殊的文件系统,它提供了容器运行时所需的程序、软件库、资源、配置等静态数据。即镜像不包含任何动态数据,镜像内容在构建后不会被改变。
镜像的操作
从图中可知,镜像的操作可分为:
- 拉取镜像,使用docker pull命令拉取远程仓库的镜像到本地 ;
- 重命名镜像,使用docker tag命令“重命名”镜像 ;
- 查看镜像,使用docker image ls或docker images命令查看本地已经存在的镜像 ;
- 删除镜像,使用docker rmi命令删除无用镜像 ;
- 构建镜像,构建镜像有两种方式。第一种方式是使用docker build命令基于 Dockerfile 构建镜像,也是我比较推荐的镜像构建方式;第二种方式是使用docker commit命令基于已经运行的容器提交为镜像。
docker中有一个base image,例如centos、ubuntu、nginx、python.... 这些都是熟知的有名的docker 镜像,当你基于某个base image生成了container,想把它变成一个自己的base image,如何做?
1、docker pull 拉取镜像
$ docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
61c5ed1cbdf8: Pull complete
Digest: sha256:4f47c01fa91355af2865ac10fef5bf6ec9c7f42ad2321377c21e844427972977
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest
实际上执行docker pull busybox命令,都是先从本地搜索,如果本地搜索不到busybox镜像则从 Docker Hub 下载镜像。
2、docker images或者docker image ls 查看镜像
3、docker tag“重命名”镜像
什么时候用?
如果你想要自定义镜像名称或者推送镜像到其他镜像仓库.
可以看到,镜像列表中多了一个mybusybox的镜像。但细心的同学可能已经发现,busybox和mybusybox这两个镜像的 IMAGE ID 是完全一样的。
为什么呢?实际上它们指向了同一个镜像文件,只是别名不同而已。
4、docker rmi或者docker image rm 删除镜像
5、docker container commit 构建镜像
docker commit。可理解为是基于一个改变了的container生成image。
例如我本地clone的image没有vim,进入容器中 docker run -it centos
安装vim后container commit成一个新的镜像
root@MiWiFi-R3L-srv ~]# docker run -it centos
[root@7bbfd1dbf6b0 /]#
[root@7bbfd1dbf6b0 /]#
[root@7bbfd1dbf6b0 /]# vim
bash: vim: command not found
[root@7bbfd1dbf6b0 /]# yum install -y vim
Failed to set locale, defaulting to C.UTF-8
CentOS-8 - AppStream 1.0 MB/s | 5.8 MB 00:05
CentOS-8 - Base 1.2 MB/s | 2.2 MB 00:01
CentOS-8 - Extras 8.2 kB/s | 8.1 kB 00:00
Dependencies resolved.
==========================================================================================================================================================================================================Package Architecture Version Repository Size
==========================================================================================================================================================================================================
Installing:vim-enhanced x86_64 2:8.0.1763-13.el8 AppStream 1.4 M
Installing dependencies:
root@MiWiFi-R3L-srv ~]# docker run -it centos
[root@7bbfd1dbf6b0 /]#
[root@7bbfd1dbf6b0 /]#
[root@7bbfd1dbf6b0 /]# vim
bash: vim: command not found
[root@7bbfd1dbf6b0 /]# yum install -y vim
Failed to set locale, defaulting to C.UTF-8
CentOS-8 - AppStream 1.0 MB/s | 5.8 MB 00:05
CentOS-8 - Base 1.2 MB/s | 2.2 MB 00:01
CentOS-8 - Extras 8.2 kB/s | 8.1 kB 00:00
Dependencies resolved.
==========================================================================================================================================================================================================Package Architecture Version Repository Size
==========================================================================================================================================================================================================
Installing:vim-enhanced x86_64 2:8.0.1763-13.el8 AppStream 1.4 M
Installing dependencies:
.....
Installed:gpm-libs-1.20.7-15.el8.x86_64 vim-common-2:8.0.1763-13.el8.x86_64 vim-enhanced-2:8.0.1763-13.el8.x86_64 vim-filesystem-2:8.0.1763-13.el8.noarch which-2.21-12.el8.x86_64 Complete!
现在这个container 已经基于base image 增加了一层。
[root@MiWiFi-R3L-srv ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7bbfd1dbf6b0 centos "/bin/bash" 5 minutes ago Exited (0) 5 seconds ago naughty_bohr
执行docker commit
~]# docker commit naughty_bohr ninesun0318/centos-vim
sha256:e429c2ad99ac9aef24b05b83294d523e2c1e329a4797b336cc695236ea258d5d
查看新生产的image
其大小比base image大一些
[root@MiWiFi-R3L-srv ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ninesun0318/centos-vim latest e429c2ad99ac 36 seconds ago 272MB
centos latest 0d120b6ccaa8 2 months ago 215MB
hello-world latest bf756fb1ae65 10 months ago 13.3kB
其实他们共享了很多layer,用这张图脑补一下。
可以比较一下两个image。 重叠的层是三层,我们只是在base image上安装vim。
[root@MiWiFi-R3L-srv ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ninesun0318/centos-vim latest e429c2ad99ac 36 seconds ago 272MB
centos latest 0d120b6ccaa8 2 months ago 215MB
hello-world latest bf756fb1ae65 10 months ago 13.3kBroot@MiWiFi-R3L-srv ~]# docker history 0d120b6ccaa8
IMAGE CREATED CREATED BY SIZE COMMENT
0d120b6ccaa8 2 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 2 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 2 months ago /bin/sh -c #(nop) ADD file:538afc0c5c964ce0d… 215MB
[root@MiWiFi-R3L-srv ~]#
[root@MiWiFi-R3L-srv ~]#
[root@MiWiFi-R3L-srv ~]# docker history e429c2ad99ac
IMAGE CREATED CREATED BY SIZE COMMENT
e429c2ad99ac 3 minutes ago /bin/bash 57.2MB
0d120b6ccaa8 2 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 2 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 2 months ago /bin/sh -c #(nop) ADD file:538afc0c5c964ce0d… 215MB
方式二:
6、docker image build
可简写为docker bulid,这种方式是最重要也是最常用的镜像构建方式:Dockerfile。Dockerfile 是一个包含了用户所有构建命令的文本。通过docker build命令可以从 Dockerfile 生成镜像。
先删除刚才通过docker commit创建的image,然后通过dockerfile 创建image
~]# docker image rm e429c2ad99ac
Untagged: ninesun0318/centos-vim:latest
Deleted: sha256:e429c2ad99ac9aef24b05b83294d523e2c1e329a4797b336cc695236ea258d5d
Deleted: sha256:67d1903314845339b44999096e0d3a92e0319cfd1834a446560f050aa2a90beb
[root@MiWiFi-R3L-srv ~]#
[root@MiWiFi-R3L-srv ~]#
[root@MiWiFi-R3L-srv ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 0d120b6ccaa8 2 months ago 215MB
hello-world latest bf756fb1ae65 10 months ago 13.3kB
编写dockerfile文件
FROM 后面跟base image
RUN 后面跟要执行的命令
@MiWiFi-R3L-srv centos-vim]# more Dockerfile
FROM centos
RUN yum install -y vim
docker build -t ninesun0318/centos-vim-new .
-t 指定imagename
. 代表当前目录
[root@MiWiFi-R3L-srv centos-vim]# docker build ninesun0318/centos-vim-new .
"docker build" requires exactly 1 argument.
See 'docker build --help'.Usage: docker build [OPTIONS] PATH | URL | -Build an image from a Dockerfile
[root@MiWiFi-R3L-srv centos-vim]# docker build -t ninesun0318/centos-vim-new .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM centos---> 0d120b6ccaa8
Step 2/2 : RUN yum install -y vim---> Running in 66b68ccc08c6
CentOS-8 - AppStream 1.5 MB/s | 5.8 MB 00:03
CentOS-8 - Base 61 kB/s | 2.2 MB 00:37
CentOS-8 - Extras 6.3 kB/s | 8.1 kB 00:01
。。。。。。Complete!
Removing intermediate container 66b68ccc08c6---> 23cad8f7275a
Successfully built 23cad8f7275a
Successfully tagged ninesun0318/centos-vim-new:latest[root@MiWiFi-R3L-srv centos-vim]# more Dockerfile
FROM centos
RUN yum install -y vim
[root@MiWiFi-R3L-srv centos-vim]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ninesun0318/centos-vim-new latest 23cad8f7275a 2 minutes ago 272MB
centos latest 0d120b6ccaa8 2 months ago 215MB
hello-world latest bf756fb1ae65 10 months ago 13.3kB
再看一个例子:
FROM centos:7
COPY nginx.repo /etc/yum.repos.d/nginx.repo
RUN yum install -y nginx
EXPOSE 80
ENV HOST=mynginx
CMD ["nginx","-g","daemon off;"]
逐行分析一下上述的 Dockerfile
- 第一行表示我要基于 centos:7 这个镜像来构建自定义镜像。这里需要注意,每个 Dockerfile 的第一行除了注释都必须以 FROM 开头。
- 第二行表示拷贝本地文件 nginx.repo 文件到容器内的 /etc/yum.repos.d 目录下。这里拷贝 nginx.repo 文件是为了添加 nginx 的安装源。
- 第三行表示在容器内运行yum install -y nginx命令,安装 nginx 服务到容器内,执行完第三行命令,容器内的 nginx 已经安装完成。
- 第四行声明容器内业务(nginx)使用 80 端口对外提供服务。
- 第五行定义容器启动时的环境变量 HOST=mynginx,容器启动后可以获取到环境变量 HOST 的值为 mynginx。
- 第六行定义容器的启动命令,命令格式为 json 数组。这里设置了容器的启动命令为 nginx ,并且添加了 nginx 的启动参数 -g 'daemon off;' ,使得 nginx 以前台的方式启动。
7、docker commit 和docker build的优劣势
首先说明 docker commit 这种方式创建image不受欢迎,为什么呢?
如果有人使坏,把不该安装的软件打包在新的images,例如我docker commit一个安装监控程序的image。然后有人拉取之后就可能存在被监控的风险。因此大家clone 比人的镜像时要注意。
唯一能看到的就是这个image的构建历史。可以使用 docker history 命令查看镜像构建历史.
最好使用docker image build
原因:
- Dockerfile 的命令是完全透明的,通过查看 Dockerfile 的内容,就可以知道镜像是如何一步步构建的;类似于开源的项目一样,内部代码实现都可以看得到,如果留有后门一定会被发现的,然而如果是基于别人生成的镜像构建自己的镜像就比较危险,但是常用软件的官方docker image还是信得过的.
- Dockerfile 是纯文本的,方便跟随代码一起存放在代码仓库并做版本管理。
8、镜像的实现原理
Docker 镜像是由一系列镜像层(layer)组成的,每一层代表了镜像构建过程中的一次提交。下面以一个镜像构建的 Dockerfile 来说明镜像是如何分层的。
第一行基于 busybox 创建一个镜像层;
第二行拷贝本机 test 文件到镜像内;
第三行在 /tmp 文件夹下创建一个目录 testdir。
实验:
提示本地没有 test这个文件
在当前目录创建该文件.
有一个问题就是:base image 是read only的,那我们如何对这个base image进行写操作呢(此处的写操作代表run instal vim)?
从docker build的log来看
先基于base image docker run了一个临时的container,安装结束后dock rm了这个container。
- Running in 66b68ccc08c6
- Removing intermediate container 66b68ccc08c6
9、镜像文件的结果
我的 Docker 使用的是 overlay2 文件驱动(这部分涉及docker的文件系统),进入到/var/lib/docker/overlay2
目录下使用tree .
命令查看产生的镜像文件:
分层的结构使得 Docker 镜像非常轻量,每一层根据镜像的内容都有一个唯一的 ID 值,当不同的镜像之间有相同的镜像层时,便可以实现不同的镜像之间共享镜像层的效果。注意镜像层共享是 Docker 默认的机制,无需设置。所以docker 镜像非常轻量级. 深入理解docker 一定会帮助你理解linux 的设计精髓.
三、docker架构的理解
Docker 是一个C/S架构的程序,Docker客户端向Docker的服务端(Docker daemon) 发出请求,服务端处理完请求并返回结果。
Docker daemon: 运行在宿主机上,Docker的守护进程,用户通过 docker
命令与Docker daemon交互。
Docker client: Docker命令行工具,是用户管理运维Docker的主要方式,Docker client向Docker daemon发出请求,Docker daemon将结果返回给用户,Docker client也可以通过socket或者RESTful api访问Docker daemon。
image:镜像本质上是一个文件系统及其参数配置的组合。Docker 会把应用程序及依赖打包进镜像里,提供了容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等),通过这个镜像文件可生成 Docker 容器。一个镜像可以运行一个或者多个容器,镜像可以通过Dockerfile创建,也可以从Docker hub/registry上下载。
container:容器是从镜像创建的应用运行实例,启动一个镜像就是一个容器,多个容器之间不会相互影响,保证容器中的程序运行在一个相对安全的环境中。
registry: 仓库,共享和管理Docker镜像的地方,用户可以上传或者下载上面的镜像,官方地址为 https://registry.hub.docker.com/
,各个公司也可以搭建私有Docker registry,可参考
镜像就相当于打包好的代码,镜像启动之后运行在容器中,仓库就是装存储镜像的地方。
从官方网站上拷贝另一种图,介绍Docker Engine 纬度的架构。清晰的介绍server/client交互,容器和镜像、数据之间的一些联系。
四、网络相关
4.1 docker network ls
[root@iZ2vceej7yes1abpm7yec2Z ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
71d80d66fb2a bridge bridge local
f598127068c2 host host local
72b31044e6dc none null local
4.2 docker network inspect {networkid}
[root@iZ2vceej7yes1abpm7yec2Z ~]# docker network inspect 71d80d66fb2a
[{"Name": "bridge","Id": "71d80d66fb2a09d5914944ae9f2680d01b646fda7587459eb33d6f88baa8f8f6","Created": "2020-11-12T16:36:00.84520899+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": null,"Config": [{"Subnet": "172.17.0.0/16","Gateway": "172.17.0.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {"4209ba002f3df2779455981caebca34c2316ff33c3a23d5b96cbb1c7d46befde": {"Name": "gallant_ramanujan","EndpointID": "71c5f117cb873858e4a812d30bc818805473ecc689c43acbbbc63e9131662b24","MacAddress": "02:42:ac:11:00:03","IPv4Address": "172.17.0.3/16","IPv6Address": ""},"51ea3cd11968aca93d47c7f05196170fcb48f9bb8edeaca8a2724ecff8da951d": {"Name": "test2","EndpointID": "68df151e913982921e62e9bfce53b24ae2747e3d818559f87f94f04ef0f9490d","MacAddress": "02:42:ac:11:00:04","IPv4Address": "172.17.0.4/16","IPv6Address": ""},"5ec232785650ae40d6e711dc8e3e1e5e653231d67e324e048de15ec0b649011a": {"Name": "djapp1","EndpointID": "ee58cab72ff088023275afe8e34727b4891446a4b0b5fa79549c8205878568aa","MacAddress": "02:42:ac:11:00:02","IPv4Address": "172.17.0.2/16","IPv6Address": ""}},"Options": {"com.docker.network.bridge.default_bridge": "true","com.docker.network.bridge.enable_icc": "true","com.docker.network.bridge.enable_ip_masquerade": "true","com.docker.network.bridge.host_binding_ipv4": "0.0.0.0","com.docker.network.bridge.name": "docker0","com.docker.network.driver.mtu": "1500"},"Labels": {}}
]
五、容器是如何挂载的?
每一个容器里面的内容,支持三种挂载方式:
1)、docker自动在外部创建文件夹自动挂载容器内部指定的文件夹内容【Dockerfile VOLUME指令的作
用】
2)、自己在外部创建文件夹,手动挂载
3)、可以把数据挂载到内存中。
-v 可以自动挂载,到linux'主机或者docker自动管理的这一部分区域
三种挂载方式:
- Volumes(卷) :存储在主机文件系统的一部分中,该文件系统由Docker管理(在Linux上是“ / var /lib / docker / volumes /”)。 非Docker进程不应修改文件系统的这一部分。 卷是在Docker中持久存储数据的最佳方法。
- Bind mounts(绑定挂载) 可以在任何地方 存储在主机系统上。 它们甚至可能是重要的系统文件或目录。 Docker主机或Docker容器上的非Docker进程可以随时对其进行修改。
- tmpfs mounts(临时挂载) 仅存储在主机系统的内存中,并且永远不会写入主机系统的文件系统
nginx测试html挂载几种不同情况
1、不挂载
docker run -dP
效果:访问默认欢迎页
2、绑定挂载(空挂载)
dokcer run -dP -v /root/html:/usr/share/nginx/html
效果:访问forbidden
外部目录覆盖内部容器目录内容,但不是修改。所以谨慎,外部空文件夹挂载方式也会导
致容器内部是空文件夹
docker inspect 查看如下:
3、卷挂载
具名卷:
docker run -dP -v html:/usr/share/nginx/html:ro
效果:访问默认欢迎页
docker inspect 查看如下:
匿名卷 :(什么都不写也不要加冒号,直接写容器内的目录)
docker run -dP -v /usr/share/nginx/html
效果:访问默认欢迎页
docker inspect 查看如下:
关于匿名卷其实docker帮我们做了创建以及将卷绑定内容目录的过程
1、先在docker底层创建一个你指定名字的卷(具名卷) html
2、把这个卷和容器内部目录绑定
docker create volume nginxhtml 如果给卷里面进行修改,容器内部的也就改了。
具体可以使用 docker volume inspect volumename查看
3、容器启动以后,目录里面的内容就在卷里面存着;
如何解决空挂载问题呢?
1、提前准备好东西 目录nginxconf,目录里面的配置we年都放里面,,再调用命令
2、docker cp nginxdemo:/etc/nginx /root/nginxconf #注意/的使用
3、docker run -d -P -v /root/nginxconf:/etc/nginx/ -v /root/nginxhtml:/usr/share/nginx/html --name=nginx999 nginx
docker 命令深入理解相关推荐
- docker 命令详细解释
docker命令详解github地址:链接描述如果对你有帮助,请给我star下! 此次操作都是在unbantu17.01下进行,docker版本是17.10.0-ce,docker-compose是1 ...
- docker 构建上下文 理解
目录 对 Docker 构建上下文的理解误区 理解 Docker 的架构 理解 docker build 的工作原理 正确理解 Docker 构建上下文 对 Docker 构建上下文的理解误区 我们都 ...
- docker命令大全
1. 查看docker信息(version.info) # 查看docker版本 $docker version # 显示docker系统的信息 $docker info 2.对ima ...
- shell执行docker命令卡挂住_Docker官方文档翻译4
第四篇:Swarms 准备工作 安装Docker版本1.13或更高版本. 安装Docker compose. 安装docker machine 阅读第1 2 3部分的内容. 确保你已发布并推送到注册仓 ...
- Docker命令行探秘
1. Docker命令行 Docker官方为了让用户快速了解Docker,提供了一个交互式教程,旨在帮助用户掌握Docker命令行的使用方法.但是由于Docker技术的快速发展,此交互式教程已经无法满 ...
- 深入浅出Docker(二):Docker命令行探秘
本文原创版权归 infoq 肖德时 所有,此处为技术收藏,如有再转,请于篇头保留原创作者及出处,以示尊重! 作者: 肖德时 原文: http://www.infoq.com/cn/articles/d ...
- docker命令入门到精通这一篇就够了
Docker命令使用 帮助命令 docker version # 显示docker的版本信息 docker info # 显示docker系统信息,包括镜像和容器的数量 docker 命令 --hel ...
- Docker命令及参数详解
1. Docker命令行 Docker官方为了让用户快速了解Docker,提供了一个交互式教程,旨在帮助用户掌握Docker命令行的使用方法.但是由于Docker技术的快速发展,此交互式教程已经无法满 ...
- THREE DAY | 网络安全之Linux(包含Linux常用命令,镜像下载,docker命令等内容)超详细!!!
THREE DAY | 网络安全之Linux 一.Linux介绍 1.Linux系统简介 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多 ...
最新文章
- leetcode342合理运用位操作判断4的幂
- 【必知】国内最设计感的 App推荐
- Longest Substring with At Most Two Distinct
- IDEA快捷键eclipse版(有自定义部分)
- unity fixedupdate_Unity之滚球游戏(上)
- cisco 基础配置命令中文解析 1
- Codeforces Round #223 (Div. 2): C. Sereja and Prefixes(二分+递归)
- 【一天一个C++小知识】013.std:map-不存在的key查找其value
- 华罗庚数学竞赛如何报名?
- 希捷移动硬盘打不开怎么办?
- 1873年2月1日 麦克斯韦《电磁通论》出版
- 奥克兰大学计算机专业好找工作吗,留学选择奥克兰大学的计算机专业肯定不会后悔...
- win10计算机网络共享打不开,win10系统网络和共享中心打不开的详细方案
- 阿里云服务器能抗ddos攻击吗
- TypeScript等无法获取到歌曲播放的位置信息时,关于歌曲的续播
- To invoke and to begin invoke, that is a question.
- 使用 AppFuse 的七个理由之二
- 使用串口调试助手发送16进制数
- 人类驯服原始OneNote经历(一)
- LCD1602 + TLC2543