六、Docker容器数据卷

2020-02-23  本文已影响0人  紫荆秋雪_文

一、docker容器数据卷

二、docker容器数据卷的作用

三、docker容器数据卷实践

1、使用命令方式

docker run -it -v /hostData:/containerData centos:7
Host共享数据文件夹.png Container共享数据卷.png
docker inspect 容器ID
docker inspect 5f016a429e98

[
    {
        "Id": "5f016a429e98d410f841601cd9aeea0ebb66f81f519d31c301d37c20a71006ae",
        "Created": "2020-02-22T08:59:53.187799839Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 10627,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2020-02-22T08:59:53.499628335Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:5e35e350aded98340bc8fcb0ba392d809c807bc3eb5c618d4a0674d98d88bccd",
        "ResolvConfPath": "/var/lib/docker/containers/5f016a429e98d410f841601cd9aeea0ebb66f81f519d31c301d37c20a71006ae/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/5f016a429e98d410f841601cd9aeea0ebb66f81f519d31c301d37c20a71006ae/hostname",
        "HostsPath": "/var/lib/docker/containers/5f016a429e98d410f841601cd9aeea0ebb66f81f519d31c301d37c20a71006ae/hosts",
        "LogPath": "/var/lib/docker/containers/5f016a429e98d410f841601cd9aeea0ebb66f81f519d31c301d37c20a71006ae/5f016a429e98d410f841601cd9aeea0ebb66f81f519d31c301d37c20a71006ae-json.log",
        "Name": "/sharp_bell",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": [
                "/hostData:/containerData"
            ],
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "shareable",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DiskQuota": 0,
            "KernelMemory": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": 0,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/f316635ab02aef6cf0ffc7d89f01078c979baa92c6c92df392cfc3700a3a4a87-init/diff:/var/lib/docker/overlay2/6dfbb9efda33e6de2d8f17d045996576f0261db0476b94926ad474ab477d1de4/diff",
                "MergedDir": "/var/lib/docker/overlay2/f316635ab02aef6cf0ffc7d89f01078c979baa92c6c92df392cfc3700a3a4a87/merged",
                "UpperDir": "/var/lib/docker/overlay2/f316635ab02aef6cf0ffc7d89f01078c979baa92c6c92df392cfc3700a3a4a87/diff",
                "WorkDir": "/var/lib/docker/overlay2/f316635ab02aef6cf0ffc7d89f01078c979baa92c6c92df392cfc3700a3a4a87/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/hostData",
                "Destination": "/containerData",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
        "Config": {
            "Hostname": "5f016a429e98",
            "Domainname": "",
            "User": "",
            "AttachStdin": true,
            "AttachStdout": true,
            "AttachStderr": true,
            "Tty": true,
            "OpenStdin": true,
            "StdinOnce": true,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "ArgsEscaped": true,
            "Image": "centos:7",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20191001",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "f1fcdc37b8faff6e72b40ca1ee86d4e23ccaf4ee8504542ec34e367f5722e96e",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/f1fcdc37b8fa",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "f6fb0e237dc722331ea38e7383b3e707b38addd78518a756b008511131fec5f7",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.3",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:03",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "eebbaba16bf28e00b62bd9fe3a8faa5deb1a77cb315353561db856207060ad03",
                    "EndpointID": "f6fb0e237dc722331ea38e7383b3e707b38addd78518a756b008511131fec5f7",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:03",
                    "DriverOpts": null
                }
            }
        }
    }
]

绑定成功

"Binds": [
                "/hostData:/containerData"
            ]
[root@localhost hostData]# touch host.txt
[root@localhost hostData]# ll
总用量 0
-rw-r--r--. 1 root root 0 2月  22 17:16 host.txt
[root@5f016a429e98 containerData]# pwd
/containerData
[root@5f016a429e98 containerData]# ll
total 0
-rw-r--r--. 1 root root 0 Feb 22 09:16 host.txt
[root@5f016a429e98 containerData]#
[root@localhost hostData]# ll
总用量 4
-rw-r--r--. 1 root root 16 2月  22 17:19 host.txt
[root@localhost hostData]# cat host.txt
Container input
[root@localhost hostData]#
[root@localhost hostData]# vim host.txt
[root@localhost hostData]# cat host.txt
Container input
Host input
# 重启容器
docker start 5f016a429e98
# 重新进入容器
docker attach 5f016a429e98

[root@5f016a429e98 containerData]# cat host.txt
Container input
Host input

2、单向共享数据(带权限)

docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
docker run -it -v /host_dir:/container_dir:ro centos:7
[root@c8be36c89a37 container_dir]# ll
total 0
[root@c8be36c89a37 container_dir]# touch container.txt
touch: cannot touch 'container.txt': Read-only file system
[root@c8be36c89a37 container_dir]#
[root@localhost host_dir]# touch host.txt
[root@localhost host_dir]# ll
总用量 0
-rw-r--r--. 1 root root 0 2月  22 17:40 host.txt
[root@localhost host_dir]# vim host.txt
[root@localhost host_dir]# cat host.txt
Host input
[root@localhost host_dir]#
[root@c8be36c89a37 container_dir]# ll
total 4
-rw-r--r--. 1 root root 11 Feb 22 09:41 host.txt
[root@c8be36c89a37 container_dir]# cat host.txt
Host input
[root@c8be36c89a37 container_dir]#

3、DockerFile方式实现容器数据卷

FROM centos
VOLUME ["/dataVolumeContainer1", "/dataVolumeContainer1"]
CMD echo "Finished --- Success"
CMD /bin/bash
docker build -t centos:1.0 .
[root@localhost mydocker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              1.0                 f714bb5ea228        16 seconds ago      237MB
[root@localhost mydocker]# docker run -it centos:1.0
[root@f9b903d68555 /]# ll
bash: ll: command not found
[root@f9b903d68555 /]# ls
bin           dev  home  lib64       media  opt   root  sbin  sys  usr
dataVolumeContainer1  etc  lib   lost+found  mnt    proc  run   srv   tmp  var
[root@f9b903d68555 /]#
docker inspect f9b903d68555

[
    {
        "Id": "f9b903d68555dff9ccaa5dac214ff4055376fe1fef8c0a2b03c8d1bcaa2d05c4",
        "Created": "2020-02-22T18:24:22.500708125Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "/bin/bash"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 12091,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2020-02-22T18:24:22.765690526Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:f714bb5ea228aa2d66f3b0e1700d5f3ae85c49cc8e2e7dee4cb20bff1a55de1f",
        "ResolvConfPath": "/var/lib/docker/containers/f9b903d68555dff9ccaa5dac214ff4055376fe1fef8c0a2b03c8d1bcaa2d05c4/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/f9b903d68555dff9ccaa5dac214ff4055376fe1fef8c0a2b03c8d1bcaa2d05c4/hostname",
        "HostsPath": "/var/lib/docker/containers/f9b903d68555dff9ccaa5dac214ff4055376fe1fef8c0a2b03c8d1bcaa2d05c4/hosts",
        "LogPath": "/var/lib/docker/containers/f9b903d68555dff9ccaa5dac214ff4055376fe1fef8c0a2b03c8d1bcaa2d05c4/f9b903d68555dff9ccaa5dac214ff4055376fe1fef8c0a2b03c8d1bcaa2d05c4-json.log",
        "Name": "/stupefied_blackwell",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "shareable",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DiskQuota": 0,
            "KernelMemory": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": 0,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/fbba0702d68673a98e00f3184c45ed6c7df405fade2d76b48b3f8d9cb748c9e3-init/diff:/var/lib/docker/overlay2/ecc8e8b4c47a96038eedd2cef738b6747ee788e5b0f360ece2cf9cfd20e47d0f/diff",
                "MergedDir": "/var/lib/docker/overlay2/fbba0702d68673a98e00f3184c45ed6c7df405fade2d76b48b3f8d9cb748c9e3/merged",
                "UpperDir": "/var/lib/docker/overlay2/fbba0702d68673a98e00f3184c45ed6c7df405fade2d76b48b3f8d9cb748c9e3/diff",
                "WorkDir": "/var/lib/docker/overlay2/fbba0702d68673a98e00f3184c45ed6c7df405fade2d76b48b3f8d9cb748c9e3/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [
            {
                "Type": "volume",
                "Name": "92f1136825480b227587155797241a8b51d06ee0894624bae488c239111752c3",
                "Source": "/var/lib/docker/volumes/92f1136825480b227587155797241a8b51d06ee0894624bae488c239111752c3/_data",
                "Destination": "/dataVolumeContainer1",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
        "Config": {
            "Hostname": "f9b903d68555",
            "Domainname": "",
            "User": "",
            "AttachStdin": true,
            "AttachStdout": true,
            "AttachStderr": true,
            "Tty": true,
            "OpenStdin": true,
            "StdinOnce": true,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "/bin/bash"
            ],
            "ArgsEscaped": true,
            "Image": "centos:1.0",
            "Volumes": {
                "/dataVolumeContainer1": {}
            },
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20200114",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS",
                "org.opencontainers.image.created": "2020-01-14 00:00:00-08:00",
                "org.opencontainers.image.licenses": "GPL-2.0-only",
                "org.opencontainers.image.title": "CentOS Base Image",
                "org.opencontainers.image.vendor": "CentOS"
            }
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "4f31fb1fedf3c15a099f63014203b056f2c29187e5bd333dfcd01476e9339118",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/4f31fb1fedf3",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "52548e125940c16fc152743bcad035411c67d03a34a7585452763bd2b36c9c29",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "eebbaba16bf28e00b62bd9fe3a8faa5deb1a77cb315353561db856207060ad03",
                    "EndpointID": "52548e125940c16fc152743bcad035411c67d03a34a7585452763bd2b36c9c29",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]

宿主文件夹:/var/lib/docker/volumes/92f1136825480b227587155797241a8b51d06ee0894624bae488c239111752c3/_data
[root@localhost ~]# cd /var/lib/docker/volumes/92f1136825480b227587155797241a8b51d06ee0894624bae488c239111752c3/_data
[root@localhost _data]# ll
总用量 0
[root@localhost _data]# ll
总用量 4
-rw-r--r--. 1 root root 16 2月  23 02:33 container.txt
[root@localhost _data]# cat container.txt
Container input
[root@localhost _data]#
在挂载目录后多加一个--privileged=true参数即可

四、数据卷容器

1、什么是数据卷容器

命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器

2、先启动一个父容器dc1

docker run -it --name=dc1 centos:2.0

3、在容器dc1的dataVolumeContainer2文件夹中创建dc1.txt

[root@localhost /]# docker run -it --name=dc1 centos:2.0
[root@f5943ed65cad /]# ls
bin  dataVolumeContainer1  dataVolumeContainer2  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@f5943ed65cad /]# cd dataVolumeContainer2
[root@f5943ed65cad dataVolumeContainer2]# ls
[root@f5943ed65cad dataVolumeContainer2]# touch dc1.txt
[root@f5943ed65cad dataVolumeContainer2]# ls
dc1.txt
[root@f5943ed65cad dataVolumeContainer2]#

4、创建dc2、dc3继承自dc1

docker run -it --name=dc2 --volumes-from dc1 centos:2.0
docker run -it --name=dc3 --volumes-from dc1 centos:2.0

5、进入容器dc2中的文件夹dataVolumeContainer2

[root@localhost /]# docker run -it --name=dc2 --volumes-from dc1 centos:2.0
[root@1a90d12e1013 /]# ls
bin  dataVolumeContainer1  dataVolumeContainer2  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@1a90d12e1013 /]# cd dataVolumeContainer2
[root@1a90d12e1013 dataVolumeContainer2]# ls
dc1.txt

