zoukankan      html  css  js  c++  java
  • docker 存储

    查看系统默认驱动

    Storage Driver: overlay2   默认驱动,这里用的centos7系统
      Backing Filesystem: xfs     底层文件系统
     Docker Root Dir: /var/lib/docker  各层数据存放目录
     
    
    [root@mcw1 ~]$ docker info
    Client:
     Context:    default
     Debug Mode: false
     Plugins:
      app: Docker App (Docker Inc., v0.9.1-beta3)
      buildx: Docker Buildx (Docker Inc., v0.7.1-docker)
      scan: Docker Scan (Docker Inc., v0.12.0)
    
    Server:
     Containers: 19
      Running: 8
      Paused: 0
      Stopped: 11
     Images: 6
     Server Version: 20.10.12
     Storage Driver: overlay2
      Backing Filesystem: xfs
      Supports d_type: true
      Native Overlay Diff: true
      userxattr: false
     Logging Driver: json-file
     Cgroup Driver: cgroupfs
     Cgroup Version: 1
     Plugins:
      Volume: local
      Network: bridge host ipvlan macvlan null overlay
      Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
     Swarm: inactive
     Runtimes: io.containerd.runtime.v1.linux runc io.containerd.runc.v2
     Default Runtime: runc
     Init Binary: docker-init
     containerd version: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
     runc version: v1.0.2-0-g52b36a2
     init version: de40ad0
     Security Options:
      seccomp
       Profile: default
     Kernel Version: 3.10.0-693.el7.x86_64
     Operating System: CentOS Linux 7 (Core)
     OSType: linux
     Architecture: x86_64
     CPUs: 1
     Total Memory: 976.3MiB
     Name: mcw1
     ID: XBZE:DN6Z:UQMS:2FCM:YSA4:XZFO:EPFV:LVET:UP3V:OJFK:WLGF:7Q64
     Docker Root Dir: /var/lib/docker
     Debug Mode: false
     Registry: https://index.docker.io/v1/
     Labels:
     Experimental: false
     Insecure Registries:
      10.0.0.131:5000
      127.0.0.0/8
     Registry Mirrors:
      https://hub-mirror.c.163.com/
     Live Restore Enabled: false
    
    WARNING: API is accessible on http://0.0.0.0:2375 without encryption.
             Access to the remote API is equivalent to root access on the host. Refer
             to the 'Docker daemon attack surface' section in the documentation for
             more informatio: https://docs.docker.com/go/attack-surface/
    
    
    [root@mcw1 ~]$ ls  /var/lib/docker/
    buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes

    bind mount ,指定挂载源

    ,将host目录挂载到容器中使用,容器删除,host目录还存在,数据不被删除,可供下一次使用。还可以设置目录在容器中的读写情况,默认读写,可以设置为ro只读,如果容器中已存在文件的目录被挂载,这些文件会被隐藏起来,使用的是host挂载进来的文件

    [root@mcw1 ~]$ mkdir htdocs  #创建挂载目录并创建文件
    [root@mcw1 ~]$ echo machangwei>./htdocs/index.html
    
    [root@mcw1 ~]$ docker run -d -p 10002:80 --name=mcw2 -v ~/htdocs:/usr/local/apache2/htdocs httpd  #-v挂载目录到容器
    6fc2c03fb2150a37b4d96fcb40f2d2f9d3891dfc42eb1326a2b1ad5ff546a156
    [root@mcw1 ~]$ curl 127.0.0.1:10002
    machangwei
    [root@mcw1 ~]$ docker ps |grep mcw2
    6fc2c03fb215   httpd     "httpd-foreground"   32 seconds ago   Up 31 seconds   0.0.0.0:10002->80/tcp, :::10002->80/tcp   mcw2
    [root@mcw1 ~]$ docker exec -it 6fc /bin/bash
    root@6fc2c03fb215:/usr/local/apache2# ls
    bin  build  cgi-bin  conf  error  htdocs  icons  include  logs    modules
    root@6fc2c03fb215:/usr/local/apache2# cat htdocs/index.html  #查看容器中指定目录下的文件是挂载后的
    machangwei
    root@6fc2c03fb215:/usr/local/apache2# exit
    [root@mcw1 ~]$ docker stop 6fc2 #将容器停止并删除,host中的数据不随之删除
    6fc2
    [root@mcw1 ~]$ docker rm 6fc2
    6fc2
    [root@mcw1 ~]$ cat htdocs/index.html 
    machangwei
    
    只读验证
    [root@mcw1 ~]$ docker run -d -p 10003:80 --name=mcw3 -v ~/htdocs:/usr/local/apache2/htdocs:ro httpd   #添加ro只读,
    e736d8c025152cf06bb1077fdac8e5e5e7a0a0a948fc4bb7523821f1be57dd40
    [root@mcw1 ~]$ docker exec -it e736 /bin/bash
    root@e736d8c02515:/usr/local/apache2# echo mcw >htdocs/index.html  #进入容器,无法修改只读方式挂载进来的数据
    bash: htdocs/index.html: Read-only file system
    root@e736d8c02515:/usr/local/apache2#  
    exit
    [root@mcw1 ~]$ curl 127.0.0.1:10003
    machangwei
    [root@mcw1 ~]$ echo mcw2>>~/htdocs/index.html #在host中修改挂载目录数据。访问容器时,数据也是修改后的host文件中数据
    [root@mcw1 ~]$ curl 127.0.0.1:10003
    machangwei
    mcw2


    [root@mcw1 ~]$ docker run -d -p 10004:80 --name=mcw4 -v ~/htdocs/index.html:/usr/local/apache2/htdocs/index.html httpd #还可以只挂载单个文件,不过容器中必须得有这个文件,不然会作为新目录将容器中的文件都隐藏掉
    8ccd479b3d57eda42004e27c3c504019a99a32c234a30f7237b9ed47000865bf
    [root@mcw1 ~]$ curl 127.0.0.1:10004
    machangwei
    mcw2
    [root@mcw1 ~]$

     

     docker managed volume 不指定挂载源

    [root@mcw1 ~]$ docker run -d -p 10005:80 --name=mcw5 -v /usr/local/apache2/htdocs/ httpd 
    95d57f9771c36cd1c254daae0ce2b0d3b23a0c3e45686fd8a9f01713e98656e3
    [root@mcw1 ~]$ docker inspect 95d5
    [
        {
            "Id": "95d57f9771c36cd1c254daae0ce2b0d3b23a0c3e45686fd8a9f01713e98656e3",
            "Created": "2022-01-01T21:34:15.559176855Z",
            "Path": "httpd-foreground",
            "Args": [],
            "State": {
                "Status": "running",
                "Running": true,
                "Paused": false,
                "Restarting": false,
                "OOMKilled": false,
                "Dead": false,
                "Pid": 4758,
                "ExitCode": 0,
                "Error": "",
                "StartedAt": "2022-01-01T21:34:16.275229672Z",
                "FinishedAt": "0001-01-01T00:00:00Z"
            },
            "Image": "sha256:dabbfbe0c57b6e5cd4bc089818d3f664acfad496dc741c9a501e72d15e803b34",
            "ResolvConfPath": "/var/lib/docker/containers/95d57f9771c36cd1c254daae0ce2b0d3b23a0c3e45686fd8a9f01713e98656e3/resolv.conf",
            "HostnamePath": "/var/lib/docker/containers/95d57f9771c36cd1c254daae0ce2b0d3b23a0c3e45686fd8a9f01713e98656e3/hostname",
            "HostsPath": "/var/lib/docker/containers/95d57f9771c36cd1c254daae0ce2b0d3b23a0c3e45686fd8a9f01713e98656e3/hosts",
            "LogPath": "/var/lib/docker/containers/95d57f9771c36cd1c254daae0ce2b0d3b23a0c3e45686fd8a9f01713e98656e3/95d57f9771c36cd1c254daae0ce2b0d3b23a0c3e45686fd8a9f01713e98656e3-json.log",
            "Name": "/mcw5",
            "RestartCount": 0,
            "Driver": "overlay2",
            "Platform": "linux",
            "MountLabel": "",
            "ProcessLabel": "",
            "AppArmorProfile": "",
            "ExecIDs": null,
            "HostConfig": {
                "Binds": null,
                "ContainerIDFile": "",
                "LogConfig": {
                    "Type": "json-file",
                    "Config": {}
                },
                "NetworkMode": "default",
                "PortBindings": {
                    "80/tcp": [
                        {
                            "HostIp": "",
                            "HostPort": "10005"
                        }
                    ]
                },
                "RestartPolicy": {
                    "Name": "no",
                    "MaximumRetryCount": 0
                },
                "AutoRemove": false,
                "VolumeDriver": "",
                "VolumesFrom": null,
                "CapAdd": null,
                "CapDrop": null,
                "CgroupnsMode": "host",
                "Dns": [],
                "DnsOptions": [],
                "DnsSearch": [],
                "ExtraHosts": null,
                "GroupAdd": null,
                "IpcMode": "private",
                "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,
                "DeviceRequests": null,
                "KernelMemory": 0,
                "KernelMemoryTCP": 0,
                "MemoryReservation": 0,
                "MemorySwap": 0,
                "MemorySwappiness": null,
                "OomKillDisable": false,
                "PidsLimit": null,
                "Ulimits": null,
                "CpuCount": 0,
                "CpuPercent": 0,
                "IOMaximumIOps": 0,
                "IOMaximumBandwidth": 0,
                "MaskedPaths": [
                    "/proc/asound",
                    "/proc/acpi",
                    "/proc/kcore",
                    "/proc/keys",
                    "/proc/latency_stats",
                    "/proc/timer_list",
                    "/proc/timer_stats",
                    "/proc/sched_debug",
                    "/proc/scsi",
                    "/sys/firmware"
                ],
                "ReadonlyPaths": [
                    "/proc/bus",
                    "/proc/fs",
                    "/proc/irq",
                    "/proc/sys",
                    "/proc/sysrq-trigger"
                ]
            },
            "GraphDriver": {
                "Data": {
                    "LowerDir": "/var/lib/docker/overlay2/8e90d3967e3c8ef0a3aa4267c0a2ffc5e0dec17be90e94716b9b5576de8ca762-init/diff:/var/lib/docker/overlay2/3f76496187fef1b5cd536812868752884233fed42fdfd1f606b748fa88001a17/diff:/var/lib/docker/overlay2/961e08da79100b71d0315b987cc723499c9dd022b43a700ef523b4f8e4f59783/diff:/var/lib/docker/overlay2/3daf3db1b8305a52235ed15e0166111ead8d04cef4125dd4cdb112a9361deb2f/diff:/var/lib/docker/overlay2/8b7ec8b3305c70a95021097e8b78d963745e5013159d7d6f50b53d77b4a13b8a/diff:/var/lib/docker/overlay2/fa380ffe836ecbf76429cde75e5ee384fe90f67ac3e4eea9ddb7aaaee7a814c6/diff",
                    "MergedDir": "/var/lib/docker/overlay2/8e90d3967e3c8ef0a3aa4267c0a2ffc5e0dec17be90e94716b9b5576de8ca762/merged",
                    "UpperDir": "/var/lib/docker/overlay2/8e90d3967e3c8ef0a3aa4267c0a2ffc5e0dec17be90e94716b9b5576de8ca762/diff",
                    "WorkDir": "/var/lib/docker/overlay2/8e90d3967e3c8ef0a3aa4267c0a2ffc5e0dec17be90e94716b9b5576de8ca762/work"
                },
                "Name": "overlay2"
            },
            "Mounts": [
                {
                    "Type": "volume",
                    "Name": "480c09c2beab5a9aebc191f2183692f94a82baa037924152e9edb6588371d26c",
                    "Source": "/var/lib/docker/volumes/480c09c2beab5a9aebc191f2183692f94a82baa037924152e9edb6588371d26c/_data",
                    "Destination": "/usr/local/apache2/htdocs",
                    "Driver": "local",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                }
            ],
            "Config": {
                "Hostname": "95d57f9771c3",
                "Domainname": "",
                "User": "",
                "AttachStdin": false,
                "AttachStdout": false,
                "AttachStderr": false,
                "ExposedPorts": {
                    "80/tcp": {}
                },
                "Tty": false,
                "OpenStdin": false,
                "StdinOnce": false,
                "Env": [
                    "PATH=/usr/local/apache2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                    "HTTPD_PREFIX=/usr/local/apache2",
                    "HTTPD_VERSION=2.4.52",
                    "HTTPD_SHA256=0127f7dc497e9983e9c51474bed75e45607f2f870a7675a86dc90af6d572f5c9",
                    "HTTPD_PATCHES="
                ],
                "Cmd": [
                    "httpd-foreground"
                ],
                "Image": "httpd",
                "Volumes": {
                    "/usr/local/apache2/htdocs/": {}
                },
                "WorkingDir": "/usr/local/apache2",
                "Entrypoint": null,
                "OnBuild": null,
                "Labels": {},
                "StopSignal": "SIGWINCH"
            },
            "NetworkSettings": {
                "Bridge": "",
                "SandboxID": "3eadf66aea44697c210ffd6423b3e712c4a7476db82107604496567b90ea9d92",
                "HairpinMode": false,
                "LinkLocalIPv6Address": "",
                "LinkLocalIPv6PrefixLen": 0,
                "Ports": {
                    "80/tcp": [
                        {
                            "HostIp": "0.0.0.0",
                            "HostPort": "10005"
                        },
                        {
                            "HostIp": "::",
                            "HostPort": "10005"
                        }
                    ]
                },
                "SandboxKey": "/var/run/docker/netns/3eadf66aea44",
                "SecondaryIPAddresses": null,
                "SecondaryIPv6Addresses": null,
                "EndpointID": "2ad8de46a50658e84f8b6aafb6dd278c49d5e7886faddda0a643fdf3c410f7ae",
                "Gateway": "172.17.0.1",
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "IPAddress": "172.17.0.8",
                "IPPrefixLen": 16,
                "IPv6Gateway": "",
                "MacAddress": "02:42:ac:11:00:08",
                "Networks": {
                    "bridge": {
                        "IPAMConfig": null,
                        "Links": null,
                        "Aliases": null,
                        "NetworkID": "0480c7596189fe6eb000b2b54f808dce3e121179ddea20c6e1900fac8db6757f",
                        "EndpointID": "2ad8de46a50658e84f8b6aafb6dd278c49d5e7886faddda0a643fdf3c410f7ae",
                        "Gateway": "172.17.0.1",
                        "IPAddress": "172.17.0.8",
                        "IPPrefixLen": 16,
                        "IPv6Gateway": "",
                        "GlobalIPv6Address": "",
                        "GlobalIPv6PrefixLen": 0,
                        "MacAddress": "02:42:ac:11:00:08",
                        "DriverOpts": null
                    }
                }
            }
        }
    ]
    [root@mcw1 ~]$ 
    [root@mcw1 ~]$ docker run -d -p 10005:80 --name=mcw5 -v /usr/local/apache2/htdocs/ httpd 
    95d57f9771c36cd1c254daae0ce2b0d3b23a0c3e45686fd8a9f01713e98656e3
    [root@mcw1 ~]$ docker inspect 95d5
    [
    {
     .........       },
            "Mounts": [
                {
                    "Type": "volume",
                    "Name": "480c09c2beab5a9aebc191f2183692f94a82baa037924152e9edb6588371d26c",
                    "Source": "/var/lib/docker/volumes/480c09c2beab5a9aebc191f2183692f94a82baa037924152e9edb6588371d26c/_data",
                    "Destination": "/usr/local/apache2/htdocs",
                    "Driver": "local",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                }
            ],
            "Config": {
    .........
        }
    ]
    [root@mcw1 ~]$ 
    [root@mcw1 ~]$ ls /var/lib/docker/volumes/480c09c2beab5a9aebc191f2183692f94a82baa037924152e9edb6588371d26c/_data/
    index.html
    #在这个volumes下随机生成目录,目录名是Name,源是目录下的_data数据目录,如果容器中Destination存在数据,那么就会复制过来,然后挂载到容器中
    [root@mcw1 ~]$ curl 127.0.0.1:10005
    <html><body><h1>It works!</h1></body></html>
    [root@mcw1 ~]$ echo machangwei >/var/lib/docker/volumes/480c09c2beab5a9aebc191f2183692f94a82baa037924152e9edb6588371d26c/_data/index.html 
    [root@mcw1 ~]$ curl 127.0.0.1:10005 #直接修改目录文件,就能修改访问到容器的数据
    machangwei
    [root@mcw1 ~]$ 
    
    [root@mcw1 ~]$ docker volume ls #出来inspect查看volume,还可以用下面命令
    DRIVER    VOLUME NAME
    local     480c09c2beab5a9aebc191f2183692f94a82baa037924152e9edb6588371d26c
    
    [root@mcw1 ~]$ docker volume inspect 480c09c2beab5a9aebc191f218 #必须得用全的,不能用短id
    []
    Error: No such volume: 480c09c2beab5a9aebc191f218
    [root@mcw1 ~]$ docker volume ls
    DRIVER    VOLUME NAME
    local     480c09c2beab5a9aebc191f2183692f94a82baa037924152e9edb6588371d26c
    [root@mcw1 ~]$ docker volume inspect 480c09c2beab5a9aebc191f2183692f94a82baa037924152e9edb6588371d26c
    [
        {
            "CreatedAt": "2022-01-02T05:34:15+08:00",
            "Driver": "local",
            "Labels": null,
            "Mountpoint": "/var/lib/docker/volumes/480c09c2beab5a9aebc191f2183692f94a82baa037924152e9edb6588371d26c/_data",
            "Name": "480c09c2beab5a9aebc191f2183692f94a82baa037924152e9edb6588371d26c",
            "Options": null,
            "Scope": "local"
        }
    ]

    容器的数据共享

    数据共享主要有三种,可以将单个host挂载源,bind mount到多个容器;可以用managed volume,将文件从host直接cp到不指定挂载源的容器中;还可以使用volume container

    容器与host共享数据,用bind ,或者managed volume方式


    如下,可以用managed volume,将文件从host直接cp到不指定挂载源的容器目录中。

    [root@mcw1 ~]$ docker run -d -p 10006:80 --name=mcw6 -v /usr/local/apache2/htdocs/ httpd 
    8a2facb7dd5c9d67ae5de20a5be00f05647c9734e4b6ee37516dd4f67a3e5c48
    [root@mcw1 ~]$ echo "mcw host data">~/htdocs/index.html
    [root@mcw1 ~]$ curl 127.0.0.1:10006
    <html><body><h1>It works!</h1></body></html>
    [root@mcw1 ~]$ docker cp ~/htdocs/index.html 8a2f:/usr/local/apache2/htdocs/
    [root@mcw1 ~]$ curl 127.0.0.1:10006
    mcw host data

    容器之间共享数据,用bind挂载到多个容器

    [root@mcw1 ~]$  docker run -d -p 10007:80 --name=mcw7 -v ~/htdocs/:/usr/local/apache2/htdocs/ httpd 
    ce8a2f86f553da7c3030996a53f3af628c90c39fd41d3b2b856ad83c96413624
    [root@mcw1 ~]$  docker run -d -p 10008:80 --name=mcw8 -v ~/htdocs/:/usr/local/apache2/htdocs/ httpd 
    2b38c3fbb35b029495807a0417a618f0e11c92062aba112cc8d7c776fbaf7999
    [root@mcw1 ~]$  docker run -d -p 10009:80 --name=mcw9 -v ~/htdocs/:/usr/local/apache2/htdocs/ httpd 
    bf07fd7de9830ba1ad0a217a04b3c643af9bc24bcaf2df5d5a8389d6defd7f02
    [root@mcw1 ~]$ curl 127.0.0.1:10007
    mcw host data
    [root@mcw1 ~]$ curl 127.0.0.1:10008
    mcw host data
    [root@mcw1 ~]$ curl 127.0.0.1:10009
    mcw host data

    volume container

    [root@mcw1 ~]$ docker create --name vc_data \
    >                     -v ~/htdocs:/usr/local/apache2/htdocs \
    >                     -v /other/useful/tools \
    >                     busybox
    6feed5d45bf49c846f608544270fa9f4670f41fadae656e5b356bf37d0ef3f7b
    [root@mcw1 ~]$ docker inspect vc_data 
    [
        {
            "Id": "6feed5d45bf49c846f608544270fa9f4670f41fadae656e5b356bf37d0ef3f7b",
            "Created": "2022-01-01T22:11:33.3294462Z",
            "Path": "sh",
            "Args": [],
            "State": {
                "Status": "created",
                "Running": false,
                "Paused": false,
                "Restarting": false,
                "OOMKilled": false,
                "Dead": false,
                "Pid": 0,
                "ExitCode": 0,
                "Error": "",
                "StartedAt": "0001-01-01T00:00:00Z",
                "FinishedAt": "0001-01-01T00:00:00Z"
            },
            "Image": "sha256:ffe9d497c32414b1c5cdad8178a85602ee72453082da2463f1dede592ac7d5af",
            "ResolvConfPath": "",
            "HostnamePath": "",
            "HostsPath": "",
            "LogPath": "",
            "Name": "/vc_data",
            "RestartCount": 0,
            "Driver": "overlay2",
            "Platform": "linux",
            "MountLabel": "",
            "ProcessLabel": "",
            "AppArmorProfile": "",
            "ExecIDs": null,
            "HostConfig": {
                "Binds": [
                    "/root/htdocs:/usr/local/apache2/htdocs"
                ],
                "ContainerIDFile": "",
                "LogConfig": {
                    "Type": "json-file",
                    "Config": {}
                },
                "NetworkMode": "default",
                "PortBindings": {},
                "RestartPolicy": {
                    "Name": "no",
                    "MaximumRetryCount": 0
                },
                "AutoRemove": false,
                "VolumeDriver": "",
                "VolumesFrom": null,
                "CapAdd": null,
                "CapDrop": null,
                "CgroupnsMode": "host",
                "Dns": [],
                "DnsOptions": [],
                "DnsSearch": [],
                "ExtraHosts": null,
                "GroupAdd": null,
                "IpcMode": "private",
                "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,
                "DeviceRequests": null,
                "KernelMemory": 0,
                "KernelMemoryTCP": 0,
                "MemoryReservation": 0,
                "MemorySwap": 0,
                "MemorySwappiness": null,
                "OomKillDisable": false,
                "PidsLimit": null,
                "Ulimits": null,
                "CpuCount": 0,
                "CpuPercent": 0,
                "IOMaximumIOps": 0,
                "IOMaximumBandwidth": 0,
                "MaskedPaths": [
                    "/proc/asound",
                    "/proc/acpi",
                    "/proc/kcore",
                    "/proc/keys",
                    "/proc/latency_stats",
                    "/proc/timer_list",
                    "/proc/timer_stats",
                    "/proc/sched_debug",
                    "/proc/scsi",
                    "/sys/firmware"
                ],
                "ReadonlyPaths": [
                    "/proc/bus",
                    "/proc/fs",
                    "/proc/irq",
                    "/proc/sys",
                    "/proc/sysrq-trigger"
                ]
            },
            "GraphDriver": {
                "Data": {
                    "LowerDir": "/var/lib/docker/overlay2/d81b36941eb3370ae6c4aab6e732d496a71b48b39e52d4b3b611b4015bef9130-init/diff:/var/lib/docker/overlay2/117fe33877fe8caa7455904e6ecf1c1eb2e4020f8d54a4c5d27e9cff014aa465/diff",
                    "MergedDir": "/var/lib/docker/overlay2/d81b36941eb3370ae6c4aab6e732d496a71b48b39e52d4b3b611b4015bef9130/merged",
                    "UpperDir": "/var/lib/docker/overlay2/d81b36941eb3370ae6c4aab6e732d496a71b48b39e52d4b3b611b4015bef9130/diff",
                    "WorkDir": "/var/lib/docker/overlay2/d81b36941eb3370ae6c4aab6e732d496a71b48b39e52d4b3b611b4015bef9130/work"
                },
                "Name": "overlay2"
            },
            "Mounts": [
                {
                    "Type": "volume",
                    "Name": "c07497348a37550e0f07c3944e05a3a9915fc7ae13163679c676ab9cb0c00908",
                    "Source": "/var/lib/docker/volumes/c07497348a37550e0f07c3944e05a3a9915fc7ae13163679c676ab9cb0c00908/_data",
                    "Destination": "/other/useful/tools",
                    "Driver": "local",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                },
                {
                    "Type": "bind",
                    "Source": "/root/htdocs",
                    "Destination": "/usr/local/apache2/htdocs",
                    "Mode": "",
                    "RW": true,
                    "Propagation": "rprivate"
                }
            ],
            "Config": {
                "Hostname": "6feed5d45bf4",
                "Domainname": "",
                "User": "",
                "AttachStdin": false,
                "AttachStdout": true,
                "AttachStderr": true,
                "Tty": false,
                "OpenStdin": false,
                "StdinOnce": false,
                "Env": [
                    "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
                ],
                "Cmd": [
                    "sh"
                ],
                "Image": "busybox",
                "Volumes": {
                    "/other/useful/tools": {}
                },
                "WorkingDir": "",
                "Entrypoint": null,
                "OnBuild": null,
                "Labels": {}
            },
            "NetworkSettings": {
                "Bridge": "",
                "SandboxID": "",
                "HairpinMode": false,
                "LinkLocalIPv6Address": "",
                "LinkLocalIPv6PrefixLen": 0,
                "Ports": {},
                "SandboxKey": "",
                "SecondaryIPAddresses": null,
                "SecondaryIPv6Addresses": null,
                "EndpointID": "",
                "Gateway": "",
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "IPAddress": "",
                "IPPrefixLen": 0,
                "IPv6Gateway": "",
                "MacAddress": "",
                "Networks": {
                    "bridge": {
                        "IPAMConfig": null,
                        "Links": null,
                        "Aliases": null,
                        "NetworkID": "",
                        "EndpointID": "",
                        "Gateway": "",
                        "IPAddress": "",
                        "IPPrefixLen": 0,
                        "IPv6Gateway": "",
                        "GlobalIPv6Address": "",
                        "GlobalIPv6PrefixLen": 0,
                        "MacAddress": "",
                        "DriverOpts": null
                    }
                }
            }
        }
    ]
    [root@mcw1 ~]$ 
    
    挂载里面有两个挂载
            "Mounts": [
                {
                    "Type": "volume",
                    "Name": "c07497348a37550e0f07c3944e05a3a9915fc7ae13163679c676ab9cb0c00908",
                    "Source": "/var/lib/docker/volumes/c07497348a37550e0f07c3944e05a3a9915fc7ae13163679c676ab9cb0c00908/_data",
                    "Destination": "/other/useful/tools",
                    "Driver": "local",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                },
                {
                    "Type": "bind",
                    "Source": "/root/htdocs",
                    "Destination": "/usr/local/apache2/htdocs",
                    "Mode": "",
                    "RW": true,
                    "Propagation": "rprivate"
                }
            ],
    创建三个容器,指定逻辑卷的容器。这样容器中有哪些挂载的文件,多个其它容器使用它后也有这些挂载
    [root@mcw1 ~]$  docker run -d -p 10010:80 --name=mcw10 --volumes-from vc_data httpd 
    11f761db182bf0f7691f3b3c54e93d67addb2cf30d09ce801e1def8f8b6c4988
    [root@mcw1 ~]$  docker run -d -p 10011:80 --name=mcw11 --volumes-from vc_data httpd 
    a29fea380748de524248a4e1f735701fd60080b873749ed97c03dd8fda610d9d
    [root@mcw1 ~]$  docker run -d -p 10012:80 --name=mcw12 --volumes-from vc_data httpd 
    7f4272c2b40b382476460c3c336f25857d7c421fdeb36dd5f383d071270e7b1b
    [root@mcw1 ~]$ curl 127.0.0.1:10010
    mcw host data
    [root@mcw1 ~]$ curl 127.0.0.1:10011
    mcw host data
    [root@mcw1 ~]$ curl 127.0.0.1:10012
    mcw host data
    [root@mcw1 ~]$ cat htdocs/index.html 
    mcw host data
    [root@mcw1 ~]$ 

     data-packed volume container

    FROM busybox:latest  #使用这个镜像
    ADD htdocs /usr/local/apache2/htdocs #将本地目录htdocs添加为容器这个目录
    VOLUME /usr/local/apache2/htdocs #等同于-v,不指定挂载源,让docker自己创建挂载源
    
    
    [root@mcw1 ~]$ cd mcwdocker/
    [root@mcw1 ~/mcwdocker]$ cp -a ../htdocs/ .
    [root@mcw1 ~/mcwdocker]$ vim Dockerfile 
    [root@mcw1 ~/mcwdocker]$ cat 
    Dockerfile  htdocs/     
    [root@mcw1 ~/mcwdocker]$ cat Dockerfile  
    FROM busybox:latest  #使用这个镜像
    ADD htdocs /usr/local/apache2/htdocs #将本地目录htdocs添加为容器这个目录
    VOLUME /usr/local/apache2/htdocs #等同于-v,不指定挂载源,让docker自己创建挂载源
    [root@mcw1 ~/mcwdocker]$ docker build -t datapacked .  #Dockerfile可以用注释。但是注释不能是放在命令后面
    Sending build context to Docker daemon  3.584kB
    Error response from daemon: dockerfile parse error line 1: FROM requires either one or three arguments
    [root@mcw1 ~/mcwdocker]$ vim Dockerfile 
    [root@mcw1 ~/mcwdocker]$ cat Dockerfile 
    FROM busybox:latest
    ADD htdocs /usr/local/apache2/htdocs
    VOLUME /usr/local/apache2/htdocs
    [root@mcw1 ~/mcwdocker]$ docker build -t datapacked .
    Sending build context to Docker daemon  3.584kB
    Step 1/3 : FROM busybox:latest
     ---> ffe9d497c324
    Step 2/3 : ADD htdocs /usr/local/apache2/htdocs
     ---> e2b5e7a21788
    Step 3/3 : VOLUME /usr/local/apache2/htdocs
     ---> Running in 7103ed392b15
    Removing intermediate container 7103ed392b15
     ---> ee835e293230
    Successfully built ee835e293230
    Successfully tagged datapacked:latest
    
    创建容器并不运行容器
    [root@mcw1 ~/mcwdocker]$ docker create --name vc_mcwdata datapacked  #以包含需要挂载数据的镜像创建容器vc_mcwdata,并不需要运行
    7a50c2670a7d55b019812907c196b0f302a9446f9653cb1965108ed010438c32
    [root@mcw1 ~/mcwdocker]$ docker run -d -p 10013:80 --name mcw13 --volumes-from vc_mcwdata httpd 
    7c30a69d0e337caf3114b06ed9e2a0f3dce7a26e5c7801d5422832519a2306d3 #运行容器,让容器的挂载源
    #来自于vc_mcwdata容器,其它容器共享这个容器数据。,提高可移植性
    [root@mcw1 ~/mcwdocker]$ curl 127.0.0.1:10013
    mcw host data
    [root@mcw1 ~/mcwdocker]$ docker ps |grep vc_mcwdata
    [root@mcw1 ~/mcwdocker]$ docker ps -a|grep vc_mcwdata
    7a50c2670a7d   datapacked   "sh"                     3 minutes ago        Created                                                                 vc_mcwdata

     Data Volume  的生命周期管理

    1、备份


    将本地镜像存到镜像仓库中,本地镜像都保存在host的/registry目录中,定期备份目录。下面这个本地仓库,好像存在点问题,有时间再研究

    [root@mcw1 ~/mcwdocker]$ docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:2
    98a061dffafcbab97c74375d6e0d59c2d2569494c0a03377c1bea86a4bd4a36f
    [root@mcw1 ~/mcwdocker]$ ls /myregistry/
    [root@mcw1 ~/mcwdocker]$ docker push datapacked
    Using default tag: latest
    ^C
    [root@mcw1 ~/mcwdocker]$ 
    [root@mcw1 ~/mcwdocker]$ docker push 10.0.0.131:5000/datapacked
    Using default tag: latest
    The push refers to repository [10.0.0.131:5000/datapacked]
    An image does not exist locally with the tag: 10.0.0.131:5000/datapacked
    [root@mcw1 ~/mcwdocker]$ docker images datapacked
    REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
    datapacked   latest    ee835e293230   33 minutes ago   1.24MB
    [root@mcw1 ~/mcwdocker]$ docker push 10.0.0.131:5000/datapacked:latest
    The push refers to repository [10.0.0.131:5000/datapacked]
    An image does not exist locally with the tag: 10.0.0.131:5000/datapacked
    [root@mcw1 ~/mcwdocker]$ ls /mcwregistry/
    docker
    [root@mcw1 ~/mcwdocker]$ ls /mcwregistry/docker/
    registry
    [root@mcw1 ~/mcwdocker]$ ls /mcwregistry/docker/registry/
    v2
    [root@mcw1 ~/mcwdocker]$ ls /mcwregistry/docker/registry/v2/
    blobs  repositories
    [root@mcw1 ~/mcwdocker]$ ls /mcwregistry/docker/registry/v2/repositories/
    machangwei
    [root@mcw1 ~/mcwdocker]$ ls /mcwregistry/docker/registry/v2/repositories/machangwei/
    mcw-httpd01
    [root@mcw1 ~/mcwdocker]$ ls /mcwregistry/docker/registry/v2/repositories/machangwei/mcw-httpd01/
    _layers  _manifests  _uploads
    [root@mcw1 ~/mcwdocker]$ ls /mcwregistry/docker/registry/v2/blobs/
    sha256
    [root@mcw1 ~/mcwdocker]$ 

    2、恢复


    数据损坏,直接用之前备份的数据复制到/mytegistry


    3、迁移


    更新Registry,涉及数据迁移。
    (1)docker stop 当前Registry容器
    (2)启动新版本容器并mount原有volume
    docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:latest

    4、销毁

    正在使用的一般是无法删除的
    [root@mcw1 ~/mcwdocker]$ docker volume ls
    DRIVER    VOLUME NAME
    local     7c550c0a1efdc7ab9d5cc4d3c6b9760fab2f8fde9081d7ae177456872afa4c32
    local     186f29d1968cd35f00310a5dcda1c5351c0c893d99661fdfcfe4739c68a65867
    local     480c09c2beab5a9aebc191f2183692f94a82baa037924152e9edb6588371d26c
    local     c07497348a37550e0f07c3944e05a3a9915fc7ae13163679c676ab9cb0c00908
    [root@mcw1 ~/mcwdocker]$ docker volume 
    create   inspect  ls       prune    rm       
    [root@mcw1 ~/mcwdocker]$ docker volume rm 7c550c0a1efdc7ab9d5cc4d3c6b9760fab2f8fde9081d7ae177456872afa4c32
    Error response from daemon: remove 7c550c0a1efdc7ab9d5cc4d3c6b9760fab2f8fde9081d7ae177456872afa4c32: volume is in use - [8a2facb7dd5c9d67ae5de20a5be00f05647c9734e4b6ee37516dd4f67a3e5c48] 
    [root@mcw1 ~/mcwdocker]$ docker  ps -a|grep 8a2facb  #因为volume有在使用的,所以无法删除
    8a2facb7dd5c   httpd        "httpd-foreground"       2 hours ago         Up 2 hours                  0.0.0.0:10006->80/tcp, :::10006->80/tcp     mcw6
    
    
    批量删除孤儿volume,慎用,删了就回不来了
    docker volume rm $(docker volume ls -q)
    [root@mcw1 ~/mcwdocker]$ docker  volume ls
    DRIVER    VOLUME NAME
    local     7c550c0a1efdc7ab9d5cc4d3c6b9760fab2f8fde9081d7ae177456872afa4c32
    local     186f29d1968cd35f00310a5dcda1c5351c0c893d99661fdfcfe4739c68a65867
    local     480c09c2beab5a9aebc191f2183692f94a82baa037924152e9edb6588371d26c
    local     c07497348a37550e0f07c3944e05a3a9915fc7ae13163679c676ab9cb0c00908
    [root@mcw1 ~/mcwdocker]$ docker volume rm $(docker volume ls -q)
    7c550c0a1efdc7ab9d5cc4d3c6b9760fab2f8fde9081d7ae177456872afa4c32
    186f29d1968cd35f00310a5dcda1c5351c0c893d99661fdfcfe4739c68a65867
    480c09c2beab5a9aebc191f2183692f94a82baa037924152e9edb6588371d26c
    c07497348a37550e0f07c3944e05a3a9915fc7ae13163679c676ab9cb0c00908
    [root@mcw1 ~/mcwdocker]$ docker volume ls
    DRIVER    VOLUME NAME
    
    volume从创建到删除
    [root@mcw1 ~/mcwdocker]$ docker volume ls #没有
    DRIVER    VOLUME NAME
    [root@mcw1 ~/mcwdocker]$ docker run --name mcw1 -v /test/data busybox #-v未指定host挂载源,创建volume
    [root@mcw1 ~/mcwdocker]$ docker volume ls #
    DRIVER    VOLUME NAME
    local     556abb1e167191ed9aea60a37fbc2a7fc7e93a84b620e63cb13f75d371de24cf
    [root@mcw1 ~/mcwdocker]$ docker volume inspect 556abb1e167191ed9aea60a37fbc2a7fc7e93a84b620e63cb13f75d371de24cf
    [
        {
            "CreatedAt": "2022-01-02T08:24:36+08:00",
            "Driver": "local",
            "Labels": null,
            "Mountpoint": "/var/lib/docker/volumes/556abb1e167191ed9aea60a37fbc2a7fc7e93a84b620e63cb13f75d371de24cf/_data",
            "Name": "556abb1e167191ed9aea60a37fbc2a7fc7e93a84b620e63cb13f75d371de24cf",
            "Options": null,
            "Scope": "local"
        }
    ]
    [root@mcw1 ~/mcwdocker]$ docker ps
    CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
    [root@mcw1 ~/mcwdocker]$ 
    [root@mcw1 ~/mcwdocker]$ 
    [root@mcw1 ~/mcwdocker]$ docker volume rm 556abb1e167191ed9aea60a37fbc2a7fc7e93a84b620e63cb13f75d371de24cf
    Error response from daemon: remove 556abb1e167191ed9aea60a37fbc2a7fc7e93a84b620e63cb13f75d371de24cf: volume is in use - [005f476f8dd474acd88f07852a026fe54106a8bcc10e8c333431459d5024f6b0]
    [root@mcw1 ~/mcwdocker]$ docker rm mcw1   #删除容器未使用-v,是会遗留下来volume,如果确认需要删除,对于
    mcw1
    [root@mcw1 ~/mcwdocker]$ docker volume ls  #这种孤儿volume,可以docker volume rm删除
    DRIVER    VOLUME NAME
    local     556abb1e167191ed9aea60a37fbc2a7fc7e93a84b620e63cb13f75d371de24cf
    [root@mcw1 ~/mcwdocker]$ docker volume inspect 556abb1e167191ed9aea60a37fbc2a7fc7e93a84b620e63cb13f75d371de24cf
    [
        {
            "CreatedAt": "2022-01-02T08:24:36+08:00",
            "Driver": "local",
            "Labels": null,
            "Mountpoint": "/var/lib/docker/volumes/556abb1e167191ed9aea60a37fbc2a7fc7e93a84b620e63cb13f75d371de24cf/_data",
            "Name": "556abb1e167191ed9aea60a37fbc2a7fc7e93a84b620e63cb13f75d371de24cf",
            "Options": null,
            "Scope": "local"
        }
    ]
    [root@mcw1 ~/mcwdocker]$ docker volume  rm 556abb1e167191ed9aea60a37fbc2a7fc7e93a84b620e63cb13f75d371de24cf
    556abb1e167191ed9aea60a37fbc2a7fc7e93a84b620e63cb13f75d371de24cf
    [root@mcw1 ~/mcwdocker]$ docker volume ls
    DRIVER    VOLUME NAME
    [root@mcw1 ~/mcwdocker]$ 
    
    
    指定-v删除volume,这个慎用,可能其它有在用的,回头验证是否就无法删除
    [root@mcw1 ~/mcwdocker]$ docker volume  ls
    DRIVER    VOLUME NAME
    [root@mcw1 ~/mcwdocker]$ docker run -d --name mcw2  -v /test/data httpd
    fa0ce00a840f10dc5712ce13448ac418b90f9a92b761a1231c2a9cc1efbc748d
    [root@mcw1 ~/mcwdocker]$ docker volume  ls
    DRIVER    VOLUME NAME
    local     6b1d081d0fcf0bcd0b205ca3473ea37f80c65408b49d6129116c2eebb6b7d429
    [root@mcw1 ~/mcwdocker]$ docker stop fa0
    fa0
    [root@mcw1 ~/mcwdocker]$ docker rm fa0 -v
    fa0
    [root@mcw1 ~/mcwdocker]$ docker volume  ls
    DRIVER    VOLUME NAME
    [root@mcw1 ~/mcwdocker]$ 
  • 相关阅读:
    运算符优先级(图表)
    VNC+SSH相关应用
    VNC常用操作及常见问题解决办法汇总
    操作系统(二): 进程与线程
    Java实现 蓝桥杯 算法提高 01背包
    Java实现 蓝桥杯 算法提高 01背包
    Java实现 蓝桥杯 算法提高 01背包
    Java实现 蓝桥杯 算法提高 判断名次
    Java实现 蓝桥杯 算法提高 判断名次
    Java实现 蓝桥杯 算法提高 日期计算
  • 原文地址:https://www.cnblogs.com/machangwei-8/p/15756155.html
Copyright © 2011-2022 走看看