dockerfile的編寫參數

注意細節html

  「#」號開頭是註釋 ,指令不區分大小寫,順序執行node

FROM   指定基礎鏡像;注意必須是文件裏第一個非註釋行
ENV   name  值   設置變量,注意沒有=號
變量引用 
${name:-chenxi}  假如變量爲空chenxi就是變量的默認值
[root@master ~]# echo ${name:-chenxi}
chenxi

  FROM 語法介紹mysql

FROM <指定docker鏡像名>[:<tag>]  標籤不加默認是latest

FROM <指定docker鏡像名>@哈希碼

  MAINTANIERlinux

MAINTANIER #做者的信息

  LABEL語法web

LABEL 指定元數據信息 key=值  key=值

  COPY 用於從docker 主機複製文件至建立的新鏡像文件語法redis

COPY   源文件或目錄   目標目錄
COPY  ["源文件"  "目標目錄"] 
注意 路徑中有空白符一般使用第二個方法
文件複製準則
源文件必須是build上下文中的路徑,不能是其父目錄的文件
若是源是目錄,則其內部文件或者子目錄會被遞歸複製,但源目錄自身不會被複制
若是指定多個源文件,或者在指定源文件使用了通配符,則目標必須是個目錄,且以/結尾
若是目標不存在,它則會被自動建立,這包括其父目錄路徑

  示例sql

[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路徑語法docker

ADD   源文件 目標
ADD   ["源文件"     "目標文件"]
操做準則
若是源文件爲ULR切目標文件不以/結尾,則源文件指定的文件將被下載並直接建立爲目標文件   ;若是目標文件以/結尾,則文件名直接下載到目標/文件
若是源文件是本地文件系統上的壓縮格式的tar文件,它將被展開爲一個目錄,其行爲相似於tar -x 命令,然而經過ULR獲取的tar文件將不會被展開
若是<源文件>有多個,或其間接直接使用通配符,則目標文件必須是一個以/結尾的目錄路徑,若是目標文件不以/結尾的,則其是普通文件。源文件的內容將被直接寫入目標文件裏

  示例json

[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

  示例-2centos

[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
相關文章
相關標籤/搜索