zoukankan      html  css  js  c++  java
  • dockerFile解析

    1.背景

    2.先来一个hello world

     在上一节中我讲了容器数据卷,那么可以在自己建一个容器卷么

    步骤:
    第一步,在主机根目录下创建一个文件夹,名称为dockerFileData

    第二步,file构建,即创建一个文件为dockerFile01,文件内容为:
    # volume test01
    FROM centos
    VOLUME ["/c-dataFile01","/c-dataFile02","/c-dataFile03"]
    CMD echo "finished....success"
    CMD /bin/bash

    第三步,上一步的文件build生成镜像,
    docker build -f /dockerFileData/dockerFile01 -t testImage01/centos

     大家这里注意观察,

    截图中的Step0.....Step1....Step2.....Step3...几个步骤,

    每一步其实就对应是我们上面的代码,

    并且每一步都会产生一个镜像id,再次印证我们之前讲的镜像是一层包一层的。

    第四步,run运行容器

    第五步,查看运行后的根目录下是否有c-dataFile01,c-dataFile02,c-dataFile03三个容器共享文件夹;
    第六步,使用 docker inspect 容器id,查看上一步中的上个共享文件对应的主机绑定的默认文件夹位置;

     更多内容如下:

    [
    {
        "Id": "9a28a87274f471b47c39910724a5e2884b5043a0b33bf7beb3f3157cd27ad1aa",
        "Created": "2020-08-08T04:22:12.6184255Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 20613,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2020-08-08T04:22:13.0093046Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "a666d14bf5bac359135485a3cf4bf9ed6b8ee60fe65b87a2fd313f252df7bfd7",
        "NetworkSettings": {
            "Bridge": "",
            "EndpointID": "080f5be425e241b0aad8cffb116740646b2952d34b356ad8ac571eadda22f523",
            "Gateway": "172.17.42.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "HairpinMode": false,
            "IPAddress": "172.17.0.11",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "MacAddress": "02:42:ac:11:00:0b",
            "NetworkID": "d548d190550d9f5933f92e5843f0f27f69ae038b4313503ad73422cf089357be",
            "PortMapping": null,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/9a28a87274f4",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null
        },
        "ResolvConfPath": "/var/lib/docker/containers/9a28a87274f471b47c39910724a5e2884b5043a0b33bf7beb3f3157cd27ad1aa/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/9a28a87274f471b47c39910724a5e2884b5043a0b33bf7beb3f3157cd27ad1aa/hostname",
        "HostsPath": "/var/lib/docker/containers/9a28a87274f471b47c39910724a5e2884b5043a0b33bf7beb3f3157cd27ad1aa/hosts",
        "LogPath": "/var/lib/docker/containers/9a28a87274f471b47c39910724a5e2884b5043a0b33bf7beb3f3157cd27ad1aa/9a28a87274f471b47c39910724a5e2884b5043a0b33bf7beb3f3157cd27ad1aa-json.log",
        "Name": "/tender_almeida",
        "RestartCount": 0,
        "Driver": "devicemapper",
        "ExecDriver": "native-0.2",
        "MountLabel": "",
        "ProcessLabel": "",
        "Volumes": {
            "/c-dataFile01": "/var/lib/docker/volumes/ecbaf289768f52d0aa5357ad37c0c8588e82e6e8d320c37ec463512a631adfb6/_data",
            "/c-dataFile02": "/var/lib/docker/volumes/eeb5f75deed30c2798e8408d85cdaeb5e321cf5baf46e07da35004f58316bb32/_data",
            "/c-dataFile03": "/var/lib/docker/volumes/2e3e45108937e55a6fe713991c52271853bc1e7cf8fb74da001a7c3e081d9922/_data"
        },
        "VolumesRW": {
            "/c-dataFile01": true,
            "/c-dataFile02": true,
            "/c-dataFile03": true
        },
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LxcConf": [],
            "Memory": 0,
            "MemorySwap": 0,
            "CpuShares": 0,
            "CpuPeriod": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "CpuQuota": 0,
            "BlkioWeight": 0,
            "OomKillDisable": false,
            "Privileged": false,
            "PortBindings": {},
            "Links": null,
            "PublishAllPorts": false,
            "Dns": null,
            "DnsSearch": null,
            "ExtraHosts": null,
            "VolumesFrom": null,
            "Devices": [],
            "NetworkMode": "bridge",
            "IpcMode": "",
            "PidMode": "",
            "UTSMode": "",
            "CapAdd": null,
            "CapDrop": null,
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "SecurityOpt": null,
            "ReadonlyRootfs": false,
            "Ulimits": null,
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "CgroupParent": ""
        },
        "Config": {
            "Hostname": "9a28a87274f4",
            "Domainname": "",
            "User": "",
            "AttachStdin": true,
            "AttachStdout": true,
            "AttachStderr": true,
            "PortSpecs": null,
            "ExposedPorts": null,
            "Tty": true,
            "OpenStdin": true,
            "StdinOnce": true,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "testimage01/centos",
            "Volumes": {
                "/c-dataFile01": {},
                "/c-dataFile02": {},
                "/c-dataFile03": {}
            },
            "VolumeDriver": "",
            "WorkingDir": "",
            "Entrypoint": null,
            "NetworkDisabled": false,
            "MacAddress": "",
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20200611",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        }
    }
    ]
    View Code

    查看主机中是否有对应文件夹

    第七步,测试,
    在主机的共享文件夹中添加或修改文件,是否能在对应的容器共享文件(c-dataFile01,c-dataFile02,c-dataFile03)中看到

    主机中添加文件

     容器中查看

    在容器的共享文件夹中(c-dataFile01,c-dataFile02,c-dataFile03)添加或修改文件,是否能在对应的主机共享文件中看到

    请自己验证

    3.容器间传递共享

    简单的说就是,假设运行3个cento实例,这个3个实例的数据可以同等级的共享数据;

    案例设计思路:

    1.镜像使用上一节我们自己build出来的 testimage01/centos,这个镜像启动后会自动创建3个共享的容器数据卷(c-dataFile01,c-dataFile02,c-dataFile03)

    2.容器继承体系为 centos01--》centos02--》centos03

    3.每次容器运行后都在c-dataFile01里面建立一个文件,看是否都能共享

    4.如果删除centos02,分别在centos01和centos03中建立文件,是否还是能共享

    具体步骤:

    第一步,启动第一个容器,且命名为centos01,
    并在数据卷c-dataFile01中创建test01-1.txt文件
    docker run -it --name centos01 testimage01/centos

    第二步,启动第二个容器,且命名为centos02,并且继承自centos01,
    并在数据卷c-dataFile01中创建test02-1.txt文件,
    docker run -it --name centos02 --volumes-from centos01 testimage01/centos

    验证:
    在当前容器(centos02)查看是否有容器centos01共享的test01-1.txt文件;
    进入centos01,查看是否有centos02共享的test02-1.txt文件;

    第三步,启动第三个容器,且命名为centos03,并且继承自centos02,
    并在数据卷c-dataFile01中创建test03-1.txt文件
    docker run -it --name centos03 --volumes-from centos02 testimage01/centos

    验证,三个容器中的数据是否都一样,及都包括test01-1.txt、test02-1.txt、test03-1.txt文件
    在当前容器(centos03)查看是否有容器centos01、centos02共享的test01-1.txt、test02-1.txt文件;
    进入centos01,查看是否有容器centos02、centos03共享的test02-1.txt、test03-1.txt文件;

    进入centos02,查看是否有容器centos01、centos03共享的test01-1.txt、test03-1.txt文件;

    第四步,停止并删除容器centos02,在centos01、centos03分别创建文件test01-2.txt、test03-2.txt
    检查是否仍然能共享

    删除容器centos02

    centos01中

    centos03中

     完美!

    系统化学习docker教程:

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

  • 相关阅读:
    文件工具类之FileUtils
    JAVA8日期工具类
    mybatis模糊查询匹配汉字查询不出来数据,匹配字符和数字却可以的问题解决
    问到ConcurrentHashMap不要再提Segment了
    开发中常用工具
    Spring 如何解决循环依赖?
    JVM8基础概念总结
    String字符串相等判断
    面试再也不怕问到HashMap(二)
    面试再也不怕问到HashMap(一)
  • 原文地址:https://www.cnblogs.com/newAndHui/p/13457284.html
Copyright © 2011-2022 走看看