Dockerfile实际上就是一系列建立Docker镜像的脚本, 虽然能够经过命令行来执行, 可是那样繁琐并且容易出错.html
他的意思是在建立新的镜像时使用的基础镜像.python
他的意思是在容器中须要运行的命令, 它包括安装软件、建立文件和目录, 以及建立环境配置等.
nginx
Copy指令将文件或者目录复制到容器的文件系统, 文件和目录需位于相对于Dockerfile的路径中.redis
Add指令与Copy指令很是相似,但它包含更多功能。除了将文件从主机复制到容器映像,Add指令还可使用URL规范从远程位置复制文件。docker
Workdir指定的功能至关于使用cd切换工做目录.npm
配置容器启动后执行的命令,而且不可被docker run提供的参数覆盖。每一个Dockerfile中只能有一个Entrypoint,当指定多个时,只有最后一个有效。bash
ENV命令用于设置环境变量。这些变量以”key=value”的形式存在,并能够在容器内被脚本或者程序调用。这个机制给在容器中运行应用带来了极大的便利。app
Cmd指令用于设置部署容器映像的实例时要运行的默认命令。若是 Dockerfile中指定了多个Cmd指令,只会计算最后一个指令。也可使用以下命令行在启动时重载:优化
docker run [$image] [$other_command]
Expose用来指定端口,使容器内的应用能够经过端口和外界交互。spa
经过上述咱们能够看到RUN、ENTRYPOINT和CMD都是执行命令, 可是其实他们是有区别的.
执行的时间点不一样, 做用也不一样, 按顺序以下:
在许多状况下, Dockerfile指令须要跨多个行;这可经过转义字符完成。 默认Dockerfile转义字符是反斜杠"". 因为反斜杠在Windows中也是一个文件路径分隔符,这可能致使出现问题。
因此在Windows下能够修改转义字符, 方法是Dockerfile的第一行放置以下转义分析程序指令:
# escape=`
注意,只有两个值可用做转义字符: 和 ` 。
大体总结优化规则以下: