ARG :指定创建镜像过程中使用的变量
格式 ARG <name> = [<default value>];在执行docker build 的时候,可以通过-build-arg=来为变量赋值。当镜像编译成功后,ARG指定的变量将再存在(ENV 指定的变量会留在镜像里保留)。docker 内置了一些镜像创建变量,用户可以直接使用无需声明,包括(区分大小写)HPPT_PROXY、HTTPS_PROXY、FTP_PROXY、NO_PROXY
FROM: 指定创建镜像时使用的基础镜像
格式 FROM <image> [AS <name>] 或者 FROM <image>:<tag> [AS <name>] 或者FROM <image>@<digest> [AS <name>];任何Dockerfile中第一条指令必须为FROM指令。并且,如果同一个dockerfile中创建多个镜像时,可以使用多个FROM指令(每个镜像一次);为保证镜像精简,可以选用体积较小的镜像如Alpine或Debian作为基础镜像
[root@master ~]# cat Dockerfile ARG VERSION=9.3 FROM debian:${VERSION} [root@master ~]# docker build -t cx /root Sending build context to Docker daemon 386.9MB Step 1/2 : ARG VERSION=9.3 Step 2/2 : FROM debian:${VERSION} 9.3: Pulling from library/debian 3e731ddb7fc9: Pull complete Digest: sha256:4fcd8c0b6f5e3bd44a3e63be259fd0c038476d432953d449ef34aedf16def331 Status: Downloaded newer image for debian:9.3 ---> 1b3ec9d977fb Successfully built 1b3ec9d977fb Successfully tagged cx:latest [root@master ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 83aa35aa1c79 11 days ago 1.22MB cx latest 1b3ec9d977fb 2 years ago 100MB debian 9.3 1b3ec9d977fb 2 years ago 100MB
LABEL:指令生成镜像添加元数据的标签信息。这些标签信息可以用来辅助过滤特定镜像
格式 LABEL <key> = <value> ....
[root@master ~]# cat Dockerfile ARG VERSION=9.3 FROM debian:${VERSION} LABEL version="1.0.0-rc3" LABEL author="cx@github" date="2020-03-19" [root@master ~]# docker build -t cx:0.v1 /root Sending build context to Docker daemon 386.9MB Step 1/4 : ARG VERSION=9.3 Step 2/4 : FROM debian:${VERSION} ---> 1b3ec9d977fb Step 3/4 : LABEL version="1.0.0-rc3" ---> Running in 1a7cd7bc3b50 Removing intermediate container 1a7cd7bc3b50 ---> fa75eedc0b84 Step 4/4 : LABEL author="cx@github" date="2020-03-19" ---> Running in c7cbfb899f2d Removing intermediate container c7cbfb899f2d ---> c837f32b47bd Successfully built c837f32b47bd Successfully tagged cx:0.v1
EXPOSE 声明镜像内服务监听的端口。格式为EXPOSE <port> [<port>/<portocol>]
[root@master ~]# cat Dockerfile ARG VERSION=9.3 FROM debian:${VERSION} LABEL version="1.0.0-rc3" LABEL author="cx@github" date="2020-03-19" EXPOSE 22 808 [root@master ~]# docker build -t cx:0.v2 /root
注意该指令只是起到声明作用,并不会自动完成端口映射,如果想要映射端口,在启动容器时可以使用-P参数 或者 -p HOST_PORT(主机端口):CONAINER_PORT(容器端口)
ENV:指定环境变量,镜像生成过程中会被后续的RUN指令使用,在镜像启动后也会存在;
格式:ENV <key> <value> 或者 ENV key = value
[root@master ~]# cat Dockerfile ARG VERSION=9.3 FROM debian:${VERSION} LABEL version="1.0.0-rc3" LABEL author="cx@github" date="2020-03-19" EXPOSE 22 808 ENV APP_VERSION=1.0.0 [root@master ~]# docker build -t cx:0.v3 /root
注意指令指定环境变量在运行时可以被覆盖掉,如docker run --env <key>=<value> image;当一条ENV指令中同时为多个环境变量赋值并且值也是从环境变量里取,会为环境变量赋值后再更新,最终结果key1=value1 key2= value2
ENV key1=value2 ENV key1= value1 key2=${key1}
ENTRYPOINT:指定镜像默认入口命令,该入口命令会在启动容器时作为根命令去执行,所有传入值作为该命令参数;类似于CMD的功能,用于为容器指定默认启动程序。从而是容器像一个单独的可执行程序,与CMD不同的是; 由ENTRYPOINT启动的程序不会被docker run 命令行指定的参数覆盖,而CMD指定的命令则被当做参数传递给ENTRYPOINT指定的程序;不过 docker run 命令的 --entrypoint 选项参数可以覆盖ENTRYPOINT指令指定的程序
格式 ENTRYPOINT <command> 或者 ENTRYPOINT ["<excutable>","<param1>","<param2>"]
Docker run 传入的命令参数会覆盖CMD指令指定的内容;Dockerfile可以存着多个ENTRYPOINT指令,仅最后一个生效
[root@master image]# cat Dockerfile #ARG VERSION=9.3 FROM busybox LABEL version="1.0.0-rc3" LABEL author="cx@github" date="2020-03-19" ENV WEB_DOC_ROOT="data/web/html" RUN mkdir -p $WEB_DOC_ROOT && echo 'hijkjk' > ${WEB_DOC_ROOT}/index.html ENTRYPOINT /bin/httpd -f -h ${WEB_DOC_ROOT} [root@master image]# docker build -t cx:0.t2 ./ Sending build context to Docker daemon 1.042MB Step 1/6 : FROM busybox ---> 83aa35aa1c79 Step 2/6 : LABEL version="1.0.0-rc3" ---> Using cache ---> e17e8c86f021 Step 3/6 : LABEL author="cx@github" date="2020-03-19" ---> Using cache ---> be9c2eec007b Step 4/6 : ENV WEB_DOC_ROOT="data/web/html" ---> Using cache ---> e725ad9bdef2 Step 5/6 : RUN mkdir -p $WEB_DOC_ROOT && echo 'hijkjk' > ${WEB_DOC_ROOT}/index.html ---> Using cache ---> 0efeb4d09426 Step 6/6 : ENTRYPOINT /bin/httpd -f -h ${WEB_DOC_ROOT} ---> Running in 72e6ca9cab6b Removing intermediate container 72e6ca9cab6b ---> f75510b7e2fc Successfully built f75510b7e2fc Successfully tagged cx:0.t2 [root@master image]# docker run --name web-2 --rm cx:0.t2 /bin/ls /etc
COPY 复制操作
格式 COPY <源> 目标 或者 COPY “源”“目标”
源:复制的源文件及目录,支持通配符
目标: 目标路径,既正常创建的image的文件系统路径,建议使用绝对路径
复制准则:源文件必须为build上下文中路径,不能是父目录;如果源文件是目录,则其内部文件或子目录会被递归复制,但源文件目录自身不会被复制;如果指定多个源文件,或者使用通配符,则目标必须是一个目标且必须以/结尾;如果目标不存在,它会被自动创建,这包括其父目录
[root@master ~]# echo "wergthjkl;" > index.html [root@master ~]# cat Dockerfile ARG VERSION=9.3 FROM debian:${VERSION} LABEL version="1.0.0-rc3" LABEL author="cx@github" date="2020-03-19" EXPOSE 22 808 ENV APP_VERSION=1.0.0 COPY index.html /data/web/html/ [root@master ~]# docker build -t cx:0.v5 /root Sending build context to Docker daemon 386.9MB Step 1/7 : ARG VERSION=9.3 Step 2/7 : FROM debian:${VERSION} ---> 1b3ec9d977fb Step 3/7 : LABEL version="1.0.0-rc3" ---> Using cache ---> fa75eedc0b84 Step 4/7 : LABEL author="cx@github" date="2020-03-19" ---> Using cache ---> c837f32b47bd Step 5/7 : EXPOSE 22 808 ---> Using cache ---> a989df6b5cf3 Step 6/7 : ENV APP_VERSION=1.0.0 ---> Using cache ---> 7315ee41a9c9 Step 7/7 : COPY index.html /data/web/html/ ---> 12163b0f561a Successfully built 12163b0f561a Successfully tagged cx:0.v5 [root@master ~]# docker run -it cx:0.v5 /bin/sh # ls /data/web/html index.html # cat /data/web/html/index.html wergthjkl; # exit
ADD 指令类似于COPY指令,ADD支持压缩文件解压和URL路径
[root@master ~]# cat Dockerfile ARG VERSION=9.3 FROM debian:${VERSION} LABEL version="1.0.0-rc3" LABEL author="cx@github" date="2020-03-19" EXPOSE 22 808 ENV APP_VERSION=1.0.0 COPY index.html /data/web/html/ ADD http://nginx.org/download/nginx-1.17.9.tar.gz /data/nginx/ [root@master ~]# docker build -t cx:0.v6 /root Sending build context to Docker daemon 386.9MB Step 1/8 : ARG VERSION=9.3 Step 2/8 : FROM debian:${VERSION} ---> 1b3ec9d977fb Step 3/8 : LABEL version="1.0.0-rc3" ---> Using cache ---> fa75eedc0b84 Step 4/8 : LABEL author="cx@github" date="2020-03-19" ---> Using cache ---> c837f32b47bd Step 5/8 : EXPOSE 22 808 ---> Using cache ---> a989df6b5cf3 Step 6/8 : ENV APP_VERSION=1.0.0 ---> Using cache ---> 7315ee41a9c9 Step 7/8 : COPY index.html /data/web/html/ ---> Using cache ---> 12163b0f561a Step 8/8 : ADD http://nginx.org/download/nginx-1.17.9.tar.gz /data/nginx/ Downloading [==================================================>] 1.039MB/1.039MB ---> 10cb74dc466b Successfully built 10cb74dc466b Successfully tagged cx:0.v6 [root@master ~]# docker run -it cx:0.v6 /bin/sh # ls /data/nginx nginx-1.17.9.tar.gz
本地压缩文件测试
[root@master ~]# cat Dockerfile ARG VERSION=9.3 FROM debian:${VERSION} LABEL version="1.0.0-rc3" LABEL author="cx@github" date="2020-03-19" EXPOSE 22 808 ENV APP_VERSION=1.0.0 COPY index.html /data/web/html/ ADD http://nginx.org/download/nginx-1.17.9.tar.gz /data/nginx/ ADD flink-1.10.0-src.tgz /data/flink [root@master ~]# ls anaconda-ks.cfg Dockerfile flink-1.10.0-src.tgz hadoop hadoop-2.6.1.tar.gz index.html jdk-8u161-linux-x64.tar.gz [root@master ~]# docker build -t cx:0.v7 /root Sending build context to Docker daemon 408.8MB Step 1/9 : ARG VERSION=9.3 Step 2/9 : FROM debian:${VERSION} ---> 1b3ec9d977fb Step 3/9 : LABEL version="1.0.0-rc3" ---> Using cache ---> fa75eedc0b84 Step 4/9 : LABEL author="cx@github" date="2020-03-19" ---> Using cache ---> c837f32b47bd Step 5/9 : EXPOSE 22 808 ---> Using cache ---> a989df6b5cf3 Step 6/9 : ENV APP_VERSION=1.0.0 ---> Using cache ---> 7315ee41a9c9 Step 7/9 : COPY index.html /data/web/html/ ---> Using cache ---> 12163b0f561a Step 8/9 : ADD http://nginx.org/download/nginx-1.17.9.tar.gz /data/nginx/ Downloading [==================================================>] 1.039MB/1.039MB ---> Using cache ---> 10cb74dc466b Step 9/9 : ADD flink-1.10.0-src.tgz /data/flink ---> 534050f68c8a Successfully built 534050f68c8a Successfully tagged cx:0.v7 [root@master ~]# docker run -it cx:0.v7 /bin/sh # ls /data/flink flink-1.10.0 # ls /data/flink/flink-1.10.0 LICENSE flink-clients flink-docs flink-java flink-ml-parent flink-runtime-web flink-streaming-scala flink-yarn-tests NOTICE flink-connectors flink-end-to-end-tests flink-jepsen flink-optimizer flink-scala flink-table licenses README.md flink-container flink-examples flink-kubernetes flink-python flink-scala-shell flink-test-utils-parent pom.xml azure-pipelines.yml flink-contrib flink-filesystems flink-libraries flink-queryable-state flink-shaded-curator flink-tests tools docs flink-core flink-formats flink-mesos flink-quickstart flink-state-backends flink-walkthroughs flink-annotations flink-dist flink-fs-tests flink-metrics flink-runtime flink-streaming-java flink-yarn
WORKDIR 设定工作目录
ARG VERSION=9.3 FROM debian:${VERSION} LABEL version="1.0.0-rc3" LABEL author="cx@github" date="2020-03-19" EXPOSE 22 808 ENV APP_VERSION=1.0.0 COPY index.html /data/web/html/ #ADD http://nginx.org/download/nginx-1.17.9.tar.gz /data/nginx/ ADD flink-1.10.0-src.tgz /data/flink WORKDIR /data [root@master ~]# docker build -t cx:0.v8 /root Sending build context to Docker daemon 408.8MB Step 1/9 : ARG VERSION=9.3 Step 2/9 : FROM debian:${VERSION} ---> 1b3ec9d977fb Step 3/9 : LABEL version="1.0.0-rc3" ---> Using cache ---> fa75eedc0b84 Step 4/9 : LABEL author="cx@github" date="2020-03-19" ---> Using cache ---> c837f32b47bd Step 5/9 : EXPOSE 22 808 ---> Using cache ---> a989df6b5cf3 Step 6/9 : ENV APP_VERSION=1.0.0 ---> Using cache ---> 7315ee41a9c9 Step 7/9 : COPY index.html /data/web/html/ ---> Using cache ---> 12163b0f561a Step 8/9 : ADD flink-1.10.0-src.tgz /data/flink ---> 19096a36262f Step 9/9 : WORKDIR /data ---> Running in e4a4a04ce841 Removing intermediate container e4a4a04ce841 ---> 99eb5a8d863f Successfully built 99eb5a8d863f Successfully tagged cx:0.v8 [root@master ~]# docker run -it cx:0.v8 /bin/sh # pwd /data
VOLUME:创建一个数据卷挂载点;格式为VOLUME ["/data"];用于在image中创建一个挂载点目录,以挂载Docker host 上的卷或其他容器上的卷如果挂在点目录路径下此前在文件存在,docker run命令会在挂在卷挂在完成后将此前的索引文件复制到新挂在的卷中
[root@master ~]# cat Dockerfile ARG VERSION=9.3 FROM debian:${VERSION} LABEL version="1.0.0-rc3" LABEL author="cx@github" date="2020-03-19" EXPOSE 22 808 ENV APP_VERSION=1.0.0 COPY index.html /data/web/html/ #ADD http://nginx.org/download/nginx-1.17.9.tar.gz /data/nginx/ ADD flink-1.10.0-src.tgz /data/flink WORKDIR /data VOLUME /data/mysql [root@master ~]# docker build -t cx:0.v9 /root Sending build context to Docker daemon 408.8MB Step 1/10 : ARG VERSION=9.3 Step 2/10 : FROM debian:${VERSION} ---> 1b3ec9d977fb Step 3/10 : LABEL version="1.0.0-rc3" ---> Using cache ---> fa75eedc0b84 Step 4/10 : LABEL author="cx@github" date="2020-03-19" ---> Using cache ---> c837f32b47bd Step 5/10 : EXPOSE 22 808 ---> Using cache ---> a989df6b5cf3 Step 6/10 : ENV APP_VERSION=1.0.0 ---> Using cache ---> 7315ee41a9c9 Step 7/10 : COPY index.html /data/web/html/ ---> Using cache ---> 12163b0f561a Step 8/10 : ADD flink-1.10.0-src.tgz /data/flink ---> Using cache ---> 19096a36262f Step 9/10 : WORKDIR /data ---> Using cache ---> 99eb5a8d863f Step 10/10 : VOLUME /data/mysql ---> Running in 5b388ececba3 Removing intermediate container 5b388ececba3 ---> 36d0c793b212 Successfully built 36d0c793b212 Successfully tagged cx:0.v9 [root@master ~]# docker run --name ww --rm cx:0.v9 mount overlay on / type overlay (rw,relatime,lowerdir=/var/lib/docker/overlay2/l/FZMDHLVJYWHK3QKJ6N5QVLMURE:/var/lib/docker/overlay2/l/OUFAS52HHG5ZSEUZXQFJH6J5J3:/var/lib/docker/overlay2/l/REN4VJX2 R2AXBG4ZYUF6YWSK7T:/var/lib/docker/overlay2/l/PLWU4G3GY76YVRTV7HVOCP3S25,upperdir=/var/lib/docker/overlay2/1172520db62eddc83d464b9d2f41e9341e023d01347b7105f9af61d848a23a89/diff,workdir=/var/lib/docker/overlay2/1172520db62eddc83d464b9d2f41e9341e023d01347b7105f9af61d848a23a89/work)proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) tmpfs on /dev type tmpfs (rw,nosuid,size=65536k,mode=755) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=666) sysfs on /sys type sysfs (ro,nosuid,nodev,noexec,relatime) tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,relatime,mode=755) cgroup on /sys/fs/cgroup/systemd type cgroup (ro,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd) cgroup on /sys/fs/cgroup/hugetlb type cgroup (ro,nosuid,nodev,noexec,relatime,hugetlb) cgroup on /sys/fs/cgroup/memory type cgroup (ro,nosuid,nodev,noexec,relatime,memory) cgroup on /sys/fs/cgroup/perf_event type cgroup (ro,nosuid,nodev,noexec,relatime,perf_event) cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (ro,nosuid,nodev,noexec,relatime,net_prio,net_cls) cgroup on /sys/fs/cgroup/blkio type cgroup (ro,nosuid,nodev,noexec,relatime,blkio) cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (ro,nosuid,nodev,noexec,relatime,cpuacct,cpu) cgroup on /sys/fs/cgroup/pids type cgroup (ro,nosuid,nodev,noexec,relatime,pids) cgroup on /sys/fs/cgroup/freezer type cgroup (ro,nosuid,nodev,noexec,relatime,freezer) cgroup on /sys/fs/cgroup/cpuset type cgroup (ro,nosuid,nodev,noexec,relatime,cpuset) cgroup on /sys/fs/cgroup/devices type cgroup (ro,nosuid,nodev,noexec,relatime,devices) mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime) shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=65536k) /dev/mapper/centos_hadoop--1-root on /data/mysql type xfs (rw,relatime,attr2,inode64,noquota) 挂在了 /dev/mapper/centos_hadoop--1-root on /etc/resolv.conf type xfs (rw,relatime,attr2,inode64,noquota) /dev/mapper/centos_hadoop--1-root on /etc/hostname type xfs (rw,relatime,attr2,inode64,noquota) /dev/mapper/centos_hadoop--1-root on /etc/hosts type xfs (rw,relatime,attr2,inode64,noquota) proc on /proc/bus type proc (ro,relatime) proc on /proc/fs type proc (ro,relatime) proc on /proc/irq type proc (ro,relatime) proc on /proc/sys type proc (ro,relatime) proc on /proc/sysrq-trigger type proc (ro,relatime) tmpfs on /proc/asound type tmpfs (ro,relatime) tmpfs on /proc/acpi type tmpfs (ro,relatime) tmpfs on /proc/kcore type tmpfs (rw,nosuid,size=65536k,mode=755) tmpfs on /proc/keys type tmpfs (rw,nosuid,size=65536k,mode=755) tmpfs on /proc/timer_list type tmpfs (rw,nosuid,size=65536k,mode=755) tmpfs on /proc/timer_stats type tmpfs (rw,nosuid,size=65536k,mode=755) tmpfs on /proc/sched_debug type tmpfs (rw,nosuid,size=65536k,mode=755) tmpfs on /proc/scsi type tmpfs (ro,relatime) tmpfs on /sys/firmware type tmpfs (ro,relatime)
RUN 构建镜像时使用的命领
[root@master ~]# cat Dockerfile ARG VERSION=9.3 FROM debian:${VERSION} LABEL version="1.0.0-rc3" LABEL author="cx@github" date="2020-03-19" EXPOSE 22 808 ENV APP_VERSION=1.0.0 COPY index.html /data/web/html/ ADD http://nginx.org/download/nginx-1.17.9.tar.gz /usr/local/src ADD flink-1.10.0-src.tgz /data/flink WORKDIR /data VOLUME /data/mysql RUN cd /usr/local/src && tar -xf nginx-1.17.9.tar.gz && mv nginx-1.17.9 nginx [root@master ~]# docker build -t cx:0.v10 /root Sending build context to Docker daemon 408.8MB Step 1/12 : ARG VERSION=9.3 Step 2/12 : FROM debian:${VERSION} ---> 1b3ec9d977fb Step 3/12 : LABEL version="1.0.0-rc3" ---> Using cache ---> fa75eedc0b84 Step 4/12 : LABEL author="cx@github" date="2020-03-19" ---> Using cache ---> c837f32b47bd Step 5/12 : EXPOSE 22 808 ---> Using cache ---> a989df6b5cf3 Step 6/12 : ENV APP_VERSION=1.0.0 ---> Using cache ---> 7315ee41a9c9 Step 7/12 : COPY index.html /data/web/html/ ---> Using cache ---> 12163b0f561a Step 8/12 : ADD http://nginx.org/download/nginx-1.17.9.tar.gz /usr/local/src Downloading [==================================================>] 1.039MB/1.039MB ---> Using cache ---> 36b26842f945 Step 9/12 : ADD flink-1.10.0-src.tgz /data/flink ---> Using cache ---> 9cc7582a2bcb Step 10/12 : WORKDIR /data ---> Using cache ---> 08b2ca89e058 Step 11/12 : VOLUME /data/mysql ---> Using cache ---> abbb95cb28fa Step 12/12 : RUN cd /usr/local/src && tar -xf nginx-1.17.9.tar.gz && mv nginx-1.17.9 nginx ---> Running in d2080bb2a0c7 Removing intermediate container d2080bb2a0c7 ---> 71c43b165b47 Successfully built 71c43b165b47 Successfully tagged cx:0.v10 [root@master ~]# docker run --name ww -it --rm cx:0.v10 /bin/sh # ls /usr/local/src/nginx CHANGES CHANGES.ru LICENSE README auto conf configure contrib html man src
CMD 定义容器启动;类似于RUN指令,CMD指令也可用于运行任何命令或者应用程序,不过二者运行时间不同,RUN指令运行与镜像文件构造时,而CMD指令则是基于dockerfil指令构造出镜像启动容器时;CMD指令首要目的在于为启动容器指定默认要运行的程序,且运行结束,容器也就终止;不过CMD指令的命令可以被docker run 的命令行参数覆盖;在dockerfile中存在多个CMD指令,但仅最后一个生效
格式:CMD <command>或者 CMD ["<executale/bin/sh>","<param1-c>","<param2>"] 可以启动为ID 为1 进程 或者 CMD ["<param1>","<param2>"]
前两种语法格式的意义同RUN;第三种则用于ENTRYPOINT指令提供默认参数
[root@master image]# cat Dockerfile #ARG VERSION=9.3 FROM busybox LABEL version="1.0.0-rc3" LABEL author="cx@github" date="2020-03-19" ENV WEB_DOC_ROOT="data/web/html" RUN mkdir -p $WEB_DOC_ROOT && echo 'hijkjk' > ${WEB_DOC_ROOT}/index.html CMD /bin/httpd -f -h ${WEB_DOC_ROOT} [root@master image]# docker run --name web -it --rm cx:0.t1 [root@master image]# docker exec -it web /bin/sh / # ps PID USER TIME COMMAND 1 root 0:00 /bin/httpd -f -h data/web/html 6 root 0:00 /bin/sh 11 root 0:00 ps
编写nginx
[root@master image3]# cat nginx.sh #!/bin/sh cat > /etc/nginx/conf.d/www.conf << EOF { server_name $HOSTNAME; listen ${IP:-0.0.0.0}:${PORT:-80}; root ${NGX_DOC_ROOT:-/usr/share/nginx/html}; } EOF exec "$0" [root@master image3]# chmod +x nginx.sh [root@master image3]# cat Dockerfile FROM nginx:1.14-alpine ENV NGX_DOC_ROOT='/data/web/html/' ADD nginx.sh /bin/ CMD ["/usr/sbin/nginx","-g","daemon off;"] ENTRYPOINT ['/bin/nginx.sh'] [root@master image3]# docker build -t cx:0.t3 ./ Sending build context to Docker daemon 3.072kB Step 1/5 : FROM nginx:1.14-alpine 1.14-alpine: Pulling from library/nginx bdf0201b3a05: Pull complete 3d0a573c81ed: Pull complete 8129faeb2eb6: Pull complete 3dc99f571daf: Pull complete Digest: sha256:485b610fefec7ff6c463ced9623314a04ed67e3945b9c08d7e53a47f6d108dc7 Status: Downloaded newer image for nginx:1.14-alpine ---> 8a2fb25a19f5 Step 2/5 : ENV NGX_DOC_ROOT='/data/web/html/' ---> Running in 393a64ec4495 Removing intermediate container 393a64ec4495 ---> 12d2ce879743 Step 3/5 : ADD nginx.sh /bin/ ---> f18a559fceef Step 4/5 : CMD ["/usr/sbin/nginx","-g","daemon off;"] ---> Running in 8cc3a5e8c3dd Removing intermediate container 8cc3a5e8c3dd ---> 30b289008d9b Step 5/5 : ENTRYPOINT ['/bin/nginx.sh'] ---> Running in de582df13434 Removing intermediate container de582df13434 ---> ff6ecad9b21b Successfully built ff6ecad9b21b Successfully tagged cx:0.t3
USER指定运行容器时的用户名或者用户ID,RUN等指令会根据指定的用户身份;
格式:USER daemon;当服务不需要管理员权限时,可以通过该命令指定运行用户,并且可以在dockerfile中创建所需用户
HEALTHCHECK 容器健康状态监测
格式:HEALTHCHECK [OPTIONS] CMD command; 根据所执行的命令返回值是否为0来判断;
HEALTHCHECKNONE :禁止基础镜像中的健康检查
OPTION 支持的参数:-interval=DURATION(default:30s):过多久检查一次;-timeout=DURATION(default:50s)