Dockerfile 是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。
1. 对于开发人员:可以为开发团队提供一个完全一致的开发环境;
2. 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;
3. 对于运维人员:在部署时,可以实现应用的无缝移植。
命令 | 作用 |
FROM image_name:tag | 定义了使用哪个基础镜像启动构建流程 |
MAINTAINER user_name | 声明镜像的创建者或维护者信息 |
ENV key value | 设置环境变量(可以写多条) 格式为:ENV key value 例如:ENV JAVA_HOME /path/to/java |
RUN command | 是Dockerfile的核心部分(可以写多条) 格式:RUN <command> 在shell终端运行,使用这种格式,就像直接在命令行中输入命令一样。 RUN [“executable”,”param1”,”param2”] 使用exec 执行,这种方式类似于函数调用。该方式必须使用双引号,不能使用单引号,因为该方式会被转换成JSON数组 |
ADD source_dir/file dest_dir/file | 将宿主机的文件复制到容器内,如果是压缩文件,将会在复制后自动解压 |
COPY source_dir/file dest_dir/file | 和ADD相似,但是如果是压缩文件并不能解压 |
WORKDIR path_dir | 设置工作目录,也可说是切换目录指令,类似cd命令,写在该指令后的RUN,CMD以及ENTRYPOINT指令都将该目录作为当前目录,并执行相应命令 |
ARG 设置构建参数 | ARG指令用于设置构建参数,类似EVN,和ENV不同的是,ARG设置的是构建时的环境变量,在容器运行时是不会存在这些变量的 |
CMD 容器启动命令 | 用于为执行容器提供默认值。每个Dockerfile只有一个CMD命令,如果指定多个CMD命令,那么只有最后一条会被执行,如果启动容器时指定了运行的命令,则会覆盖CMD指定的命令。支持3种格式: CMD [“executable”,”param1”,”param2”] (推荐) CMD [“param1”,”param2”](为ENTYRPOINT指令提供预设参数) 实例:CMD echo “this is a test.” | wc - |
ENTRYPOINT入口点 | ENTRYPOIN和CMD命令的目的一样,都是指定docker容器启动时执行的命令,可以多次设置,但是只有最后一个有效 |
EXPOSE声明暴露的端口 | EXPOSE指令用于声明在运行时容器提供服务的端口,格式为: EXPOSE <port> [<port>...] 可以声明暴露多个端口 需要注意的是,这只是一个声明,运行时并不会因为该声明就打开相应的端口。该指令的作用主要是帮助镜像使用者理解该项服务的守护端口;其次是当运行时使用随机映射时,会自动映射EXPOSE的端口。 |