一、什么是Dockerfile
Dockerfile
是为了快速的构建docker image
而设计的,当你使用docker命令的时候,docker会读取当前目录下的命名为Dockerfile(首字母大写)的纯文本文件并执行里面的指令构建出一个docker image。
Dockerfile由一行行的命令语句组成,并且支持以#开头的注释行。指令是不区分大小写的,但是通常我们都大写。
一般的,我们将Dockerfile分为四部分:
- 基础镜像信息
- 维护者信息
- 镜像操作指令
- 容器启动时执行指令
二、Dockerfile常用指令介绍
1、FROM
格式:FROM
或者FROM:
FROM必须是Dockerfile里的第一条指令(除注释外),后面跟有效的镜像名,如果在本地仓库没有该镜像,就会去远程仓库拉取。然后的指令在FROM的镜像中执行。
2、MAINTAINER
格式:MAINTAINER
指定维护者的信息。
3、RUN
格式:RUN
或RUN["", "", ""]
运行命令,命令较长时可以使用""换行。
4、CMD
格式:CMD ["","",""]
CMD指定容器启动时执行的命令,每个Dockerfile只能有一条CMD命令,如果指定了多条,只能最后一条会被执行。如果你在启动容器的时候也指定了命令,那么会覆盖Dockerfile构建的镜像里面的CMD命令。
5、ENTRYPOINT
格式:ENTRYPOINT ["","",""]
和CMD类似都是配置容器启动后执行的命令,并且不可被docker run提供的参数覆盖。每个Dockerfile文件中只能有一个ENTRYPOINT,当指定多个时,只有最后一个起效。ENTRYPOINT没有CMD的可替换特性,也就是你启动容器的时候增加运行的命令不会覆盖ENTRYPOINT指定的命令。
6、USER
格式:USER daemon
指定运行容器的用户名和UID,后续的RUN指令也会使用这里指定的用户。
7、EXPOSE
格式:EXPOSE [...]
设置Docker容器内部暴露的端口号,在启动容器时增加-p或-P参数做端口映射。
8、ENV
格式:ENV
设置环境变量,会被RUN命令使用,容器启动时这些环境变量都会被指定。
9、ADD
格式:ADD
复制指定的文件到容器的文件系统中。所有拷贝到container中的文件和文件夹权限为0755,uid和gid为0
如果文件是可识别的压缩格式,那么docker会自动解压。可以访问网络资源,类似wget
10、COPY
格式:COPY
复制命令,功能类似ADD,但是不会自动解压文件,也不能访问网络资源。
11、VOLUME
格式:VOLUME ["/mnt"]
将本地文件夹或者其他容器的文件夹挂载到容器当中,一般用来保存重要的数据。
12、WORKDIR
格式:WORKDIR /path/to/workdir
切换目录,为后续的RUN、CMD、ENTRYPOINT指令配置工作目录。可以多次切换(相当于cd命令),也可以使用多个WORKDIR指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。
13、ONBUILD
格式:ONBUILD [INSTRUCTION]
配置当前创建的镜像作为其它新创建的镜像的基础镜像时,所执行的操作指令。
参考文章:
http://k8s.unixhot.com/docker/docker-image.html#dockerfile1