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
原文:https://www.cnblogs.com/rdchenxi/p/12539161.html