Docker 为我们提供了 Dockerfile 来解决自动化的问题。我们将介绍什么是 Dockerfile,它能够做到的事情以及 Dockerfile 的一些基本语法。
Dockerfile 包含创建镜像所需要的全部指令。基于在 Dockerfile 中的指令,我们可以使用 Docker build
命令来创建镜像。通过减少镜像和容器的创建过程来简化部署。
Dockerfile 支持支持的语法命令如下:
INSTRUCTION argument
指令不区分大小写。但是,命名约定为全部大写。
所有 Dockerfile 都必须以 FROM
命令开始。FROM
命令会指定镜像基于哪个基础镜像创建,接下来的命令也会基于这个基础镜像(注:CentOS 和 Ubuntu 有些命令可是不一样的)。FROM
命令可以多次使用,表示会创建多个镜像。具体语法如下:
FROM <image name>
例如:
FROM ubuntu
上面的指定告诉我们,新的镜像将基于 Ubuntu 的镜像来构建。
继 FROM
命令,DockefFile 还提供了一些其它的命令以实现自动化。在文本文件或 Dockerfile 文件中这些命令的顺序就是它们被执行的顺序。
让我们了解一下这些有趣的 Dockerfile 命令吧。
MAINTAINER <author name>
RUN
指令会在新创建的镜像上添加新的层面,接下来提交的结果用在Dockerfile的下一条指令中。语法如下:RUN <command>
ADD <source> <destination>
CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2
EXPOSE <port>;
CMD
,Docker只允许一个ENTRYPOINT,多个ENTRYPOINT会抵消之前所有的指令,只执行最后的ENTRYPOINT指令。语法如下:ENTRYPOINT ["executable", "param1","param2"]
ENTRYPOINT command param1 param2
RUN
、CMD
与ENTRYPOINT
命令的工作目录。语法如下:WORKDIR /path/to/workdir
ENV <key> <value>
USER <uid>
VOLUME ["/data"]
我们推荐 Flux7 的 Docker 入门教程,国内社区已有翻译,建议大家阅读学习。
本文及上述推荐文章的译者是田浩浩,他是悉尼大学(USYD)硕士研究生,目前在珠海从事 Android 应用开发工作。业余时间专注 Docker 的学习与研究。田浩浩已授权 DaoCloud 使用这些内容。