您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
06-Docker存储卷
发布时间:2020-09-12 17:30:53编辑:雪饮阅读()
Docker管理的卷
默认情况下我们使用的存储都是docker自动创建存储卷,当然我们也可以在创建时自己手动指定
[root@localhost ~]# docker run --name b2 -it -v /data busybox
/ # ls
bin data dev etc home proc root run sys tmp usr var
/ #
在该示例中我们使用了-v指定了docker管理的卷为/data
查看卷详情
[root@localhost ~]# docker inspect b2
[
{
"Id": "a83165152360f60254a84d1225448f2f6629e3cae446255b8b8b0c4d701a147d",
"Created": "2020-09-12T07:36:45.794751325Z",
"Path": "sh",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 1447,
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-09-12T07:36:47.263440578Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:018c9d7b792b4be80095d957533667279843acf9a46c973067c8d1dff31ea8b4",
"ResolvConfPath": "/var/lib/docker/containers/a83165152360f60254a84d1225448f2f6629e3cae446255b8b8b0c4d701a147d/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/a83165152360f60254a84d1225448f2f6629e3cae446255b8b8b0c4d701a147d/hostname",
"HostsPath": "/var/lib/docker/containers/a83165152360f60254a84d1225448f2f6629e3cae446255b8b8b0c4d701a147d/hosts",
"LogPath": "",
"Name": "/b2",
"RestartCount": 0,
"Driver": "overlay2",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "journald",
"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": "",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "docker-runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": null,
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DiskQuota": 0,
"KernelMemory": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": -1,
"OomKillDisable": false,
"PidsLimit": 0,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0
},
"GraphDriver": {
"Name": "overlay2",
"Data": {
"LowerDir": "/var/lib/docker/overlay2/65208f7f2328bdddf55eb0d633be87c2dbac71e4c9532b8f2ff800754405b295-init/diff:/var/lib/docker/overlay2/c85fc5ddc2b05c93c6b2682475a635ef62a7d615bafe9b740e81b969d6e6167d/diff",
"MergedDir": "/var/lib/docker/overlay2/65208f7f2328bdddf55eb0d633be87c2dbac71e4c9532b8f2ff800754405b295/merged",
"UpperDir": "/var/lib/docker/overlay2/65208f7f2328bdddf55eb0d633be87c2dbac71e4c9532b8f2ff800754405b295/diff",
"WorkDir": "/var/lib/docker/overlay2/65208f7f2328bdddf55eb0d633be87c2dbac71e4c9532b8f2ff800754405b295/work"
}
},
"Mounts": [
{
"Type": "volume",
"Name": "fa3f728c02ab032104dca0b6b1dc4b5b57d48e0a80c3117e98b2a0688a29f163",
"Source": "/var/lib/docker/volumes/fa3f728c02ab032104dca0b6b1dc4b5b57d48e0a80c3117e98b2a0688a29f163/_data",
"Destination": "/data",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
"Config": {
"Hostname": "a83165152360",
"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": [
"sh"
],
"ArgsEscaped": true,
"Image": "busybox",
"Volumes": {
"/data": {}
},
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "f8194edb34b7fc0beab1ea2680d05fc2cf0c354821ddf7ca6fdb60860e63f50b",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/f8194edb34b7",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "c07316ee0e1032d3c37a60faff100c8ac79f5f47cbfa631f2e7639ecac3f9931",
"Gateway": "10.0.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "10.0.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:0a:00:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "267c6bb4407c07563f64cf58629f2445f26477ca7e288d0634e2fa252c7c4299",
"EndpointID": "c07316ee0e1032d3c37a60faff100c8ac79f5f47cbfa631f2e7639ecac3f9931",
"Gateway": "10.0.0.1",
"IPAddress": "10.0.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:0a:00:00:02"
}
}
}
}
]
我们可以看到inspect信息中mounts中的挂载详情,尤其是mounts中的source就是该容器的docker管理的卷映射在宿主机的实际存储路径。而对于inspect中volumes中则是当前容器的docker管理的卷的详情。
在这里source中的路径与宿主机的路径对于docker容器来说是影视的,如
[root@localhost ~]# echo "hello container" >>/var/lib/docker/volumes/fa3f728c02ab032104dca0b6b1dc4b5b57d48e0a80c3117e98b2a0688a29f163/_data/test.html
然后我们进入刚才这个容器里面在看看
[root@localhost ~]# docker exec -it b2 /bin/sh
/ # cat /data/test.html
hello container
/ #
可见宿主机上只要在source上建立了文件也是能同步到docker容器对应映射目录的
那么反之亦然
[root@localhost ~]# docker exec -it b2 /bin/sh
/ # vi /data/test.html
/ # cat /data/test.html
hello container
this is docker
/ #
[root@localhost ~]# cat /var/lib/docker/volumes/fa3f728c02ab032104dca0b6b1dc4b5b57d48e0a80c3117e98b2a0688a29f163/_data/test.html
hello container
this is docker
绑定的卷
上面我们了解到docker的卷是可以指定其在docker容器内部的映射位置(上例的/data),但是并没有指定在宿主机的映射路径,而在宿主机的映射路径是靠我们的inspect来获取的。
那么如果我想要自定义在宿主机的映射路径,这种自定义的方式创建的卷叫做绑定的卷,如
[root@localhost ~]# docker run --name b2 -it --rm -v /data/volumes/b2:/data busybox
/ #
这里我们创建了b2容器并指定了该容器内部卷的映射为/data而且还指定了其在卷外部宿主机上的映射为/data/volumes
那么同样可以看到inspect信息
[root@localhost ~]# docker inspect b2
[
{
"Id": "1c0d2a24b9b5bd24f2a5c2d9c37bc134ea230fec043ada6855f6a14ff714eb3a",
"Created": "2020-09-12T08:09:35.3947589Z",
"Path": "sh",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 1703,
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-09-12T08:09:35.747661066Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:018c9d7b792b4be80095d957533667279843acf9a46c973067c8d1dff31ea8b4",
"ResolvConfPath": "/var/lib/docker/containers/1c0d2a24b9b5bd24f2a5c2d9c37bc134ea230fec 043ada6855f6a14ff714eb3a/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/1c0d2a24b9b5bd24f2a5c2d9c37bc134ea230fec04 3ada6855f6a14ff714eb3a/hostname",
"HostsPath": "/var/lib/docker/containers/1c0d2a24b9b5bd24f2a5c2d9c37bc134ea230fec043ad a6855f6a14ff714eb3a/hosts",
"LogPath": "",
"Name": "/b2",
"RestartCount": 0,
"Driver": "overlay2",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": [
"/data/volumes/b2:/data"
],
"ContainerIDFile": "",
"LogConfig": {
"Type": "journald",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": true,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "docker-runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": null,
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DiskQuota": 0,
"KernelMemory": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": -1,
"OomKillDisable": false,
"PidsLimit": 0,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0
},
"GraphDriver": {
"Name": "overlay2",
"Data": {
"LowerDir": "/var/lib/docker/overlay2/1eb8b234876cabb12838344872298531c9b0b4ae 109a1fbb3e92d63f06e010ec-init/diff:/var/lib/docker/overlay2/c85fc5ddc2b05c93c6b2682475a635ef62 a7d615bafe9b740e81b969d6e6167d/diff",
"MergedDir": "/var/lib/docker/overlay2/1eb8b234876cabb12838344872298531c9b0b4a e109a1fbb3e92d63f06e010ec/merged",
"UpperDir": "/var/lib/docker/overlay2/1eb8b234876cabb12838344872298531c9b0b4ae 109a1fbb3e92d63f06e010ec/diff",
"WorkDir": "/var/lib/docker/overlay2/1eb8b234876cabb12838344872298531c9b0b4ae1 09a1fbb3e92d63f06e010ec/work"
}
},
"Mounts": [
{
"Type": "bind",
"Source": "/data/volumes/b2",
"Destination": "/data",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
"Config": {
"Hostname": "1c0d2a24b9b5",
"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": [
"sh"
],
"ArgsEscaped": true,
"Image": "busybox",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "1a2cde66de0eeb93ec1acf8bf78939a9a2b2c41c0169dab78e379d97b1f97313",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/1a2cde66de0e",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "33237c705a29afe74a535f88fbec8051f0b957f92e6f2e0102c79e68bf3837da",
"Gateway": "10.0.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "10.0.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:0a:00:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "267c6bb4407c07563f64cf58629f2445f26477ca7e288d0634e2fa252c7c 4299",
"EndpointID": "33237c705a29afe74a535f88fbec8051f0b957f92e6f2e0102c79e68bf3 837da",
"Gateway": "10.0.0.1",
"IPAddress": "10.0.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:0a:00:00:02"
}
}
}
}
]
同样的宿主机上也对应存在了文件夹
[root@localhost ~]# ls /data/volumes/b2/
其它特性和上面docker管理的卷是一样的,这里我们只测试下持久存储
由于这次绑定的卷我们是以—rm运行的,所以我们会发现这次我们exit之后其对应宿主机的文件夹仍然存在
[root@localhost ~]# docker run --name b2 -it --rm -v /data/volumes/b2:/data busybox
/ # exit
[root@localhost ~]# ls /data/volumes/b2/
那么接下来我们重新创建b2容器并建立文件
[root@localhost ~]# docker run --name b2 -it --rm -v /data/volumes/b2:/data busybox
/ # vi /data/index.html
/ # cat /data/index.html
this is 1234
/ #
然后我们退出并删除b2容器
同样的我们在来创建一个容器也是b2仍然指定宿主机上映射的路径为上面我们这个/data/volumes/b2,为了显示容器不同,我们指定的容器内部映射路径为/data/web/html
我们会发现我们这次新建的b2容器竟然共享了上面我们刚刚删除的b2容器的绑定的卷
[root@localhost ~]# docker run --name b2 -it --rm -v /data/volumes/b2:/data/web/html busybox
/ # cat /data/web/html/index.html
this is 1234
/ #
然后再次退出仍然保持了持久存储
[root@localhost ~]# docker run --name b2 -it --rm -v /data/volumes/b2:/data/web/html busybox
/ # cat /data/web/html/index.html
this is 1234
/ # exit
[root@localhost ~]# cat /data/volumes/b2/index.html
this is 1234
go模板
很多 Docker 用户都知道 docker inspect 命令,该命令用于获取容器/镜像的元数据,其中 -f 参数可以用于获取指定的数据。简单地说,-f 的实参是个 Go 模版。因为docker是用go语言开发的。
我们来看看一些实例:
这里我只想查看inspect中Mounts中的信息
[root@localhost ~]# docker inspect -f {{.Mounts}} b2
[{bind /data/volumes/b2 /data/web/html true rprivate}]
这里我只想查看inspect中NetworkSettings中的信息
[root@localhost ~]# docker inspect -f {{.NetworkSettings}} b2
{{ bfddd6a73db5d105c3c60367cb056ddcaa6b85854e084f57d44f16ce2a5bce96 false 0 map[] /var/run/docker/netns/bfddd6a73db5 [] []} {e12610792a4439e6cdc4bf6e34787fd8d67920d9c0ee6b21b8279423e3cfc280 10.0.0.1 0 10.0.0.2 16 02:42:0a:00:00:02} map[bridge:0xc420126300]}
这里我只想查看inspect中NetworkSettings.IPAddress中的信息
[root@localhost ~]# docker inspect -f {{.NetworkSettings.IPAddress}} b2
10.0.0.2
容器间卷的共享
这里建立一个b3容器并指定绑定卷为上面b2的绑定卷并在b3的docker映射卷中即b2中刚才那个index.html中进行追加内容
[root@localhost ~]# docker run --name b3 -it --rm -v /data/volumes/b2:/data busybox
/ # vi /data/index.html
/ # cat /data/index.html
this is 1234
is is b3
/ #
然后我们重新看看b2容器里面index.html内容会发现也自然响应了b3中对其的内容追加
[root@localhost ~]# docker run --name b2 -it --rm -v /data/volumes/b2:/data/web/html busybox
/ # cat /data/web/html/index.html
this is 1234
is is b3
/ #
绑定的卷的拷贝
首先我们建立一个专门用于存储的容器
[root@localhost ~]# docker run --name infracon -it -v /data/infracon/volume/:/data/web/html busybox
/ #
然后我们再建立一个名为nginx的容器并拷贝上面这个infracon容器的绑定的卷以及其网络
[root@localhost ~]# docker run --name nginx --network container:infracon --volumes-from infracon -it busybox
/ #
这里—network可以指定网络来自某个容器,--volumes-from可以指定绑定的卷来自某个容器
然后我们再来查看下刚才这个专门用于存储的容器的网络与卷
[root@localhost ~]# docker inspect infracon
[
{
"Id": "1eee1a72a5da240d565f2571aadfae57a670a25be8a5ad9217fdc0c984ae5c3e",
"Created": "2020-09-12T09:08:16.860988552Z",
"Path": "sh",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 2380,
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-09-12T09:08:17.01661842Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:018c9d7b792b4be80095d957533667279843acf9a46c973067c8d1dff31ea8b4",
"ResolvConfPath": "/var/lib/docker/containers/1eee1a72a5da240d565f2571aadfae57a670a25be8a5ad9217fdc0c984ae5c3e/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/1eee1a72a5da240d565f2571aadfae57a670a25be8a5ad9217fdc0c984ae5c3e/hostname",
"HostsPath": "/var/lib/docker/containers/1eee1a72a5da240d565f2571aadfae57a670a25be8a5ad9217fdc0c984ae5c3e/hosts",
"LogPath": "",
"Name": "/infracon",
"RestartCount": 0,
"Driver": "overlay2",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": [
"/data/infracon/volume/:/data/web/html"
],
"ContainerIDFile": "",
"LogConfig": {
"Type": "journald",
"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": "",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "docker-runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": null,
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DiskQuota": 0,
"KernelMemory": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": -1,
"OomKillDisable": false,
"PidsLimit": 0,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0
},
"GraphDriver": {
"Name": "overlay2",
"Data": {
"LowerDir": "/var/lib/docker/overlay2/d6841bab981c8c2903a6ecd8472e7969b67a89acede880a0dc4104cd2cf878ed-init/diff:/var/lib/docker/overlay2/c85 fc5ddc2b05c93c6b2682475a635ef62a7d615bafe9b740e81b969d6e6167d/diff",
"MergedDir": "/var/lib/docker/overlay2/d6841bab981c8c2903a6ecd8472e7969b67a89acede880a0dc4104cd2cf878ed/merged",
"UpperDir": "/var/lib/docker/overlay2/d6841bab981c8c2903a6ecd8472e7969b67a89acede880a0dc4104cd2cf878ed/diff",
"WorkDir": "/var/lib/docker/overlay2/d6841bab981c8c2903a6ecd8472e7969b67a89acede880a0dc4104cd2cf878ed/work"
}
},
"Mounts": [
{
"Type": "bind",
"Source": "/data/infracon/volume",
"Destination": "/data/web/html",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
"Config": {
"Hostname": "1eee1a72a5da",
"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": [
"sh"
],
"ArgsEscaped": true,
"Image": "busybox",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "6c1bc07cf33be759600cd1ef94908a01715b2f590889e30d2d65685d32c450c3",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/6c1bc07cf33b",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "ddedb8cd33815b2be7b84c76e7c315ca8aab9fdace0fe85b7c735d197876c808",
"Gateway": "10.0.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "10.0.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:0a:00:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "267c6bb4407c07563f64cf58629f2445f26477ca7e288d0634e2fa252c7c4299",
"EndpointID": "ddedb8cd33815b2be7b84c76e7c315ca8aab9fdace0fe85b7c735d197876c808",
"Gateway": "10.0.0.1",
"IPAddress": "10.0.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:0a:00:00:02"
}
}
}
}
]
但是当我们查看第二个也就是基于该存储容器建立的nginx容器的网络会发现竟然不存在于inspect中,但绑定的存储卷是存在的
[root@localhost ~]# docker inspect nginx
[
{
"Id": "54f1552ac4dbe520c575bdea14c6e1237a75c98e6eeb8c04a5d865fe07f53d24",
"Created": "2020-09-12T09:12:03.866425092Z",
"Path": "sh",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 2429,
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-09-12T09:12:06.249024582Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:018c9d7b792b4be80095d957533667279843acf9a46c973067c8d1dff31ea8b4",
"ResolvConfPath": "/var/lib/docker/containers/1eee1a72a5da240d565f2571aadfae57a670a25be8a5ad9217fdc0c984ae5c3e/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/1eee1a72a5da240d565f2571aadfae57a670a25be8a5ad9217fdc0c984ae5c3e/hostname",
"HostsPath": "/var/lib/docker/containers/1eee1a72a5da240d565f2571aadfae57a670a25be8a5ad9217fdc0c984ae5c3e/hosts",
"LogPath": "",
"Name": "/nginx",
"RestartCount": 0,
"Driver": "overlay2",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "journald",
"Config": {}
},
"NetworkMode": "container:infracon",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": [
"infracon"
],
"CapAdd": null,
"CapDrop": null,
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "docker-runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": null,
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DiskQuota": 0,
"KernelMemory": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": -1,
"OomKillDisable": false,
"PidsLimit": 0,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0
},
"GraphDriver": {
"Name": "overlay2",
"Data": {
"LowerDir": "/var/lib/docker/overlay2/9622cbbe00fbff515ce7a75dfe49a63853676f2445461bf1ea45c0e01a83300a-init/diff:/var/lib/docker/overlay2/c85fc5ddc2b05c93c6b2682475a635ef62a7d615bafe9b740e81b969d6e6167d/diff",
"MergedDir": "/var/lib/docker/overlay2/9622cbbe00fbff515ce7a75dfe49a63853676f2445461bf1ea45c0e01a83300a/merged",
"UpperDir": "/var/lib/docker/overlay2/9622cbbe00fbff515ce7a75dfe49a63853676f2445461bf1ea45c0e01a83300a/diff",
"WorkDir": "/var/lib/docker/overlay2/9622cbbe00fbff515ce7a75dfe49a63853676f2445461bf1ea45c0e01a83300a/work"
}
},
"Mounts": [
{
"Source": "/data/infracon/volume",
"Destination": "/data/web/html",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
"Config": {
"Hostname": "1eee1a72a5da",
"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": [
"sh"
],
"ArgsEscaped": true,
"Image": "busybox",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": null,
"SandboxKey": "",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "",
"Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"MacAddress": "",
"Networks": {}
}
}
]
但是关于网络你会发现虽然inspect中没有但是在这个nginx容器内部还是可以获取到信息的
[root@localhost ~]# docker run --name nginx --network container:infracon --volumes-from infracon -it busybox
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:0A:00:00:02
inet addr:10.0.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:aff:fe00:2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:656 (656.0 B) TX bytes:656 (656.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
/ #
可见网络还是共享了的。
向上面这种我们可以在建立容器是指定容器的绑定的卷的来源于某个一个已经存在的容器的绑定的卷时称之为绑定的卷的拷贝,同时这里还有一个细节,就是绑定的卷的拷贝对于这个base容器来说无需其打开,只要该容器存在即可。
关键字词:docker,卷,存储,映射,go,模板
上一篇:05-Docker容器网络
下一篇:07-Dockerfile详解