zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    解决“此计算机上已安装了试用版。必须先卸载以前安装的试用版后才能安装另一个试用版。”
    Windows 7 快捷键
    【译】部署Asp.Net MVC 网站到Winodws Azure
    jqGrid专题:搜索
    jqGrid专题:格式化数据
    jqGrid专题:事件文档
    jqGrid专题:方法文档
    jqGrid专题:数据加载
    jqGrid专题:参数文档
    jqGrid专题:jqGrid原理
  • 原文地址:https://www.cnblogs.com/newAndHui/p/13454465.html
Copyright © 2011-2022 走看看