zoukankan      html  css  js  c++  java
  • Docker的数据管理实战篇

                 Docker的数据管理实战篇

                                          作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

    一.Docker数据管理概述

    1>.写时复制机制(如下图所示)

      Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层。
      如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本依然存在,只是已经被读写层中该文件的副本所隐藏,此即
    "读写复制(COW)"机制。

    2>.什么是存储卷(volume)

      关闭并重启容器,其数据不受影响;但删除Docker容器,则其更改将会全部丢失。原因就是我们上面提到的写时复制机制,这个写时复制机制存在于容器,数据默认都保存在容器内。
    
      Docker设计存在的问题:
        1>.存储于联合文件系统中,不易于宿主机访问;
        2>.容器间数据共享不便;
        3>.删除容器其数据会丢失;
    
      解决方案:"存储卷(volume)"
        如下图所示:""是容器上的一个或多个"目录",此类目录可绕过联合文件系统,于宿主机上的某个目录"绑定(关联)"

    3>.存储卷(volume)的作用

      (1)数据卷为持久或共享数据提供了几个有用的特性:
        1>.Volume于容器(container)初始化之时即会创建,由base image提供的卷中的数据于此期间完成复制;
        2>.数据卷可以在容器之间共享和重用;
        3>.更新镜像(image)时不会包括对数据卷的更改;
        4>.即使容器(container)自身被删除,数据卷仍保持不变。
    
      (2)Volume的初衷是独立于容器的生命周期实现数据持久化:
        1>.默认情况下删除容器之时既不会删除卷,也不会对哪怕未被引用的卷做垃圾回收操作;
        2>.如果我们删除容器时使用了特殊的选项(类似于linux的"userdel -r"选项)也可以一并删除容器的存储卷,但是生成环境我们不会这样做。
    
      (3)卷为docker提供了独立于容器的数据管理机制(如下图所示):
        1>.可以把"镜像"想像成静态文件,例如"程序",把卷类比为动态内容,例如"数据";于是,镜像可以重用,而卷可以共享;
        2>.卷实现了"程序(镜像)""数据(卷)"分离,以及"程序(镜像)""制作镜像的主机"分离,用户制作镜像时无须再考虑镜像运行的容器所在的主机的环境;

    4>.docker存储卷类型(Volume types)

      如下图所示,Docker有两种类型的卷,每种类型都在容器中存在一个挂载点,但其在宿主机上的位置有所不同:
        (1)绑定挂载卷(Bind mount volume)
          也称为数据卷(类似于挂载的一块磁盘),指向主机文件系统上用户指定位置的卷。换句话说,在宿主机上的路径你需要人工指定一个特定路径,再容器上的路径也需要指定一个特定路径,让这两个已知路径建立关联关系。随着容器删除,存储卷数据并不会丢失。
    
        (2)docker管理的卷(Docker managed volume)
          也称为数据容器(将数据保存在一个容器上),Docker守护进程在Docker拥有的主机文件系统的一部分中创建管理卷。换句话说,我们只需要在容器内指定挂载点是什么,而绑定的是宿主机哪个路径下的目录我们不需要管,由容器引擎的docker daemon自行创建一个空目录或者使用一个已存在目录与你的存储卷路径建立关联关系。随着容器删除,存储卷数据也随着丢失了。

     

    二.验证容器默认存储数据路径

    1>.创建容器(根据你自己已有的镜像随机启动一个容器,目的是为了验证默认存储数据路径)

    [root@docker101.yinzhengjie.org.cn ~]# docker image ls
    REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
    centos-haproxy           v1.8.20             1858fe05d96f        5 days ago          606MB
    registry                 latest              708bc6af7e5e        5 days ago          25.8MB
    tomcat-app01             v0.1                bf45c22f2d5b        6 days ago          983MB
    tomcat-base              8.5.50              9ff79f369094        7 days ago          968MB
    jdk-base                 1.8.0_231           0f63a97ddc85        7 days ago          953MB
    centos-base              7.6.1810            b4931fd9ace2        7 days ago          551MB
    centos                   centos7.6.1810      f1cb7c7d58b7        10 months ago       202MB
    lorel/docker-stress-ng   latest              1ae56ccafe55        3 years ago         8.1MB
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# ss -ntl
    State      Recv-Q Send-Q                                                                                          Local Address:Port                                                                                                         Peer Address:Port              
    LISTEN     0      128                                                                                                         *:22                                                                                                                      *:*                  
    LISTEN     0      128                                                                                                        :::22                                                                                                                     :::*                  
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container run -it --rm --name myTomcat -d -p 80:8080 tomcat-app01:v0.1 
    7990b03a5b1bc860d7618a1329c562778136fb598f377f995ae7e686d93c225b
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
    7990b03a5b1b        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   5 seconds ago       Up 4 seconds        8443/tcp, 0.0.0.0:80->8080/tcp   myTomcat
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# ss -ntl
    State      Recv-Q Send-Q                                                                                          Local Address:Port                                                                                                         Peer Address:Port              
    LISTEN     0      128                                                                                                         *:22                                                                                                                      *:*                  
    LISTEN     0      20480                                                                                                      :::80                                                                                                                     :::*                  
    LISTEN     0      128                                                                                                        :::22                                                                                                                     :::*                  
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# 

    2>.查看指定容器PID的容器信息存储数据路径

    [root@docker101.yinzhengjie.org.cn ~]# docker container ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
    7990b03a5b1b        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   6 minutes ago       Up 6 minutes        8443/tcp, 0.0.0.0:80->8080/tcp   myTomcat
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container inspect 7990b03a5b1b
    [
        {
            "Id": "7990b03a5b1bc860d7618a1329c562778136fb598f377f995ae7e686d93c225b",
            "Created": "2020-01-29T16:10:43.131975737Z",
            "Path": "/yinzhengjie/softwares/web/tomcat/bin/run_tomcat.sh",
            "Args": [],
            "State": {
                "Status": "running",
                "Running": true,
                "Paused": false,
                "Restarting": false,
                "OOMKilled": false,
                "Dead": false,
                "Pid": 80905,
                "ExitCode": 0,
                "Error": "",
                "StartedAt": "2020-01-29T16:10:43.725782856Z",
                "FinishedAt": "0001-01-01T00:00:00Z"
            },
            "Image": "sha256:bf45c22f2d5b24610586fb9c356ff6e22727ef20cf156e6b5601c36492c5607e",
            "ResolvConfPath": "/var/lib/docker/containers/7990b03a5b1bc860d7618a1329c562778136fb598f377f995ae7e686d93c225b/resolv.conf",
            "HostnamePath": "/var/lib/docker/containers/7990b03a5b1bc860d7618a1329c562778136fb598f377f995ae7e686d93c225b/hostname",
            "HostsPath": "/var/lib/docker/containers/7990b03a5b1bc860d7618a1329c562778136fb598f377f995ae7e686d93c225b/hosts",
            "LogPath": "/var/lib/docker/containers/7990b03a5b1bc860d7618a1329c562778136fb598f377f995ae7e686d93c225b/7990b03a5b1bc860d7618a1329c562778136fb598f377f995ae7e686d93c225b-json.log",
            "Name": "/myTomcat",
            "RestartCount": 0,
            "Driver": "overlay2",
            "Platform": "linux",
            "MountLabel": "",
            "ProcessLabel": "",
            "AppArmorProfile": "",
            "ExecIDs": null,
            "HostConfig": {
                "Binds": null,
                "ContainerIDFile": "",
                "LogConfig": {
                    "Type": "json-file",
                    "Config": {}
                },
                "NetworkMode": "default",
                "PortBindings": {
                    "8080/tcp": [
                        {
                            "HostIp": "",
                            "HostPort": "80"
                        }
                    ]
                },
                "RestartPolicy": {
                    "Name": "no",
                    "MaximumRetryCount": 0
                },
                "AutoRemove": true,
                "VolumeDriver": "",
                "VolumesFrom": null,
                "CapAdd": null,
                "CapDrop": null,
                "Capabilities": null,
                "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/e3564b6f6404fb0324d2830073c5286ad599fba0e34696144dc09e3cd7a8b845-init/diff:/var/lib/docker/overlay2/a04386e5282345b00c207b10afc3829b7efc1af0b0076e9b253154a996ac7154/diff:/var/lib/docker/overlay2/2364ce9759bebece9f6fa
    48d8aaba766d600872a0b9590fb1ae5be573490efc7/diff:/var/lib/docker/overlay2/857599a00102223417b4c940a91c7d4d8d35a7acf4af92a01201a13c866a2957/diff:/var/lib/docker/overlay2/6b65fa21437fd9a2fa86455fda04c1bcec3671c336cc5acb47155a11d6244f18/diff:/var/lib/docker/overlay2/a2ab3cf4279e834fd3516707ad13994f5326f69ba382279c09fd22723617aa7d/diff:/var/lib/docker/overlay2/f68bd4ba604b3ac5ff3373178c374ff26c12acb7323953abf81b084dcad8cc48/diff:/var/lib/docker/overlay2/ec7dd4d489c66c261a2425e5dcd83a159d78c26e93e30d759ceaf895b4e9ffbd/diff:/var/lib/docker/overlay2/89b8bb19fd0d117c313180d49fdad20bff2efcf0c321cff1e95b17419a48a2d8/diff:/var/lib/docker/overlay2/67ff81b026e9127f46d299ed2ceccf7c34e066a7011eb5eee9c8f3a8b3a60d8f/diff:/var/lib/docker/overlay2/d175a2b15bf3678600e131c0aa991e78b45ce0007d59b000495f21f8703958d4/diff:/var/lib/docker/overlay2/dcc00f7ec83c156eff08f4335b344a2ee90d63896ba67749d1cfe957449080b7/diff",                "MergedDir": "/var/lib/docker/overlay2/e3564b6f6404fb0324d2830073c5286ad599fba0e34696144dc09e3cd7a8b845/merged",
                    "UpperDir": "/var/lib/docker/overlay2/e3564b6f6404fb0324d2830073c5286ad599fba0e34696144dc09e3cd7a8b845/diff",
                    "WorkDir": "/var/lib/docker/overlay2/e3564b6f6404fb0324d2830073c5286ad599fba0e34696144dc09e3cd7a8b845/work"
                },
                "Name": "overlay2"
            },
            "Mounts": [],
            "Config": {
                "Hostname": "7990b03a5b1b",
                "Domainname": "",
                "User": "",
                "AttachStdin": false,
                "AttachStdout": false,
                "AttachStderr": false,
                "ExposedPorts": {
                    "8080/tcp": {},
                    "8443/tcp": {}
                },
                "Tty": true,
                "OpenStdin": true,
                "StdinOnce": false,
                "Env": [
                    "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/jdk/bin",
                    "JAVA_HOME=/usr/local/jdk",
                    "JRE_HOME=/usr/local/jdk/jre",
                    "CLASSPATH=/usr/local/jdk/lib/:/usr/local/jdk/jre/lib:/usr/local/jdk/lib/tools.jar"
                ],
                "Cmd": [
                    "/yinzhengjie/softwares/web/tomcat/bin/run_tomcat.sh"
                ],
                "Image": "tomcat-app01:v0.1",
                "Volumes": null,
                "WorkingDir": "",
                "Entrypoint": null,
                "OnBuild": null,
                "Labels": {
                    "org.label-schema.build-date": "20181204",
                    "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": "9e72b96eb266011cda49687e96c92a5f044f13baeeba4aa00f2ba8217bebb76b",
                "HairpinMode": false,
                "LinkLocalIPv6Address": "",
                "LinkLocalIPv6PrefixLen": 0,
                "Ports": {
                    "8080/tcp": [
                        {
                            "HostIp": "0.0.0.0",
                            "HostPort": "80"
                        }
                    ],
                    "8443/tcp": null
                },
                "SandboxKey": "/var/run/docker/netns/9e72b96eb266",
                "SecondaryIPAddresses": null,
                "SecondaryIPv6Addresses": null,
                "EndpointID": "399da9f4b4c41721a62d1931fbe670de62bfa0f054a594b67a98b1059b78334b",
                "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": "6bfa389a9d1eb61996f432111d1b5d3fcdad140f2453d1dc70b705551236e80f",
                        "EndpointID": "399da9f4b4c41721a62d1931fbe670de62bfa0f054a594b67a98b1059b78334b",
                        "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
                    }
                }
            }
        }
    ]
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container inspect 7990b03a5b1b
    [root@docker101.yinzhengjie.org.cn ~]# docker container ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
    7990b03a5b1b        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   11 minutes ago      Up 11 minutes       8443/tcp, 0.0.0.0:80->8080/tcp   myTomcat
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container inspect  -f "{{.GraphDriver.Data.UpperDir}}"  7990b03a5b1b 
    /var/lib/docker/overlay2/e3564b6f6404fb0324d2830073c5286ad599fba0e34696144dc09e3cd7a8b845/diff
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# ll /var/lib/docker/overlay2/e3564b6f6404fb0324d2830073c5286ad599fba0e34696144dc09e3cd7a8b845/diff
    total 0
    drwxrwxrwt 3 root root 31 Jan 30 00:10 tmp
    drwxr-xr-x 3 root root 17 Dec  4  2018 var
    drwxr-xr-x 3 root root 23 Jan 22 12:49 yinzhengjie
    [root@docker101.yinzhengjie.org.cn ~]# 

    3>.在容器内部写入测试数据,观察宿主机目录是否有新文件生成(你也可以使用md5sum命令去检测容器内部文件和宿主机存储的同名文件的校验值是否一致)

    [root@docker101.yinzhengjie.org.cn ~]# docker container ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
    7990b03a5b1b        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   11 minutes ago      Up 11 minutes       8443/tcp, 0.0.0.0:80->8080/tcp   myTomcat
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container inspect  -f "{{.GraphDriver.Data.UpperDir}}"  7990b03a5b1b 
    /var/lib/docker/overlay2/e3564b6f6404fb0324d2830073c5286ad599fba0e34696144dc09e3cd7a8b845/diff
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# ll /var/lib/docker/overlay2/e3564b6f6404fb0324d2830073c5286ad599fba0e34696144dc09e3cd7a8b845/diff
    total 0
    drwxrwxrwt 3 root root 31 Jan 30 00:10 tmp
    drwxr-xr-x 3 root root 17 Dec  4  2018 var
    drwxr-xr-x 3 root root 23 Jan 22 12:49 yinzhengjie
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container exec -it 7990b03a5b1b bash
    [root@7990b03a5b1b /]# 
    [root@7990b03a5b1b /]# dd if=/dev/zero of=test.txt bs=1M count=1024
    1024+0 records in
    1024+0 records out
    1073741824 bytes (1.1 GB) copied, 2.21405 s, 485 MB/s
    [root@7990b03a5b1b /]# 
    [root@7990b03a5b1b /]# ll
    total 1048588
    -rw-r--r--   1 root root      12053 Dec  4  2018 anaconda-post.log
    lrwxrwxrwx   1 root root          7 Dec  4  2018 bin -> usr/bin
    drwxr-xr-x   5 root root        360 Jan 30 00:10 dev
    drwxr-xr-x   1 root root         66 Jan 30 00:10 etc
    drwxr-xr-x   1 root root         33 Jan 22 08:29 home
    lrwxrwxrwx   1 root root          7 Dec  4  2018 lib -> usr/lib
    lrwxrwxrwx   1 root root          9 Dec  4  2018 lib64 -> usr/lib64
    drwxr-xr-x   2 root root          6 Apr 11  2018 media
    drwxr-xr-x   2 root root          6 Apr 11  2018 mnt
    drwxr-xr-x   2 root root          6 Apr 11  2018 opt
    dr-xr-xr-x 177 root root          0 Jan 30 00:10 proc
    dr-xr-x---   1 root root         18 Jan 22 08:27 root
    drwxr-xr-x   1 root root          6 Jan 22 08:29 run
    lrwxrwxrwx   1 root root          8 Dec  4  2018 sbin -> usr/sbin
    drwxr-xr-x   2 root root          6 Apr 11  2018 srv
    dr-xr-xr-x  13 root root          0 Jan 30 00:10 sys
    -rw-r--r--   1 root root 1073741824 Jan 30 00:26 test.txt
    drwxrwxrwt   1 root root         31 Jan 30 00:10 tmp
    drwxr-xr-x   1 root root         19 Dec  4  2018 usr
    drwxr-xr-x   1 root root         17 Dec  4  2018 var
    drwxr-xr-x   1 root root         23 Jan 22 12:49 yinzhengjie
    [root@7990b03a5b1b /]#  
    [root@7990b03a5b1b /]# exit 
    exit
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# ll -h /var/lib/docker/overlay2/e3564b6f6404fb0324d2830073c5286ad599fba0e34696144dc09e3cd7a8b845/diff
    total 1.0G
    dr-xr-x--- 2 root root   27 Jan 30 00:27 root
    -rw-r--r-- 1 root root 1.0G Jan 30 00:26 test.txt
    drwxrwxrwt 3 root root   31 Jan 30 00:10 tmp
    drwxr-xr-x 3 root root   17 Dec  4  2018 var
    drwxr-xr-x 3 root root   23 Jan 22 12:49 yinzhengjie
    [root@docker101.yinzhengjie.org.cn ~]# 

    4>.删除容器后,默认情况下,该容器生成的数据也会随之删除

    5>.如何在删除容器的情况下不删除数据呢?

      目前有两种解决方案,就是我们上面所提到的数据卷(Bind mount volume)和数据卷容器(Docker managed volume)技术解决。

    三.容器使用数据卷案例

    1>.自定义tomcat镜像

      博主推荐阅读:
        https://www.cnblogs.com/yinzhengjie/p/12230043.html

    2>.创建测试网页代码数据

    [root@docker101.yinzhengjie.org.cn ~]# mkdir -pv /yinzhengjie/data/tomcat/app01
    mkdir: created directory ‘/yinzhengjie/data/tomcat’
    mkdir: created directory ‘/yinzhengjie/data/tomcat/app01’
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# echo "<h1>YinZhengjie's Tomcat Server 2020,Come to China, come to Wuhan. </h1>" > /yinzhengjie/data/tomcat/app01/index.html
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# cat /yinzhengjie/data/tomcat/app01/index.html
    <h1>YinZhengjie's Tomcat Server 2020,Come to China, come to Wuhan. </h1>
    [root@docker101.yinzhengjie.org.cn ~]# 

    3>.查看镜像默认的数据

    [root@docker101.yinzhengjie.org.cn ~]# docker image ls 
    REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
    centos-haproxy           v1.8.20             1858fe05d96f        5 days ago          606MB
    registry                 latest              708bc6af7e5e        5 days ago          25.8MB
    tomcat-app01             v0.1                bf45c22f2d5b        6 days ago          983MB
    tomcat-base              8.5.50              9ff79f369094        7 days ago          968MB
    jdk-base                 1.8.0_231           0f63a97ddc85        7 days ago          953MB
    centos-base              7.6.1810            b4931fd9ace2        7 days ago          551MB
    centos                   centos7.6.1810      f1cb7c7d58b7        10 months ago       202MB
    lorel/docker-stress-ng   latest              1ae56ccafe55        3 years ago         8.1MB
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]#  docker container run -it --rm --name myTomcat  -p 80:8080 tomcat-app01:v0.1 bash
    [root@e98341416050 /]# 
    [root@e98341416050 /]# ll /yinzhengjie/data/tomcat/webapps/app01/
    total 8
    -rw-r--r-- 1 tomcat tomcat 32 Jan 23 16:59 index.html
    -rw-r--r-- 1 tomcat tomcat 37 Jan 23 16:59 index2020.html
    [root@e98341416050 /]# 
    [root@e98341416050 /]# cat /yinzhengjie/data/tomcat/webapps/app01/index.html 
    YinZhengjie's Tomcat Web Server
    [root@e98341416050 /]# 
    [root@e98341416050 /]# cat /yinzhengjie/data/tomcat/webapps/app01/index2020.html 
    YinZhengjie's Tomcat Web Server 2020
    [root@e98341416050 /]# 
    [root@e98341416050 /]# exit 
    exit
    [root@docker101.yinzhengjie.org.cn ~]# 

    4>.使用宿主机的路径替换镜像文件的路径

    [root@docker101.yinzhengjie.org.cn ~]#  docker container run -it --rm --name myTomcat  -p 80:8080 tomcat-app01:v0.1 bash
    [root@e98341416050 /]# 
    [root@e98341416050 /]# ll /yinzhengjie/data/tomcat/webapps/app01/
    total 8
    -rw-r--r-- 1 tomcat tomcat 32 Jan 23 16:59 index.html
    -rw-r--r-- 1 tomcat tomcat 37 Jan 23 16:59 index2020.html
    [root@e98341416050 /]# 
    [root@e98341416050 /]# cat /yinzhengjie/data/tomcat/webapps/app01/index.html 
    YinZhengjie's Tomcat Web Server
    [root@e98341416050 /]# 
    [root@e98341416050 /]# cat /yinzhengjie/data/tomcat/webapps/app01/index2020.html 
    YinZhengjie's Tomcat Web Server 2020
    [root@e98341416050 /]# 
    [root@e98341416050 /]# exit 
    exit
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container run -it --rm --name myTomcat -v /yinzhengjie/data/tomcat/app01:/yinzhengjie/data/tomcat/webapps/app01 -p 80:8080 -d tomcat-app01:v0.1 
    632e9bdd3d133b0f162a45b1c7c74e52e2e5d8ce2584621c013d6f59a9be8690
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
    632e9bdd3d13        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   8 seconds ago       Up 7 seconds        8443/tcp, 0.0.0.0:80->8080/tcp   myTomcat
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container exec -it 632e9bdd3d13 bash
    [root@632e9bdd3d13 /]# 
    [root@632e9bdd3d13 /]# netstat -untalp
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
    tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      -                   
    tcp        0      0 127.0.0.1:8005          0.0.0.0:*               LISTEN      -                   
    tcp        0      0 0.0.0.0:8009            0.0.0.0:*               LISTEN      -                   
    [root@632e9bdd3d13 /]# 
    [root@632e9bdd3d13 /]# ll /yinzhengjie/data/tomcat/webapps/app01/
    total 4
    -rw-r--r-- 1 root root 73 Jan 30 00:54 index.html
    [root@632e9bdd3d13 /]# 
    [root@632e9bdd3d13 /]# cat /yinzhengjie/data/tomcat/webapps/app01/index.html 
    <h1>YinZhengjie's Tomcat Server 2020,Come to China, come to Wuhan. </h1>
    [root@632e9bdd3d13 /]# 
    [root@632e9bdd3d13 /]# exit 
    exit
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# ll /yinzhengjie/data/tomcat/app01/
    total 4
    -rw-r--r-- 1 root root 73 Jan 30 00:54 index.html
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# cat /yinzhengjie/data/tomcat/app01/index.html 
    <h1>YinZhengjie's Tomcat Server 2020,Come to China, come to Wuhan. </h1>
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# 

    5>.浏览器访问宿主机的80端口

    [root@docker101.yinzhengjie.org.cn ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
    632e9bdd3d13        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   7 minutes ago       Up 7 minutes        8443/tcp, 0.0.0.0:80->8080/tcp   myTomcat
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# ss -ntl
    State      Recv-Q Send-Q                                                                                          Local Address:Port                                                                                                         Peer Address:Port              
    LISTEN     0      128                                                                                                         *:22                                                                                                                      *:*                  
    LISTEN     0      20480                                                                                                      :::80                                                                                                                     :::*                  
    LISTEN     0      128                                                                                                        :::22                                                                                                                     :::*                  
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# ll /yinzhengjie/data/tomcat/app01/
    total 4
    -rw-r--r-- 1 root root 73 Jan 30 00:54 index.html
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# cat /yinzhengjie/data/tomcat/app01/index.html 
    <h1>YinZhengjie's Tomcat Server 2020,Come to China, come to Wuhan. </h1>
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# curl http://docker101.yinzhengjie.org.cn/app01/index.html
    <h1>YinZhengjie's Tomcat Server 2020,Come to China, come to Wuhan. </h1>
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# curl -I  http://docker101.yinzhengjie.org.cn/app01/index.html
    HTTP/1.1 200 
    Accept-Ranges: bytes
    ETag: W/"73-1580316881000"
    Last-Modified: Wed, 29 Jan 2020 16:54:41 GMT
    Content-Type: text/html
    Content-Length: 73
    Date: Wed, 29 Jan 2020 17:15:31 GMT
    
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# 

    6>.验证容器对挂载宿主机目录的权限(默认是读写权限)

    [root@docker101.yinzhengjie.org.cn ~]# ll /yinzhengjie/data/tomcat/app01/
    total 4
    -rw-r--r-- 1 root root 73 Jan 30 00:54 index.html
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
    632e9bdd3d13        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   22 minutes ago      Up 22 minutes       8443/tcp, 0.0.0.0:80->8080/tcp   myTomcat
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container exec -it 632e9bdd3d13 bash
    [root@632e9bdd3d13 /]# 
    [root@632e9bdd3d13 /]# ll /yinzhengjie/data/tomcat/webapps/app01/
    total 4
    -rw-r--r-- 1 root root 73 Jan 30 00:54 index.html
    [root@632e9bdd3d13 /]# 
    [root@632e9bdd3d13 /]# echo `date +%F` > /yinzhengjie/data/tomcat/webapps/app01/data.html
    [root@632e9bdd3d13 /]# 
    [root@632e9bdd3d13 /]# mkdir /yinzhengjie/data/tomcat/webapps/app01/testDir
    [root@632e9bdd3d13 /]# 
    [root@632e9bdd3d13 /]# 
    [root@632e9bdd3d13 /]# ll /yinzhengjie/data/tomcat/webapps/app01/
    total 8
    -rw-r--r-- 1 root root 11 Jan 30 01:29 data.html
    -rw-r--r-- 1 root root 73 Jan 30 00:54 index.html
    drwxr-xr-x 2 root root  6 Jan 30 01:29 testDir
    [root@632e9bdd3d13 /]# 
    [root@632e9bdd3d13 /]# cat /yinzhengjie/data/tomcat/webapps/app01/data.html 
    2020-01-30
    [root@632e9bdd3d13 /]# 
    [root@632e9bdd3d13 /]# exit 
    exit
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# ll /yinzhengjie/data/tomcat/app01/
    total 8
    -rw-r--r-- 1 root root 11 Jan 30 01:29 data.html
    -rw-r--r-- 1 root root 73 Jan 30 00:54 index.html
    drwxr-xr-x 2 root root  6 Jan 30 01:29 testDir
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# cat /yinzhengjie/data/tomcat/app01/data.html 
    2020-01-30
    [root@docker101.yinzhengjie.org.cn ~]# 

    7>.删除容器后,挂载到容器的数据卷并不会随之删除哟~

    [root@docker101.yinzhengjie.org.cn ~]# ll /yinzhengjie/data/tomcat/app01/
    total 8
    -rw-r--r-- 1 root root 11 Jan 30 01:29 data.html
    -rw-r--r-- 1 root root 73 Jan 30 00:54 index.html
    drwxr-xr-x 2 root root  6 Jan 30 01:29 testDir
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
    632e9bdd3d13        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   27 minutes ago      Up 27 minutes       8443/tcp, 0.0.0.0:80->8080/tcp   myTomcat
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container rm -f 632e9bdd3d13
    632e9bdd3d13
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# ll /yinzhengjie/data/tomcat/app01/
    total 8
    -rw-r--r-- 1 root root 11 Jan 30 01:29 data.html
    -rw-r--r-- 1 root root 73 Jan 30 00:54 index.html
    drwxr-xr-x 2 root root  6 Jan 30 01:29 testDir
    [root@docker101.yinzhengjie.org.cn ~]# 

    8>.挂载数据卷时指定权限为只读

    [root@docker101.yinzhengjie.org.cn ~]# ll /yinzhengjie/data/tomcat/app01/index.html 
    -rw-r--r-- 1 root root 73 Jan 30 00:54 /yinzhengjie/data/tomcat/app01/index.html
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# cat /yinzhengjie/data/tomcat/app01/index.html 
    <h1>YinZhengjie's Tomcat Server 2020,Come to China, come to Wuhan. </h1>
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container run -it --rm --name myTomcat -v /yinzhengjie/data/tomcat/app01:/yinzhengjie/data/tomcat/webapps/app01:ro -p 80:8080 -d tomcat-app01:v0.1 
    79ae89f051b298903197dcdf8913c9e02845cc6633f6ed0bda024cc2d51980e4
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
    79ae89f051b2        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   6 seconds ago       Up 5 seconds        8443/tcp, 0.0.0.0:80->8080/tcp   myTomcat
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container exec -it 79ae89f051b2 bash
    [root@79ae89f051b2 /]# 
    [root@79ae89f051b2 /]# cd /yinzhengjie/data/tomcat/webapps/app01/
    [root@79ae89f051b2 app01]# 
    [root@79ae89f051b2 app01]# ll
    total 4
    -rw-r--r-- 1 root root 73 Jan 30 00:54 index.html
    [root@79ae89f051b2 app01]# 
    [root@79ae89f051b2 app01]# echo `date +%F` > test.html
    bash: test.html: Read-only file system
    [root@79ae89f051b2 app01]# 
    [root@79ae89f051b2 app01]# netstat -untalp
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
    tcp        0      0 127.0.0.1:8005          0.0.0.0:*               LISTEN      -                   
    tcp        0      0 0.0.0.0:8009            0.0.0.0:*               LISTEN      -                   
    tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      -                   
    [root@79ae89f051b2 app01]# 
    [root@79ae89f051b2 app01]# exit 
    exit
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# ss -ntl
    State      Recv-Q Send-Q                                                                                          Local Address:Port                                                                                                         Peer Address:Port              
    LISTEN     0      128                                                                                                         *:22                                                                                                                      *:*                  
    LISTEN     0      20480                                                                                                      :::80                                                                                                                     :::*                  
    LISTEN     0      128                                                                                                        :::22                                                                                                                     :::*                  
    [root@docker101.yinzhengjie.org.cn ~]# 

    9>.一个容器挂载多个数据卷案例

    [root@docker101.yinzhengjie.org.cn ~]# ll /yinzhengjie/data/tomcat/app01/
    total 4
    -rw-r--r-- 1 root root 73 Jan 30 00:54 index.html
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# md5sum /etc/hosts
    9ee1454b4aa700591887afea9f3ddd13  /etc/hosts
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container run -it --rm --name myTomcat -v /yinzhengjie/data/tomcat/app01:/yinzhengjie/data/tomcat/webapps/app01:rw -v /etc/hosts:/etc/hosts:ro -p 80:8080 -d tomcat-app01:v0.1 
    39020b57791e2996bd35df1f4827256899d52fafd1879f06a8bc80f0fdb6eac5
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
    39020b57791e        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   9 seconds ago       Up 8 seconds        8443/tcp, 0.0.0.0:80->8080/tcp   myTomcat
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container exec -it 39020b57791e bash
    [root@39020b57791e /]# 
    [root@39020b57791e /]# md5sum /etc/hosts
    9ee1454b4aa700591887afea9f3ddd13  /etc/hosts
    [root@39020b57791e /]# 
    [root@39020b57791e /]# echo "172.200.6.105 kafka105.yinzhengjie.org.cn" > /etc/hosts
    bash: /etc/hosts: Read-only file system
    [root@39020b57791e /]# 
    [root@39020b57791e /]# echo `date +%F` > /yinzhengjie/data/tomcat/webapps/app01/date.html
    [root@39020b57791e /]# 
    [root@39020b57791e /]# ll /yinzhengjie/data/tomcat/webapps/app01/
    total 8
    -rw-r--r-- 1 root root 11 Jan 30 02:16 date.html
    -rw-r--r-- 1 root root 73 Jan 30 00:54 index.html
    [root@39020b57791e /]# 
    [root@39020b57791e /]# exit 
    exit
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# ll /yinzhengjie/data/tomcat/app01/
    total 8
    -rw-r--r-- 1 root root 11 Jan 30 02:16 date.html
    -rw-r--r-- 1 root root 73 Jan 30 00:54 index.html
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# 

    10>.多个容器使用同一个宿主机数据卷案例

    [root@docker101.yinzhengjie.org.cn ~]# ll /yinzhengjie/data/tomcat/app01/
    total 4
    -rw-r--r-- 1 root root 73 Jan 30 00:54 index.html
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container run -it --rm --name myTomcat01 -v /yinzhengjie/data/tomcat/app01:/yinzhengjie/data/tomcat/webapps/app01:rw -v /etc/hosts:/etc/hosts:ro -p 80:8080 -d tomcat-app01:v0.1 
    80d4a2f2874ce807848aebf41f2e0d1d1f6affe1b796946b5e07e8076fef14df
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container run -it --rm --name myTomcat02 -v /yinzhengjie/data/tomcat/app01:/yinzhengjie/data/tomcat/webapps/app01:rw -v /etc/hosts:/etc/hosts:ro -p 81:8080 -d tomcat-app01:v0.1 
    2eb6690aa422f7072a2655762fed657432307887d74fa54769ce689ff53d75b9
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
    2eb6690aa422        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   8 seconds ago       Up 7 seconds        8443/tcp, 0.0.0.0:81->8080/tcp   myTomcat02
    80d4a2f2874c        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   19 seconds ago      Up 18 seconds       8443/tcp, 0.0.0.0:80->8080/tcp   myTomcat01
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container exec -it myTomcat01 bash
    [root@80d4a2f2874c /]# 
    [root@80d4a2f2874c /]# ll /yinzhengjie/data/tomcat/webapps/app01/
    total 4
    -rw-r--r-- 1 root root 73 Jan 30 00:54 index.html
    [root@80d4a2f2874c /]# 
    [root@80d4a2f2874c /]# echo `date +%F` > /yinzhengjie/data/tomcat/webapps/app01/date.html
    [root@80d4a2f2874c /]# 
    [root@80d4a2f2874c /]# ll /yinzhengjie/data/tomcat/webapps/app01/
    total 8
    -rw-r--r-- 1 root root 11 Jan 30 02:24 date.html
    -rw-r--r-- 1 root root 73 Jan 30 00:54 index.html
    [root@80d4a2f2874c /]# 
    [root@80d4a2f2874c /]# exit 
    exit
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container exec -it myTomcat02 bash
    [root@2eb6690aa422 /]# 
    [root@2eb6690aa422 /]# ll /yinzhengjie/
    data/      softwares/ 
    [root@2eb6690aa422 /]# ll /yinzhengjie/data/tomcat/webapps/app01/
    total 8
    -rw-r--r-- 1 root root 11 Jan 30 02:24 date.html
    -rw-r--r-- 1 root root 73 Jan 30 00:54 index.html
    [root@2eb6690aa422 /]# 
    [root@2eb6690aa422 /]# cat /yinzhengjie/data/tomcat/webapps/app01/date.html 
    2020-01-30
    [root@2eb6690aa422 /]# 
    [root@2eb6690aa422 /]# exit 
    exit
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# ll /yinzhengjie/data/tomcat/app01/
    total 8
    -rw-r--r-- 1 root root 11 Jan 30 02:24 date.html
    -rw-r--r-- 1 root root 73 Jan 30 00:54 index.html
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# cat /yinzhengjie/data/tomcat/app01/date.html 
    2020-01-30
    [root@docker101.yinzhengjie.org.cn ~]# 

    四.容器使用数据卷容器案例

    1>.启动一个容器,并挂载到主机的宿主机目录

    [root@docker101.yinzhengjie.org.cn ~]# ll /yinzhengjie/data/tomcat/app01/
    total 4
    -rw-r--r-- 1 root root 73 Jan 30 00:54 index.html
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container run -it --rm --name volume-server -v /yinzhengjie/data/tomcat/app01:/yinzhengjie/data/tomcat/webapps/app01:rw  -d tomcat-app01:v0.1 
    bcb27f67b70683140351924de515ecab2c4b0e10de4c945a32f81f441ddfd88a
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
    bcb27f67b706        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   12 seconds ago      Up 12 seconds       8080/tcp, 8443/tcp   volume-server
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# 

    2>.基于上一步的数据卷容器来创建新的客户端容器

    [root@docker101.yinzhengjie.org.cn ~]# docker container ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
    bcb27f67b706        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   12 minutes ago      Up 12 minutes       8080/tcp, 8443/tcp   volume-server
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container run -it --rm --name volume-client01 -p 80:8080 --volumes-from volume-server -d tomcat-app01:v0.1 
    3c34e7e977ac92c1849b032c81992ed9567b6b85b23aae8ae480f03bd03b4222
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container run -it --rm --name volume-client02 -p 81:8080 --volumes-from volume-server -d tomcat-app01:v0.1 
    2aee6944d5a17abc73a3dd4bc8eb8a8690fe9dbee999c6e8be1543e13e58ac57
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
    2aee6944d5a1        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   3 seconds ago       Up 2 seconds        8443/tcp, 0.0.0.0:81->8080/tcp   volume-client02
    3c34e7e977ac        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   20 seconds ago      Up 19 seconds       8443/tcp, 0.0.0.0:80->8080/tcp   volume-client01
    bcb27f67b706        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   12 minutes ago      Up 12 minutes       8080/tcp, 8443/tcp               volume-server
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# ss -ntl
    State      Recv-Q Send-Q                                                                                          Local Address:Port                                                                                                         Peer Address:Port              
    LISTEN     0      128                                                                                                         *:22                                                                                                                      *:*                  
    LISTEN     0      20480                                                                                                      :::80                                                                                                                     :::*                  
    LISTEN     0      20480                                                                                                      :::81                                                                                                                     :::*                  
    LISTEN     0      128                                                                                                        :::22                                                                                                                     :::*                  
    [root@docker101.yinzhengjie.org.cn ~]# 

    3>.浏览器访问新创建的客户端容器

    [root@docker101.yinzhengjie.org.cn ~]# docker container ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
    2aee6944d5a1        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   3 minutes ago       Up 3 minutes        8443/tcp, 0.0.0.0:81->8080/tcp   volume-client02
    3c34e7e977ac        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   3 minutes ago       Up 3 minutes        8443/tcp, 0.0.0.0:80->8080/tcp   volume-client01
    bcb27f67b706        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   15 minutes ago      Up 15 minutes       8080/tcp, 8443/tcp               volume-server
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container exec -it volume-client01 bash
    [root@3c34e7e977ac /]# 
    [root@3c34e7e977ac /]# ll /yinzhengjie/data/tomcat/webapps/app01/
    total 4
    -rw-r--r-- 1 root root 73 Jan 30 00:54 index.html
    [root@3c34e7e977ac /]# 
    [root@3c34e7e977ac /]# cat /yinzhengjie/data/tomcat/webapps/app01/index.html 
    <h1>YinZhengjie's Tomcat Server 2020,Come to China, come to Wuhan. </h1>
    [root@3c34e7e977ac /]# 
    [root@3c34e7e977ac /]# exit 
    exit
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container exec -it volume-client02 bash
    [root@2aee6944d5a1 /]# 
    [root@2aee6944d5a1 /]# ll /yinzhengjie/data/tomcat/webapps/app01/
    total 4
    -rw-r--r-- 1 root root 73 Jan 30 00:54 index.html
    [root@2aee6944d5a1 /]# 
    [root@2aee6944d5a1 /]# cat /yinzhengjie/data/tomcat/webapps/app01/index.html 
    <h1>YinZhengjie's Tomcat Server 2020,Come to China, come to Wuhan. </h1>
    [root@2aee6944d5a1 /]# 
    [root@2aee6944d5a1 /]# exit 
    exit
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# ss -ntl
    State      Recv-Q Send-Q                                                                                          Local Address:Port                                                                                                         Peer Address:Port              
    LISTEN     0      128                                                                                                         *:22                                                                                                                      *:*                  
    LISTEN     0      20480                                                                                                      :::80                                                                                                                     :::*                  
    LISTEN     0      20480                                                                                                      :::81                                                                                                                     :::*                  
    LISTEN     0      128                                                                                                        :::22                                                                                                                     :::*                  
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# curl http://docker101.yinzhengjie.org.cn/app01/
    <h1>YinZhengjie's Tomcat Server 2020,Come to China, come to Wuhan. </h1>
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# curl http://docker101.yinzhengjie.org.cn:81/app01/
    <h1>YinZhengjie's Tomcat Server 2020,Come to China, come to Wuhan. </h1>
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# 

    4>.在任意一个客户端容器修改内容,通过浏览器验证其它容器的页面内容是否也发生改变

    [root@docker101.yinzhengjie.org.cn ~]# docker container ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
    2aee6944d5a1        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   7 minutes ago       Up 7 minutes        8443/tcp, 0.0.0.0:81->8080/tcp   volume-client02
    3c34e7e977ac        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   7 minutes ago       Up 7 minutes        8443/tcp, 0.0.0.0:80->8080/tcp   volume-client01
    bcb27f67b706        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   19 minutes ago      Up 19 minutes       8080/tcp, 8443/tcp               volume-server
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container exec -it volume-client01 bash
    [root@3c34e7e977ac /]# 
    [root@3c34e7e977ac /]# ll /yinzhengjie/data/tomcat/webapps/app01/
    total 4
    -rw-r--r-- 1 root root 73 Jan 30 00:54 index.html
    [root@3c34e7e977ac /]# 
    [root@3c34e7e977ac /]# echo "<h1>`date +%F`</h1>" > /yinzhengjie/data/tomcat/webapps/app01/data.html
    [root@3c34e7e977ac /]# 
    [root@3c34e7e977ac /]# exit 
    exit
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container exec -it volume-client02 bash
    [root@2aee6944d5a1 /]# 
    [root@2aee6944d5a1 /]# ll /yinzhengjie/data/tomcat/webapps/app01/
    total 8
    -rw-r--r-- 1 root root 20 Jan 30 03:25 data.html
    -rw-r--r-- 1 root root 73 Jan 30 00:54 index.html
    [root@2aee6944d5a1 /]# 
    [root@2aee6944d5a1 /]# cat /yinzhengjie/data/tomcat/webapps/app01/data.html  
    <h1>2020-01-30</h1>
    [root@2aee6944d5a1 /]# 
    [root@2aee6944d5a1 /]# exit 
    exit
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# curl http://docker101.yinzhengjie.org.cn/app01/data.html
    <h1>2020-01-30</h1>
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# curl http://docker101.yinzhengjie.org.cn:81/app01/data.html
    <h1>2020-01-30</h1>
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# 

    5>.删除服务端容器(volume-server),客户端容器(volume-client01和volume-client02)并不会受到影响(因为容器时通过挂载访问数据的),但无法再基于服务端容器创建新的客户端容器

    [root@docker101.yinzhengjie.org.cn ~]# docker container ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
    2aee6944d5a1        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   14 minutes ago      Up 14 minutes       8443/tcp, 0.0.0.0:81->8080/tcp   volume-client02
    3c34e7e977ac        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   15 minutes ago      Up 14 minutes       8443/tcp, 0.0.0.0:80->8080/tcp   volume-client01
    bcb27f67b706        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   27 minutes ago      Up 27 minutes       8080/tcp, 8443/tcp               volume-server
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container rm -f volume-server
    volume-server
    [root@docker101.yinzhengjie.org.cn ~]# 
    [root@docker101.yinzhengjie.org.cn ~]# docker container ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
    2aee6944d5a1        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   14 minutes ago      Up 14 minutes       8443/tcp, 0.0.0.0:81->8080/tcp   volume-client02
    3c34e7e977ac        tomcat-app01:v0.1   "/yinzhengjie/softwa…"   15 minutes ago      Up 15 minutes       8443/tcp, 0.0.0.0:80->8080/tcp   volume-client01
    [root@docker101.yinzhengjie.org.cn ~]# 

    五.数据卷与数据卷容器特点及使用场景

    1>.数据卷的特点及使用场景

      数据卷的特点:
        (1)数据卷是目录或文件,并且可以在多个容器之间共同使用;
        (2)对数据卷更改数据容器里面会立即更新;
        (3)数据卷的数据可以持久保存,即使删除使用该数据卷的容器也不影响使用,即并不会删除数据卷(它是宿主机的目录);
        (4)在容器里面写入数据不会影响到镜像本身;

      数据卷的使用场景:
        (1)日志输出;
        (2)静态web页面;
        (3)应用配置文件;
        (4)多容器间目录或文件共享;

    2>.数据卷容器特点及使用场景

      数据卷容器的特点:
        数据卷容器最大的功能是可以让数据在多个docker容器之间共享,即可以让B容器访问A容器的内容,而其C容器也可以访问A容器的内容,即先要创建一个后台运行的容器作为Server,用于卷提供,这个卷可以为其它容器提供数据存储服务,其它使用此卷的容器作为client端。

      数据卷容器的使用场景:
        可以用于线上数据库,共享数据目录等环境,因为即使数据卷容器被删除了,其它已经基于该数据卷容器创建的容器依然可以挂载使用。
        数据卷容器可以作为共享的方式为其它容器提供文件共享,类似于NFS共享,可以在生产中启用一个实例挂载本地的目录,然后其它的容器分别挂载此容器的目录,即可保证个容器之间的数据一致性。
        这只是docker官方提供的一种数据挂载的解决方案,生产环境很少见人使用这种方式,大多数使用数据卷挂载的方式较多,而且数据卷容器的功能咱们使用数据卷挂载也能实现相同的功能。
  • 相关阅读:
    c# 网络编程
    .net基础------抽象类和接口区别
    自己开发插件-------- 待续...........
    js 学习笔记 (this ,扩展方法,匿名函数)
    meta
    微信公众号支付接口-JSAPI
    跨境电商-311xml报文生成 更新到2018-10
    MooTools 异步请求验证
    微信JS-SDK 接口调用与 php 遇到的坑
    php 与 jquery中$.post()与attr()方法的简单实例 amaze modal 模态窗口
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/12239532.html
Copyright © 2011-2022 走看看