目录
Dockerfile 基本结构
Dockerfile 由一行行命令语句组成,并且支持以 #
开头的注释行。Dockerfile 的内容分为四个部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。例如:
# This dockerfile uses the Ubuntu image
# VERSION 1.0
# Author: wangtingyun
# Command format: Instruction [arguments / command] …
# 第一行必须指定基于的容器镜像
FROM ubuntu
# 维护者信息
MAINTAINER wangtingyun wangtingyun@email.com
# 镜像的操作指令
RUN echo “deb http://archive.ubuntu.com/ubuntu/ raring main universe” >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo “\ndaemon off;” >> /etc/nginx/nginx.conf
# 容器启动时执行指令
CMD /usr/sbin/nginx
其中:
- 一开始必须指明所基于的镜像名称,接下来一般会说明维护者的信息;
- 后面则是镜像操作指令,例如 RUN 指令,RUN 指令将对镜像执行跟随的命令,而每运行一条 RUN 指令,镜像添加新的一层,并提交;
- 最后是 CMD 指令,来指定运行容器时的操作命令。
Dockerfile 指令
FROM
功能: 指定一个镜像作为构建自定义镜像的基础镜像,构建的镜像在这个基础镜像之上进行修改定制。
指令格式:
FROM <image>:<tag>
这个指令是 Dockerfile 中的必备指令,同时也必须是第一条指令,如果在同一个 Dockerfile 中创建多个镜像时,可以使用多个 FROM 指令。
MAINTAINER
功能: 指定维护者信息。
格式为:
MAINTAINER <name>
注意: MAINTAINER 已经被抛弃了,建议使用 LABEL 指令。
LABEL
功能: 为镜像添加元数据标签,一个 LABEL 就是一个键值对。
格式如下:
LABEL <key>=<balue> <key>=<balue> ...
示例如下:
LABEL maintainer="wangtingyun@email.com"
LABEL version="1.0"
可以给镜像添加多个 LABEL,需要注意的是:每条 LABEL 指令都会生成一个新的层。所以最好是把添加的多个 LABEL 合并为一条命令:
# 写在一行,多个键值对使用空格隔开
LABEL maintainer="wangtingyun@email.com" version="1.0"
# 使用换行符
LABEL maintainer="wangtingyun@email.com" \
version="1.0"
注意: 如果新添加的 LABEL 和已有的 LABEL 同名,则新值会覆盖掉旧值。
ENV
功能: 设置或定义环境变量,定义的环境变量可以在后续的指令中通过 $
进行使用。