docker19.03使用数据卷

一,查看当前的docker版本

[root@localhost data]# docker --version
Docker version 19.03.8, build afacb8b

说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest

         对应的源码可以访问这里获取: https://github.com/liuhongdi/

 说明:作者:刘宏缔 邮箱: [email protected]

二,查看当前的数据卷

使用 docker volume ls 命令

[root@localhost data]# docker volume ls
DRIVER              VOLUME NAME

三,创建一个数据卷,名字叫 zk-vol

使用 docker volume create 命令

[root@localhost data]# docker volume create zk-vol
zk-vol

[root@localhost data]# docker volume ls
DRIVER              VOLUME NAME
local               zk-vol

四,查看数据卷的详细信息

使用 docker volume inspect 命令

[root@localhost data]# docker volume inspect zk-vol
[
    {
        "CreatedAt": "2020-03-18T15:46:47+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/data/docker/volumes/zk-vol/_data",
        "Name": "zk-vol",
        "Options": {},
        "Scope": "local"
    }
]

说明:注意Mountpoint所标识的目录是volume在宿主机上的目录

五,运行一个容器,挂载我们所创建的数据卷:

1,我们在/data/docker/volumes/zk-vol/_data目录下创建一个文件a.txt,

内容是aaa

[root@localhost data]# cd /data/docker/volumes/zk-vol/_data
[root@localhost _data]# vi a.txt

2,启动后查看数据卷

[root@localhost _data]# docker run --name testvol --privileged --hostname=testvol -itd --mount src=zk-vol,dst=/data/zk-vol centos /usr/sbin/init
6f2272f22ac708276bba0a26aeb0b3e04dd9dba308d1c07b9527fa28da1ef756
[root@localhost _data]# docker exec -it testvol /bin/bash
[root@testvol /]# cd /data/zk-vol/
[root@testvol zk-vol]# more a.txt 
aaa

说明:也可以使用 -v参数进行挂载:

[root@localhost _data]# docker run --name testvol --privileged --hostname=testvol -itd -v zk-vol:/data/zk-vol centos /usr/sbin/init

六,删除数据卷:

使用 docker volume rm 命令

[root@localhost _data]# docker volume ls
DRIVER              VOLUME NAME
local               logs
local               logs2
local               zk-vol
[root@localhost _data]# docker volume rm logs
logs
[root@localhost _data]# docker volume rm logs2
logs2
[root@localhost _data]# docker volume ls
DRIVER              VOLUME NAME
local               zk-vol

七,容器数据卷:新运行一个容器,挂载三个目录或文件:

[root@localhost docker]# docker run -itd --name dbvolume --hostname dbvolume -v /etc/localtime:/etc/localtime -v /data/nfs:/data/nfs -v /data/rsync:/data/rsync centos:latest
56efd12b38ab3d5b65606782b8800a027b4aad594045f1500a3b3d440ce4d756

命名为: dbvolume

八,在宿主机中查看与容器数据卷dbvolume挂载相关的信息:

[root@localhost docker]# docker inspect dbvolume

其中:

HostConfig下面的Binds保存有挂载信息

"HostConfig": {
            "Binds": [
                "/etc/localtime:/etc/localtime",
                "/data/nfs:/data/nfs",
                "/data/rsync:/data/rsync"
            ],

Mounts下面也有这三个挂载目录的信息

 "Mounts": [
            {
                "Type": "bind",
                "Source": "/data/rsync",
                "Destination": "/data/rsync",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/etc/localtime",
                "Destination": "/etc/localtime",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/data/nfs",
                "Destination": "/data/nfs",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

九,新启动另一个容器usevolume,并挂载容器数据卷:

[root@localhost docker]# docker run --hostname usevolume --name usevolume --volumes-from dbvolume -itd --privileged centos:latest /usr/sbin/init
57926ab056fcbcb8b679bf167bcf5fd9368a4f958445ffb84c3bccc474013441

说明:--volumes-from dbvolume

--volumes-from 用来加载一个容器数据卷

十,查看新容器中的挂载信息:

[root@localhost docker]# docker inspect usevolume
"HostConfig": {
            "Binds": null,

Binds为空

"Mounts": [
            {
                "Type": "bind",
                "Source": "/etc/localtime",
                "Destination": "/etc/localtime",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/data/nfs",
                "Destination": "/data/nfs",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/data/rsync",
                "Destination": "/data/rsync",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

但Mounts下各个目录已挂载

十一,测试在dbvolume和usevolume分别写入:

1,dbvolume中

[root@dbvolume nfs]# cd /data/nfs/test
[root@dbvolume test]# vi a.txt
[root@dbvolume test]# more a.txt
aa

2,usevolume中

[root@usevolume nfs]# cd /data/nfs/test
[root@usevolume test]# vi b.txt
[root@usevolume test]# more b.txt 
bb
[root@usevolume test]# more a.txt 
aa

3,回到dbvolume中

[root@dbvolume test]# more b.txt 
bb

可见从两个容器中写入都不存在问题

十二,如果数据卷容器被停止,使用它的容器还能否正常工作?

1,停止dbvolume

[root@localhost docker]# docker stop dbvolume
dbvolume
[root@localhost docker]# docker ps -a | grep dbvolume
56efd12b38ab        centos:latest       "/bin/bash"         26 minutes ago      Exited (0) 52 seconds ago                       dbvolume

2,到usevolume中测试读写

[root@usevolume nfs]# cd /data/nfs/test
[root@usevolume test]# vi c.txt
[root@usevolume test]# more c.txt 
cc

3,从宿主机中查看c.txt是否成功写入:

[root@localhost docker]# cd /data/nfs/test/
[root@localhost test]# more c.txt 
cc

4,结论:数据卷容器被停止,使用它的容器依然可以正常工作

猜你喜欢

转载自www.cnblogs.com/architectforest/p/12540196.html