10-容器数据卷

方式一:直接使用命令挂载 -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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值