docker-4-Dockerfile配置⽂件详解
Dockerfile简单⼀点就是描述你这个镜像安装了哪些软件包,有哪些操作,创建了什么东西。有些⼈喜欢⽤ docker commit 命令去打包镜像,这样是不好的,⾸先commit出来的镜像⽐你使⽤Dockerfile构建出来的体积⼤,⽽且commit出来的镜像属于⿊盒镜像,除了制作者,谁都不知道你在⾥⾯⼲了什么,属于不安全的镜像,很少会有⼈使⽤,最后就是不便于你最终的管理和更新。所以推荐使⽤Dockerfile去管理你的镜像,下⾯将简单介绍Dockerfile常见的指令和注意事项:
注意:⼀⾏注释⼀⾏命令,不要乱注释,否则可能出现命令⽆效的情况,详情看dockerfile官⽅⽂档
⽂中加粗的是常⽤命令,⼀个命令可能有多种格式,注意!!
# escape=\
指定转译符,默认为\,可以使⽤任意符号
FROM
FROM <image>
FROM <image>:<tag>
FROM <image>:<digest>
FROM命令定义构建镜像的基础镜像,该条必须是dockerfile的⾸个命令。
对于官⽅没给出Dockerfile的软件想Docker化,那么引⽤的镜像⼀般是debian:jessie、alpine、ubuntu,如果官⽅已经有了,⽐如nginx、php、mysql这写,那么基本直接引⽤即可。
MAINTAINER
MAINTAINER <messages>
声明作者信息,可以放在⽂件任何位置,建议放在FROM后⾯
LABEL <key>=<value> <key>=<value> <key>=<value> ...
标签,将后⾯的元数据添加到镜像中,可以⽤docker inspect查看
RUN
RUN <commands>
RUN ["executable", "param1", "param2"] (exec form)
EXPOSE
EXPOSE <port>[<port>/<protocol>...]
容器暴露的端⼝(会直接绑定容器和docker宿主机的该端⼝,可以指定连接协议,默认为tcp协议)
CMD
CMD <commands>
容器启动时执⾏操作,如果⼀个Dockerfile中有多个CMD命令,那么只有最后⼀个CMD命令⽣效。CMD的指令可以在docker run的时候覆盖。
ENTRYPOINT
ENTRYPOINT
Dockerfile是⽤来构建镜像,⽽ENTRYPOINT则是⽤来启动镜像,它会将CMD作为参数传递进去运⾏。
启动时的默认命令,此命令设置不可被修改。如果⼀个Dockerfile中有多个ENTRYPOINT,那么只有最后⼀个⽣效。
详情请看和
eg:
ENTRYPOINT ["nginx"]
CMD ["-g","daemon off;"]
如上,如果执⾏ docker run -d --name nginx -P nginx 则最终容器内执⾏的命令是nginx -g daemon off; ,如果你执⾏的命令是 docker run -d --name nginx -P nginx bash 则最终容器内执⾏的命令是nginx bash 注意区别。
USER
USER <user>[:<group>]
USER <UID>[:<GID>]
指定docker构建,运⾏使⽤的⽤户,如果不设置,将使⽤root的⽤户和组来构建。前提是⽤户要存在。
WORKDIR /path/to/workdir
docker构建、复制、运⾏等的⼯作⽬录,⼀个dockerfile中可以指定多次,如果没有指定将会⾃动创建,默认/,如果使⽤相对路径,将在之前的路径下。
ENV
ENV <key> <value>
ENV <key>=<value> ...
设置docker镜像的环境变量,可以在构建镜像时使⽤,也可以在运⾏的容器中使⽤,使⽤键值对的形式,可以⼀次指定多个。
ADD
ADD <src>... <dest>
ADD ["<src>",... "<dest>"]
The ADD instruction copies new files, directories or remote file URLs from <src> and adds them to the filesystem of the image at the path <dest>.
这个命令将会把src(源)⽬录、⽂件、远程⽂件URL复制到镜像的⽂件系统中,存放⽬录为dest(⽬标)⽬录。如果src是压缩⽂件会帮你解压出来。
COPY
COPY <src>... <dest>
COPY ["<src>",... "<dest>"]
The COPY instruction copies new files or directories from <src> and adds them to the filesystem of the container at the path <dest>.
src只能是本地⽂件或⽬录,压缩⽂件不会解压。。。
VOLUME
VOLUME ["/data"]
卷,由于docker容器不能持久化存储数据,因此将会发⽣变化的数据使⽤卷来管理,卷分为宿主⽬录、数据卷、容器卷。
VOLUME命令会设置你的卷,在启动容器的时候Docker会在/var/lib/docker/的下⼀级⽬录下创建⼀个卷,以保存你在容器中产⽣的数据。若没有申明则不会创建。
eg:
VOLUME ["/data"]
VOLUME ["/data","/opt"]
WORKDIR
指定容器中的⼯作⽬录,可以在构建时使⽤,也可以在启动容器时使⽤,构建使⽤就是通过 WORKDIR 将当前⽬录切换到指定的⽬录中,容器中使⽤的意思则是在你使⽤ docker run 命令启动容器时,默认进⼊的⽬录是 WORKDIR 指定的,下⾯的example中我使⽤环境变量。eg:
WORKDIR /app
ARG
ARG <name>[=<default value>]docker打包镜像
变量,可以有值,也可以没有。可以在构建时使⽤--build-arg定义。详情请看
ONBUILD
ONBUILD [INSTRUCTION]
ONBUILD命令在容器中添加⼀个触发器,在将该镜像作为基础镜像构建其他镜像是触发。会在下个容器FROM⼀调⽤就执⾏。
STOPSIGNAL signal
停⽌信号
HEALTHCHECK [OPTIONS] CMD command
⽤于检测容器是否有效
SHELL ["executable", "parameters"]
使⽤命令的shell窗⼝来覆盖默认的shell窗⼝,应该就是⽤容器的shell窗⼝覆盖宿主机的shell窗⼝吧,没⽤过。
参考
原⽂地址:blog.51cto/13323775/2055561
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论