关于DockerFile
dockerfile是一种能被docker程序解释的脚本,dockerfile由多条指令组成,每条指令对应Linux系统中不同的命令,基于dockerfile可以自定义创建生产环境所需的docker镜像,通过镜像可以启动所需的docker容器。
docker程序将这些docerfile指令翻译为真正的Linux命令,dockerfile有特定的书写格式和支持命令。
参数:
-
FROM < image >:< tag >:FROM指令标识指定一个基本的镜像源,或从公共库拉取一个镜像源,dockerfile文件第一行必须指定FROM基础镜像源。
-
MAINTAINER:设置dockerfile编写人或者维护者的信息
-
LABER < key >=< value >:设置标签,采用键值对的方式
-
RUN < command >:核心指令,表示运行的Linux指令,每条指令在当前基础镜像上执行,并且提交成为新的镜像
-
EXPOSE < port > [< port >/< protocol >]:用来指定docker容器中监听的端口,用于外界宿主机互联访问,启动docker时,可以通过-P(或者 -p HOST_PORT:CONTAINER_PORT),主机会自动分配一个端口号转发到指定的端口
注:该指令只是起声明作用,并不会自动完成端口映射 -
ENV < key >=< value >:设置环境变量,执行RUN指令及docker启动时被引用
-
WORKDIR /path/to/workdir:设置工作目录,执行RUN,ADD,COPY,ENV指令时的基础路径
注:可以使用多个WORKDIR指令,如果后续指令参数是相对路径,则会基于之前命令指定的路径。比如:1
2
3
4WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd最终路径为/a/b/c,但是最好还是使用绝对路径
-
COPY
和ADD :Linux系统复制和增加命令,ADD在和COPY相同的基础上,ADD允许 是一个URL,同时ADD的 是一个压缩格式文档, 将会解压复制 -
CMD和ENTRYPOINT:配置docker容器启动后执行的命令,每个dockerfile至少指定一个CMD命令或ENTERPOINT,两者都可以指定shell或exec函数调用的方式执行命令,默认dockerfile run启动镜像之后便会退出容器,需要一个长时间运行的命令,使得它一直运行。
-
CMD [“executable”,“param1”,“param2”]:运行一个可执行的文件并提供参数
-
CMD [“param1”,“param2”]:为ENTRYPOINT指定参数
-
CMD command param1 param2:以/bin/sh -c的方式执行命令
-
ENTRYPOINT [“executable”,“param1”,“param2”]:首选的执行格式
-
ENTRYPOINT command param1 param2:以/bin/sh -c的方式执行命令
关于两者:
-
每个dockerfile只能有一个CMD/ENTRYPOINT,超过一个CMD只有最后一个生效
-
dockerfile中同时设置CMD和ENTERPOINT,docker在build过程中会将CMD中指定的内容作为ENTERPOINT的参数
-
如果docker启动需要运行多个启动命令,彼此之间可以使用*&&*分开,最后一个命令必须为无限运行的命令,否则启动的容器最后会被退出
-
-
VOLUME [DIR]:设置本地挂载目录,用于存放数据库和需要保持的数据
-
USER daemon:指定docker运行时的用户名或UID,后续的RUN也会使用指定用户
-
ONBUILD [INSTRUCTION]:配置当前所创建的镜像作为其他新创建镜像的基础镜像时,所执行的操作指令,也就是说当我们创建一个基于这个镜像的子镜像时,会先执行ONBUILD的指令