zoukankan      html  css  js  c++  java
  • dockerfile的编写参数

    注意细节

      “#”号开头是注释 ,指令不区分大小写,顺序执行

    FROM   指定基础镜像;注意必须是文件里第一个非注释行
    ENV   name  值   设置变量,注意没有=号
    变量引用 
    ${name:-chenxi}  假如变量为空chenxi就是变量的默认值
    [root@master ~]# echo ${name:-chenxi}
    chenxi
    

      FROM 语法介绍

    FROM <指定docker镜像名>[:<tag>]  标签不加默认是latest
    
    FROM <指定docker镜像名>@哈希码
    

      MAINTANIER

    MAINTANIER #作者的信息
    

      LABEL语法

    LABEL 指定元数据信息 key=值  key=值
    

      COPY 用于从docker 主机复制文件至创建的新镜像文件语法

    COPY   源文件或目录   目标目录
    COPY  ["源文件"  "目标目录"] 
    注意 路径中有空白符通常使用第二个方法
    文件复制准则
    源文件必须是build上下文中的路径,不能是其父目录的文件
    如果源是目录,则其内部文件或者子目录会被递归复制,但源目录自身不会被复制
    如果指定多个源文件,或者在指定源文件使用了通配符,则目标必须是个目录,且以/结尾
    如果目标不存在,它则会被自动创建,这包括其父目录路径
    

      示例

    [root@master docker]# cat Dockerfile 
    FROM busybox
    COPY index.html /data/index.html
    [root@master docker]# echo "chwxxi" > index.html
    [root@master docker]# docker build -t chenxi:v01 ./
    Sending build context to Docker daemon  3.072kB
    Step 1/2 : FROM busybox
     ---> 020584afccce
    Step 2/2 : COPY index.html /data/index.html
     ---> a39f70f77f61
    Successfully built a39f70f77f61
    Successfully tagged chenxi:v01
    [root@master docker]# docker run --name cx --rm chenxi:v01 cat /data/index.html
    chwxxi
    

      ADD 指令类似于COPY指令,支持使用tar文件和URL路径语法

    ADD   源文件 目标
    ADD   ["源文件"     "目标文件"]
    操作准则
    如果源文件为ULR切目标文件不以/结尾,则源文件指定的文件将被下载并直接创建为目标文件   ;如果目标文件以/结尾,则文件名直接下载到目标/文件
    如果源文件是本地文件系统上的压缩格式的tar文件,它将被展开为一个目录,其行为类似于tar -x 命令,然而通过ULR获取的tar文件将不会被展开
    如果<源文件>有多个,或其间接直接使用通配符,则目标文件必须是一个以/结尾的目录路径,如果目标文件不以/结尾的,则其是普通文件。源文件的内容将被直接写入目标文件里
    

      示例

    [root@master docker]# cat Dockerfile 
    FROM busybox
    COPY index.html /data/index.html
    ADD http://download.redis.io/releases/redis-5.0.7.tar.gz /data/
    [root@master docker]# docker build -t redis:v01 ./
    Sending build context to Docker daemon  1.988MB
    Step 1/3 : FROM busybox
     ---> 020584afccce
    Step 2/3 : COPY index.html /data/index.html
     ---> Using cache
     ---> a39f70f77f61
    Step 3/3 : ADD http://download.redis.io/releases/redis-5.0.7.tar.gz /data/
    Downloading [==================================================>]  1.984MB/1.984MB
     ---> 50adfdcc6117
    Successfully built 50adfdcc6117
    Successfully tagged redis:v01
    [root@master docker]# docker run --name cx --rm redis:v01 ls /data/
    index.html
    redis-5.0.7.tar.gz
    

      示例-2

    [root@master docker]# cat Dockerfile 
    FROM busybox
    COPY index.html /data/index.html
    ADD redis-5.0.7.tar.gz /data/redis/
    
    [root@master docker]# ls
    Dockerfile  index.html  redis-5.0.7.tar.gz
    [root@master docker]# docker build -t redis:v02 ./
    Sending build context to Docker daemon  1.988MB
    Step 1/3 : FROM busybox
     ---> 020584afccce
    Step 2/3 : COPY index.html /data/index.html
     ---> Using cache
     ---> a39f70f77f61
    Step 3/3 : ADD redis-5.0.7.tar.gz /data/redis/
     ---> cbbee8a281ad
    Successfully built cbbee8a281ad
    Successfully tagged redis:v02
    [root@master docker]#  docker run --name cx --rm redis:v02 ls /data/redis
    redis-5.0.7
    

      WORKDIR指定工作目录

    用于设定Dockerfil中所有的RUN、CMD、ENTRYPOINT、COPY和ADD设定工作目录
    WORKDIR    路径
    

      示例

    [root@master docker]# cat Dockerfile 
    FROM busybox
    COPY index.html /data/index.html
    WORKDIR /usr/local/src/
    ADD redis-5.0.7.tar.gz ./
    [root@master docker]# ls
    Dockerfile  index.html  redis-5.0.7.tar.gz
    [root@master docker]# docker build -t redis:v03 ./
    Sending build context to Docker daemon  1.988MB
    Step 1/4 : FROM busybox
     ---> 020584afccce
    Step 2/4 : COPY index.html /data/index.html
     ---> Using cache
     ---> a39f70f77f61
    Step 3/4 : WORKDIR /usr/local/src/
     ---> Running in d2fca8af31a5
    Removing intermediate container d2fca8af31a5
     ---> 91323c9b4a85
    Step 4/4 : ADD redis-5.0.7.tar.gz ./
    ---> b2a20e26e004
    Successfully built b2a20e26e004
    Successfully tagged redis:v03
    [root@master docker]#  docker run --name cx --rm redis:v03 ls /usr/local/src/
    redis-5.0.7
    

      VOLUME 创建挂载点目录

    用于在镜像里创建一个挂载点目录,用于挂着Dockre主机上的卷或其他容器上的卷
    VOLUME   目录
    如果挂载点目录路径下此文件存在,docker run 会在卷挂载完成后将此前文件复制到新卷里
    

      示例

    [root@master docker]# cat Dockerfile 
    FROM busybox
    COPY index.html /data/index.html
    WORKDIR /usr/local/src/
    ADD redis-5.0.7.tar.gz ./
    VOLUME /data/mysql/
    [root@master docker]# docker build -t mysql:v01 ./
    Sending build context to Docker daemon  1.988MB
    Step 1/5 : FROM busybox
     ---> 020584afccce
    Step 2/5 : COPY index.html /data/index.html
     ---> Using cache
     ---> a39f70f77f61
    Step 3/5 : WORKDIR /usr/local/src/
     ---> Using cache
     ---> 91323c9b4a85
    Step 4/5 : ADD redis-5.0.7.tar.gz ./
     ---> Using cache
     ---> b2a20e26e004
    Step 5/5 : VOLUME /data/mysql/
     ---> Running in 8e97168b8a38
    Removing intermediate container 8e97168b8a38
     ---> 36ae8d2ba3b7
    Successfully built 36ae8d2ba3b7
    Successfully tagged mysql:v01
    [root@master docker]#  docker run --name cx --rm mysql:v01 mount | grep /data/mysql
    /dev/mapper/centos-root on /data/mysql type xfs (rw,relatime,attr2,inode64,noquota)
     EXPOSE 指令
    
    用于为容器打开指定要监听端口已实现与外部通信一次可以暴露多个端口
    语法
    EXPOSE   11211/tcp 11211/udp
     示例
    
    [root@master docker]# cat Dockerfile 
    FROM busybox
    COPY index.html /data/index.html
    WORKDIR /usr/local/src/
    ADD redis-5.0.7.tar.gz ./
    VOLUME /data/mysql/
    EXPOSE 80/tcp
    [root@master docker]# docker build -t http:v.01 ./
    Sending build context to Docker daemon  1.988MB
    Step 1/6 : FROM busybox
     ---> 020584afccce
    Step 2/6 : COPY index.html /data/index.html
     ---> Using cache
     ---> a39f70f77f61
    Step 3/6 : WORKDIR /usr/local/src/
     ---> Using cache
     ---> 91323c9b4a85
    Step 4/6 : ADD redis-5.0.7.tar.gz ./
     ---> Using cache
     ---> b2a20e26e004
    Step 5/6 : VOLUME /data/mysql/
     ---> Using cache
     ---> 36ae8d2ba3b7
    Step 6/6 : EXPOSE 80/tcp
     ---> Running in be421f20d0e8
    Removing intermediate container be421f20d0e8
     ---> 578864a06f74
    Successfully built 578864a06f74
    Successfully tagged http:v.01
    [root@master docker]# docker run --name web --rm http:v.01 /bin/httpd -h /data -f   -f是前台运行
    
    [root@master ~]# docker inspect web
    [
        {
            "Id": "c6d225297b350edc4a58102d61fcdaa823b3e08892b52f397b64acf02acb1be0",
            "Created": "2019-11-23T02:33:08.788432916Z",
            "Path": "/bin/httpd",
            "Args": [
                "-h",
                "/data",
                "-f"
            ],
            "State": {
                "Status": "running",
                "Running": true,
                "Paused": false,
                "Restarting": false,
                "OOMKilled": false,
                "Dead": false,
                "Pid": 10800,
                "ExitCode": 0,
                "Error": "",
                "StartedAt": "2019-11-23T02:33:09.391066632Z",
                "FinishedAt": "0001-01-01T00:00:00Z"
            },
            "Image": "sha256:578864a06f740fe342194424148a0ec1b77f942c254b6442bc7a5c8af4ae4546"
    ,        "ResolvConfPath": "/var/lib/docker/containers/c6d225297b350edc4a58102d61fcdaa823b3
    e08892b52f397b64acf02acb1be0/resolv.conf",        "HostnamePath": "/var/lib/docker/containers/c6d225297b350edc4a58102d61fcdaa823b3e0
    8892b52f397b64acf02acb1be0/hostname",        "HostsPath": "/var/lib/docker/containers/c6d225297b350edc4a58102d61fcdaa823b3e0889
    2b52f397b64acf02acb1be0/hosts",        "LogPath": "/var/lib/docker/containers/c6d225297b350edc4a58102d61fcdaa823b3e08892b
    52f397b64acf02acb1be0/c6d225297b350edc4a58102d61fcdaa823b3e08892b52f397b64acf02acb1be0-json.log",        "Name": "/web",
            "RestartCount": 0,
            "Driver": "overlay2",
            "Platform": "linux",
            "MountLabel": "",
            "ProcessLabel": "",
            "AppArmorProfile": "",
            "ExecIDs": null,
            "HostConfig": {
                "Binds": null,
                "ContainerIDFile": "",
                "LogConfig": {
                    "Type": "json-file",
                    "Config": {}
                },
                "NetworkMode": "default",
                "PortBindings": {},
                "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/7bf24b175acfc5ffff3ddd52aaf9b715ecd2
    715da94798e3f0de3cccaf1cef2d-init/diff:/var/lib/docker/overlay2/cd4704ddb683f96a444128da1b375308e61739968544717bc0fb4cc25df3408f/diff:/var/lib/docker/overlay2/98dd3838dda54c72e44f932f27b3e6b838fe11093083391d265042c840adceed/diff:/var/lib/docker/overlay2/56bd207136154521127d96aabbd7823be2334cc15e3ed271396aca6e6ad58de0/diff:/var/lib/docker/overlay2/5cad835aa43c37ba0d434e3775feeb06fe1759f8749d4e8081f186d805b0ad8e/diff",                "MergedDir": "/var/lib/docker/overlay2/7bf24b175acfc5ffff3ddd52aaf9b715ecd
    2715da94798e3f0de3cccaf1cef2d/merged",                "UpperDir": "/var/lib/docker/overlay2/7bf24b175acfc5ffff3ddd52aaf9b715ecd2
    715da94798e3f0de3cccaf1cef2d/diff",                "WorkDir": "/var/lib/docker/overlay2/7bf24b175acfc5ffff3ddd52aaf9b715ecd27
    15da94798e3f0de3cccaf1cef2d/work"            },
                "Name": "overlay2"
            },
            "Mounts": [
                {
                    "Type": "volume",
                    "Name": "b855f89205224a970e2a02c5e6404aba57c1774c363256a33c88b14d8304dd35"
    ,                "Source": "/var/lib/docker/volumes/b855f89205224a970e2a02c5e6404aba57c1774
    c363256a33c88b14d8304dd35/_data",                "Destination": "/data/mysql",
                    "Driver": "local",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                }
            ],
            "Config": {
                "Hostname": "c6d225297b35",
                "Domainname": "",
                "User": "",
                "AttachStdin": false,
                "AttachStdout": true,
                "AttachStderr": true,
                "ExposedPorts": {
                    "80/tcp": {}
                },
                "Tty": false,
                "OpenStdin": false,
                "StdinOnce": false,
                "Env": [
                    "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
                ],
                "Cmd": [
                    "/bin/httpd",
                    "-h",
                    "/data",
                    "-f"
                ],
                "Image": "http:v.01",
                "Volumes": {
                    "/data/mysql/": {}
                },
                "WorkingDir": "/usr/local/src",
                "Entrypoint": null,
                "OnBuild": null,
                "Labels": {}
            },
            "NetworkSettings": {
                "Bridge": "",
                "SandboxID": "32d53eb902a2b797942ad31bf990220c0c63dc62c6397ac87beb5c1d6dae503f
    ",            "HairpinMode": false,
                "LinkLocalIPv6Address": "",
                "LinkLocalIPv6PrefixLen": 0,
                "Ports": {
                    "80/tcp": null
                },
                "SandboxKey": "/var/run/docker/netns/32d53eb902a2",
                "SecondaryIPAddresses": null,
                "SecondaryIPv6Addresses": null,
                "EndpointID": "0bf9b2b05bc76b526798b2334957c4a9fb2a279c449e25a8bfef974d578fa3c
    7",            "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": "20670e48b3f87b53f0426998127e8fd0658e61e8e01ace3bf7cb041a
    ad5bd427",                    "EndpointID": "0bf9b2b05bc76b526798b2334957c4a9fb2a279c449e25a8bfef974
    d578fa3c7",                    "Gateway": "172.17.0.1",
                        "IPAddress": "172.17.0.2",   IP
                        "IPPrefixLen": 16,
                        "IPv6Gateway": "",
                        "GlobalIPv6Address": "",
                        "GlobalIPv6PrefixLen": 0,
                        "MacAddress": "02:42:ac:11:00:02",
                        "DriverOpts": null
                    }
                }
            }
        }
    ]
    
    
    [root@master ~]# curl 172.17.0.2
    chwxxi
    
    [root@master docker]# docker run --name web -P --rm http:v.01 /bin/httpd -h /data -f   -P 随机在docker主机上暴露一个端口
    [root@master docker]# docker port web 
    80/tcp -> 0.0.0.0:32768
    [root@slave1 ~]# curl  192.168.10.5:32768
    chwxxi
    

      ENV 设置环境变量

    用于为镜像定义所需的环境变量,并被Dockerfile文件中位于其后指令所调用
    调用格式   $name
    定义格式 ENV   name 值   或者 name = 值
    第一个只能设置一个变量,第二个可以同时设置多个变量
    

      示例

    [root@master docker]# cat Dockerfile 
    FROM busybox
    ENV DOCKER_ROOT=/data/index.html
    COPY index.html $DOCKER_ROOT
    WORKDIR /usr/local/src/
    ADD redis-5.0.7.tar.gz ./
    VOLUME /data/mysql/
    EXPOSE 80/tcp
    [root@master docker]# docker build -t http:v.02 ./
    Sending build context to Docker daemon  1.988MB
    Step 1/7 : FROM busybox
     ---> 020584afccce
    Step 2/7 : ENV DOCKER_ROOT=/data/index.html
     ---> Running in c36156ec361f
    Removing intermediate container c36156ec361f
     ---> b9a06f515829
    Step 3/7 : COPY index.html $DOCKER_ROOT
     ---> d9ddba9390da
    Step 4/7 : WORKDIR /usr/local/src/
     ---> Running in 7c7c7843262e
    Removing intermediate container 7c7c7843262e
     ---> 5bcade248353
    Step 5/7 : ADD redis-5.0.7.tar.gz ./
     ---> 53d3ffc442eb
    Step 6/7 : VOLUME /data/mysql/
     ---> Running in a0fefc923333
    Removing intermediate container a0fefc923333
     ---> cae7c094e37d
    Step 7/7 : EXPOSE 80/tcp
     ---> Running in 5f1721b1e675
    Removing intermediate container 5f1721b1e675
     ---> d15cd197fe0a
    Successfully built d15cd197fe0a
    Successfully tagged http:v.02
    [root@master docker]# docker run --name web --rm http:v.02 cat /data/index.html
    chwxxi
    [root@master docker]# docker run --name web --rm http:v.02 printenv
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    HOSTNAME=0f82ee34454c
    DOCKER_ROOT=/data/index.html
    HOME=/root
    

     RUN 是构建镜像过程是运行的命令

    RUN 指令介绍
    用于指定docker build过程中运行的程序,可以任何命令 
    RUN  命令 或
    RUN  [命令,参数]
    第一种格式中,是shll 的命令。且以"/bash/sh -c"来运行它,这就意味着词进程在容器里PID不能为1,不能接受Unix信号,当使用docker stop 命令停止时此进程不会接受SIGTERM信号的
    第二种格式中的参数是一个JSON格式的数组,命令后面跟的参数,不能使用通配符
    

      CMD指定容器默认启动时的命令程序;

    ENTRYPOINT

    类似CMD指令的功能,用于为容器指定默认的运行程序,从而使容器像是一个单独的可执行的程序
    与CMD不同的是,有ENTRYPOINT启动的程序不会被docker run 命令指定的参数覆盖,而且这些命令行参数会被当做参数传递给ENTRYPOINT指定的程序的;不过docker run 有--entrypoint选项参数可以覆盖ENTRYPOINT指定的程序的
    格式
    ENTRYPOINT  命令
    docker run 命令传入的参数会覆盖CMD指令的内容并且附加到ENIRYPOINT命令最后作为参数使用  使用““””
    

      HEALTHCHECK检查容器是否健康

    HEALTHCHECK 语法
    --interval=数字m  默认30秒 每隔多久检测一次
    --timeout=数字m 默认30秒 检测时超时时间
    --start-period=数字m 默认0秒   容器启动会多久检测
    --retries=数字 检测几次失败后定为失败
    CMD 检测命令
    
    
    
    HEALTHECK    --interval=数字m --timeout=数字m  --retries=数字  CMD curl -f http://IP||exit 1
    
    草都可以从石头缝隙中长出来更可况你呢
  • 相关阅读:
    python for test
    python链接mysql pymysql
    MongoDB数据表添加字段
    NodeVisitor
    无法解决的错误
    一个点绕着另一个点旋转一定角度后的坐标
    2.0版本里程碑,研发日志
    osg Node getParentalNodePaths()报错
    TeslaManage 2.0编译日志
    机械臂模拟2.0
  • 原文地址:https://www.cnblogs.com/rdchenxi/p/11915336.html
Copyright © 2011-2022 走看看