Dockerfile是一个文本格式的配置文件,用于快速创建自定义的镜像。
Dockerfile由一行行命令组成,注释以#开头。
1. Dockerfile基本结构
一般新建一个空目录,在新建的空目录内部新建Dockerfile文件。
Dockerfile内容一般分为4部分: 基础镜像信息、维护者信息、镜像操作指令、容器启动时执行的命令。
Dockerfile书写举例:
#date :
#author:
#other
#此句必须是正文的第一句,表明使用的基础镜像, 可以使用多个FROM, 即使用多个镜像。
FROM centos:tag1
#描述作者和邮箱地址
MAINTAINER xiaoming <[email protected]>
#操作指令,此处新建一个文件
RUN touch /a.txt
#启动容器后运行nginx服务
CMD /usr/sbin/nginx
2. 指令简介
1) FROM
第一条指令,指定基础镜像,可以写多行FROM, 即使用多个基础镜像
2) MAINTAINER
描述镜像提供者信息
3) RUN
指定运行的命令
4) CMD
容器启动后执行的命令
每个Dockerfile中只有一条CMD指令,指定多条时只会执行最后一条,如在docker run时指定了容器起来后执行的命令则Dockerfile内指定的CMD指令会被覆盖,不再执行。
CMD三种形式:
(1) CMD ['execcutable', "参数1", “参数2”] #推荐使用此种方式
(2) CMD command pam1 pam2 #用于需要交互式的应用
(4) CMD ['参数1', “参数2”] #提供给ENTRYPOINT的默认参数
5) EXPOSE
指定容器暴露的端口
6) ENV
设置环境变量,供后续指令使用
7) ADD
复制文件到容器中, 可以是宿主机文件,也可以指定URL
8) COPY
复制宿主机文件到容器
9) ENTRYPOINT
指定容器启动后执行的命令,不可悲docker run提供的指令覆盖,一个Dockfile中指定多个ENTRYPINT时之后最后一个被执行。
10) VOLUME
创建一个可以挂载宿主机或者指定容器目录的挂载点, 一般用于存放数据库和需要保持的数据。
11) USER
指定运行容器的用户,后续run默认使用的就是此处指定的用户,切换到管理员推荐使用gosu,不推荐su
12) WORKDIR
指定容器启动后的工作目录,后续的指令可以以此目录作为当前目录设置路径
13) ONBUILD
在image1中使用ONBUILD, 容器起来后不会执行ONBUILD指定的命令,以image1为父镜像的子镜像对应的容器启动时image1对应的ONBUILD指令才会执行。
扩展: Dockerfile内每条指令执行后都会生成新的镜像并提交。