6、在容器dc2/dc3中分别创建dc2.txt/dc3.txt

# 在容器dc2中创建dc2.txt
[root@1a90d12e1013 dataVolumeContainer2]# touch dc2.txt
[root@1a90d12e1013 dataVolumeContainer2]#

# 在容器dc3中创建dc3.txt
[root@94932e713bcb dataVolumeContainer2]# touch dc3.txt

7、在容器dc1中查看

[root@f5943ed65cad dataVolumeContainer2]# ls
dc1.txt  dc2.txt  dc3.txt

8、删除dc1容器,通过容器dc2来查看dc1.txt是否存在

# 删除dc1容器
[root@localhost /]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
94932e713bcb        centos:2.0          "/bin/sh -c /bin/bash"   7 minutes ago       Up 7 minutes                            dc3
1a90d12e1013        centos:2.0          "/bin/sh -c /bin/bash"   9 minutes ago       Up 9 minutes                            dc2

#查看其它容器,dc1.txt依然存在
[root@94932e713bcb dataVolumeContainer2]# ls
dc1.txt  dc2.txt  dc3.txt

9、新建dc4继承dc3,并且删除dc2、dc3

# 新建dc4容器
[root@localhost /]# docker run -it --name dc4 --volumes-from dc3 centos:2.0
[root@b316ca93b74c /]# ls
bin  dataVolumeContainer1  dataVolumeContainer2  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@b316ca93b74c /]# cd dataVolumeContainer2
[root@b316ca93b74c dataVolumeContainer2]# ls
dc1.txt  dc2.txt  dc3.txt
[root@b316ca93b74c dataVolumeContainer2]# cat dc1.txt
Container3 Input
[root@b316ca93b74c dataVolumeContainer2]# vi dc1.txt
[root@b316ca93b74c dataVolumeContainer2]# cat
^Z
[1]+  Stopped                 cat
[root@b316ca93b74c dataVolumeContainer2]# cat dc1.txt
Container3 Input

Container4 Input
[root@b316ca93b74c dataVolumeContainer2]#

10、小结

上一篇下一篇

猜你喜欢

热点阅读