docker容器数据卷

1.背景

通俗的理解就是容器运行中产生的数据会随着容器关闭而消失,所以我们希望使用卷(磁盘)来保存,大家可以理解为业务数据,与镜像无关;

特点:

1.卷中的更改可以直接生效

2.数据卷中的更改不会包含在镜像的更新中

3.数据卷可在容器之间共享或重用数据

4.数据卷的生命周期一直持续到没有容器使用它为止

本质:主机与容器数据共享

2.简单使用

执行命令:

docker run -it -v /h-dada01:/c-dada01 centos /bin/bash

/h-dada01 表示主机中的磁盘位置

/c-dada01 表示容器中的磁盘位置

这个两个文件加的内容会实时共享同步,

即:在容器中的c-dada01 增加或修改文件,在主机中的h-dada01也会跟着变,反过来也一样,

大家可以自己再文件中操作观察结果

容器中:

主机中:

注意:

学到这里,可能有的童鞋会问,

如果把容器关了,然后直接在主机里面修改文件,即修改h-data01里面的内容,

那么当容器再次启动后,c-dada01里面的数据会同步更新么?

答案是会改变的,因为是实时同步的,大家可以自己测试。

3.查看挂载情况

docker inspect 容器id

 

 内容太多,不能完整的截图,直接把内容拷贝出来如下:

  1 [root@localhost h-dada01]# docker inspect 5803a2ce204e
  2 [
  3 {
  4     "Id": "5803a2ce204eb107a7c47a2ef1c554d04ce70effeac1cd3dc9de4c46f94f48e2",
  5     "Created": "2020-08-07T13:13:01.776487Z",
  6     "Path": "/bin/bash",
  7     "Args": [],
  8     "State": {
  9         "Running": true,
 10         "Paused": false,
 11         "Restarting": false,
 12         "OOMKilled": false,
 13         "Dead": false,
 14         "Pid": 11709,
 15         "ExitCode": 0,
 16         "Error": "",
 17         "StartedAt": "2020-08-07T13:13:02.4827852Z",
 18         "FinishedAt": "0001-01-01T00:00:00Z"
 19     },
 20     "Image": "86ac386aa02e523765549ff1f78f226464865c941a0dec5ccd33149024d23ad5",
 21     "NetworkSettings": {
 22         "Bridge": "",
 23         "EndpointID": "bf4f04bdc2881896c9329644ded148e243f2288f08279f7d65d6b86286e6c50d",
 24         "Gateway": "172.17.42.1",
 25         "GlobalIPv6Address": "",
 26         "GlobalIPv6PrefixLen": 0,
 27         "HairpinMode": false,
 28         "IPAddress": "172.17.0.9",
 29         "IPPrefixLen": 16,
 30         "IPv6Gateway": "",
 31         "LinkLocalIPv6Address": "",
 32         "LinkLocalIPv6PrefixLen": 0,
 33         "MacAddress": "02:42:ac:11:00:09",
 34         "NetworkID": "d548d190550d9f5933f92e5843f0f27f69ae038b4313503ad73422cf089357be",
 35         "PortMapping": null,
 36         "Ports": {},
 37         "SandboxKey": "/var/run/docker/netns/5803a2ce204e",
 38         "SecondaryIPAddresses": null,
 39         "SecondaryIPv6Addresses": null
 40     },
 41     "ResolvConfPath": "/var/lib/docker/containers/5803a2ce204eb107a7c47a2ef1c554d04ce70effeac1cd3dc9de4c46f94f48e2/resolv.conf",
 42     "HostnamePath": "/var/lib/docker/containers/5803a2ce204eb107a7c47a2ef1c554d04ce70effeac1cd3dc9de4c46f94f48e2/hostname",
 43     "HostsPath": "/var/lib/docker/containers/5803a2ce204eb107a7c47a2ef1c554d04ce70effeac1cd3dc9de4c46f94f48e2/hosts",
 44     "LogPath": "/var/lib/docker/containers/5803a2ce204eb107a7c47a2ef1c554d04ce70effeac1cd3dc9de4c46f94f48e2/5803a2ce204eb107a7c47a2ef1c554d04ce70effeac1cd3dc9de4c46f94f48e2-json.log",
 45     "Name": "/gloomy_darwin",
 46     "RestartCount": 0,
 47     "Driver": "devicemapper",
 48     "ExecDriver": "native-0.2",
 49     "MountLabel": "",
 50     "ProcessLabel": "",
 51     "Volumes": {
 52         "/c-dada01": "/h-dada01"
 53     },
 54     "VolumesRW": {
 55         "/c-dada01": true
 56     },
 57     "AppArmorProfile": "",
 58     "ExecIDs": null,
 59     "HostConfig": {
 60         "Binds": [
 61             "/h-dada01:/c-dada01"
 62         ],
 63         "ContainerIDFile": "",
 64         "LxcConf": [],
 65         "Memory": 0,
 66         "MemorySwap": 0,
 67         "CpuShares": 0,
 68         "CpuPeriod": 0,
 69         "CpusetCpus": "",
 70         "CpusetMems": "",
 71         "CpuQuota": 0,
 72         "BlkioWeight": 0,
 73         "OomKillDisable": false,
 74         "Privileged": false,
 75         "PortBindings": {},
 76         "Links": null,
 77         "PublishAllPorts": false,
 78         "Dns": null,
 79         "DnsSearch": null,
 80         "ExtraHosts": null,
 81         "VolumesFrom": null,
 82         "Devices": [],
 83         "NetworkMode": "bridge",
 84         "IpcMode": "",
 85         "PidMode": "",
 86         "UTSMode": "",
 87         "CapAdd": null,
 88         "CapDrop": null,
 89         "RestartPolicy": {
 90             "Name": "no",
 91             "MaximumRetryCount": 0
 92         },
 93         "SecurityOpt": null,
 94         "ReadonlyRootfs": false,
 95         "Ulimits": null,
 96         "LogConfig": {
 97             "Type": "json-file",
 98             "Config": {}
 99         },
100         "CgroupParent": ""
101     },
102     "Config": {
103         "Hostname": "5803a2ce204e",
104         "Domainname": "",
105         "User": "",
106         "AttachStdin": true,
107         "AttachStdout": true,
108         "AttachStderr": true,
109         "PortSpecs": null,
110         "ExposedPorts": null,
111         "Tty": true,
112         "OpenStdin": true,
113         "StdinOnce": true,
114         "Env": [
115             "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
116         ],
117         "Cmd": [
118             "/bin/bash"
119         ],
120         "Image": "centos",
121         "Volumes": null,
122         "VolumeDriver": "",
123         "WorkingDir": "",
124         "Entrypoint": null,
125         "NetworkDisabled": false,
126         "MacAddress": "",
127         "OnBuild": null,
128         "Labels": {
129             "org.label-schema.build-date": "20200611",
130             "org.label-schema.license": "GPLv2",
131             "org.label-schema.name": "CentOS Base Image",
132             "org.label-schema.schema-version": "1.0",
133             "org.label-schema.vendor": "CentOS"
134         }
135     }
136 }
137 ]
138 [root@localhost h-dada01]#
View Code

 

重点是可以看这句:

 

4.挂载磁盘权限控制

 主机可读可写,容器只可以读

执行命令:docker run -it -v /h-dada02-rw:/c-dada02-ro:ro centos /bin/bash

/h-dada02-rw ,主机共享文件夹名称,只是为了便于理解加了一个-rw,原则上可以任意取名称

/c-dada02-ro ,容器中共享文件夹名称,只是为了便于理解加了一个-ro,原则上可以任意取名称

ro ,执行命令的参数表示可读,ro(read only)

 

 

 大家可以自己测试:

在主机文件夹h-dada02-rw,添加或修改文件,正常操作;

在容器文件夹c-dada02-ro,添加或修改文件,不能正常操作;

查看挂载情况

docker inspect a21b03b3b8f5

 

系统化学习docker教程:

https://www.cnblogs.com/newAndHui/p/13508771.html

posted @ 2020-08-23 16:40  李东平|一线码农  阅读(182)  评论(0编辑  收藏  举报