方式一:直接使用命令挂载 -v
docker run -it -v 主机目录:容器内目录
#刚开始是没有/home/test目录的
[root@localhost ~]# cd /home/
[root@localhost home]# ll
总用量 4
-rwxr-xr-x. 1 root root 35 4月 7 10:04 httpd.sh
drwx------. 9 jenkins jenkins 273 4月 8 17:29 jenkins
-rw-r--r--. 1 root root 0 4月 7 09:52 test.txt
drwx------. 5 ucp ucp 170 4月 30 10:48 ucp
drwx------. 2 zsp zsp 114 4月 6 16:11 zsp
#启动一个centos容器,并将容器内home目录挂载到虚拟机的/home/test目录
[root@localhost home]# docker run -it -v /home/test:/home centos /bin/bash
[root@68fafbf222bb /]# ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
[root@68fafbf222bb /]# cd /home/
[root@68fafbf222bb home]# ls
[root@68fafbf222bb home]# touch test.txt
[root@68fafbf222bb home]#
#ctrl+p+q退出切不停止容器
[root@68fafbf222bb home]# [root@localhost home]#
[root@localhost home]#
#查看虚拟机/home目录下已经有了test目录,且已经有了test.txt文件
[root@localhost home]# ls
httpd.sh jenkins test test.txt ucp zsp
[root@localhost home]# cd test
[root@localhost test]# ll
总用量 0
-rw-r--r-- 1 root root 0 5月 18 15:20 test.txt
#查看当前容器
[root@localhost test]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68fafbf222bb centos "/bin/bash" 5 minutes ago Up 4 minutes unruffled_feistel
9543ffb6cea5 tomcat "catalina.sh run" 36 minutes ago Up 36 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp elegant_hawking
404e11d87ec5 portainer/portainer "/portainer" 4 hours ago Up 3 hours 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp prtainer-test
4956a4f82404 nginx "/docker-entrypoint.…" 4 hours ago Up About an hour 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx01
#查看当前容器的详细信息
[root@localhost test]# docker inspect 68fafbf222bb
[
......
"Mounts": [
{
"Type": "bind",
"Source": "/home/test",
"Destination": "/home",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
......
]
#数据卷挂载之后,容器中的这个目录会自动同步到虚拟机中,且就算删除容器,虚拟机中的数据也一直存在
#反向同步,在虚拟机/home/test目录修改文件同样会同步到容器内
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68fafbf222bb centos "/bin/bash" 9 minutes ago Up 9 minutes unruffled_feistel
9543ffb6cea5 tomcat "catalina.sh run" 41 minutes ago Up 41 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp elegant_hawking
404e11d87ec5 portainer/portainer "/portainer" 4 hours ago Up 4 hours 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp prtainer-test
4956a4f82404 nginx "/docker-entrypoint.…" 4 hours ago Up About an hour 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx01
[root@localhost ~]# docker rm -f 68fafbf222bb
68fafbf222bb
[root@localhost ~]# cd /home/test
[root@localhost test]# ls
test.txt
[root@localhost test]#
具名挂载 -v 容器内路径
匿名挂载 -v 卷名:容器内路径
宿主机指定路径挂载 -v /宿主机路径:容器内路径
#以匿名挂载的方式,后台启动一个centos容器
[root@iZ2ze76fqkv1iyps4ya9riZ ~]# docker run -v /etc/nginx -d centos
7c29d7734a25c1625aee450f23d69fb6c288eac665073319f13ebbc26c5bf07b
[root@iZ2ze76fqkv1iyps4ya9riZ ~]# docker inspect 7c29d7734a25
"Mounts": [
{
"Type": "volume",
"Name": "e0449931d4042f5e7eca98701e750e08e501108e90c20f194eefb1b14db47fa8",
"Source": "/var/lib/docker/volumes/e0449931d4042f5e7eca98701e750e08e501108e90c20f194eefb1b14db47fa8/_data",
"Destination": "/etc/nginx",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
]
[root@iZ2ze76fqkv1iyps4ya9riZ ~]# cd /var/lib/docker/volumes/e0449931d4042f5e7eca98701e750e08e501108e90c20f194eefb1b14db47fa8/_data
[root@iZ2ze76fqkv1iyps4ya9riZ _data]# ls
#以具名挂载的方式,后台启动一个centos容器
[root@iZ2ze76fqkv1iyps4ya9riZ _data]# docker run -v ng01:/etc/nginx -d centos
205d1de049ca9d7ec44d1189ca7d3b6a0ca7c900172d168d213281dbe04faaef
[root@iZ2ze76fqkv1iyps4ya9riZ _data]# docker inspect 205d1de049ca
"Mounts": [
{
"Type": "volume",
"Name": "ng01",
"Source": "/var/lib/docker/volumes/ng01/_data",
"Destination": "/etc/nginx",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}
],
[root@iZ2ze76fqkv1iyps4ya9riZ _data]# cd /var/lib/docker/volumes/ng01/_data
[root@iZ2ze76fqkv1iyps4ya9riZ _data]# ll
total 0
#以宿主机指定路径挂载的方式,后台启动一个centos容器
[root@iZ2ze76fqkv1iyps4ya9riZ ~]# docker run -v /home/nginx01:/etc/nginx -d centos
50e7aa7a6d923a630b5e0824757ec4233086937fd6d571b119ccc7cb6cec4042
[root@iZ2ze76fqkv1iyps4ya9riZ ~]# docker inspect 50e7aa7a6d923
"Mounts": [
{
"Type": "bind",
"Source": "/home/nginx01",
"Destination": "/etc/nginx",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
[root@iZ2ze76fqkv1iyps4ya9riZ ~]# cd /home/nginx01
[root@iZ2ze76fqkv1iyps4ya9riZ nginx01]# ll
total 0
#Dockerfile挂载
[root@iZ2ze76fqkv1iyps4ya9riZ ~]# cat Dockerfile
FROM centos
VOLUME ["volume01","volume02"]
CMD echo '-----end-----'
CMD /bin/bash
#-t 指定镜像名:tag
[root@iZ2ze76fqkv1iyps4ya9riZ ~]# docker build -f Dockerfile -t jidu-centos:1.0 .
Sending build context to Docker daemon 294.4kB
Step 1/4 : FROM centos
---> 300e315adb2f
Step 2/4 : VOLUME ["volume01","volume02"]
---> Running in cb88999d2246
Removing intermediate container cb88999d2246
---> e335e2dd259f
Step 3/4 : CMD echo '-----end-----'
---> Running in d69382a821bb
Removing intermediate container d69382a821bb
---> 161b4d73bb8a
Step 4/4 : CMD /bin/bash
---> Running in 1c974f2cb929
Removing intermediate container 1c974f2cb929
---> 32b91630b655
Successfully built 32b91630b655
Successfully tagged jidu-centos:1.0
[root@iZ2ze76fqkv1iyps4ya9riZ ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jidu-centos 1.0 32b91630b655 18 seconds ago 209MB
centos latest 300e315adb2f 5 months ago 209MB
[root@iZ2ze76fqkv1iyps4ya9riZ ~]# docker inspect 32b91630b655
"Volumes": {
"volume01": {},
"volume02": {}
},
#数据卷容器
多个mysql同步数据#--volumes-from 继承docker01
[root@iZ2ze76fqkv1iyps4ya9riZ ~]# docker run --name docker01 -it 32b91630b655 bash
#--volumes-from 继承docker01
[root@iZ2ze76fqkv1iyps4ya9riZ ~]# docker run -it --name docker02 --volumes-from docker01 32b91630b655
[root@61fa36530fc4 /]# ls -l
[root@iZ2ze76fqkv1iyps4ya9riZ ~]# docker run -it --name docker03 --volumes-from docker01 32b91630b655
[root@iZ2ze76fqkv1iyps4ya9riZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cefabb4fedab 32b91630b655 "/bin/sh -c /bin/bash" 52 seconds ago Up 51 seconds docker03
0629ce0a2e7a 32b91630b655 "/bin/sh -c /bin/bash" About a minute ago Up About a minute docker02
7369677c4c01 32b91630b655 "bash" 2 minutes ago Up 2 minutes docker01
docker01
[root@7369677c4c01 /]# cd volume01
[root@7369677c4c01 volume01]# ls
[root@7369677c4c01 volume01]# touch test.txt
[root@7369677c4c01 volume01]# ls
test.txt
docker02
[root@0629ce0a2e7a /]# ls volume01/
test.txt
docker03
[root@0629ce0a2e7a /]# ls volume01/
test.txt
#删除docker01容器后,docker02和docker03的挂载卷依旧可以访问
#使用contos初始镜像生成一个容器,继承到docker02上依旧可以同步数据卷
[root@iZ2ze76fqkv1iyps4ya9riZ ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jidu-centos 1.0 32b91630b655 14 minutes ago 209MB
centos latest 300e315adb2f 5 months ago 209MB
[root@iZ2ze76fqkv1iyps4ya9riZ ~]#
[root@iZ2ze76fqkv1iyps4ya9riZ ~]# docker run -it --name docker04 --volumes-from docker02 300e315adb2f
[root@29b98d5ea8c4 /]# ls -l
drwxr-xr-x 2 root root 4096 May 19 15:50 volume01
drwxr-xr-x 2 root root 4096 May 19 15:40 volume02
[root@29b98d5ea8c4 /]# cd volume01/
[root@29b98d5ea8c4 volume01]# ls
test.txt test01
#小知识-挂在卷拓展--默认rw
ro #readonly 只读
rw #readwrite 读写
[root@iZuf6bqi9d493xdldgnd5eZ ~]# docker run -d --name centos01 -v mycentos01://etc/nginx:ro 300e315adb2f
1f167e0f0a4883ffc123f28d651653fe0a944c8f90ccb6ca8aeb9b513d34c320
[root@iZuf6bqi9d493xdldgnd5eZ ~]# docker run -d --name centos02 -v mycentos02://etc/nginx:rw 300e315adb2f