基本结构
Dockerfle 由 一行行命令语句组成, 并且支持以#开头的注释行。一般而言, Dockerfle 主体内容分为四部分:基础镜像信息、 维护者信息、 镜像操作指令和容器启动时执行指令。
# escape=\ (backslash)
# This dockerfile uses the ubuntu:xeniel image
# VERSION 2 - EDITION 1
# Author: docker_user
# Command format: Instruction [arguments / command]
# Base image to use, this must be set as the first line
FROM ubuntu:xeniel
# Maintainer: . docker_user <docker user at email.com> (@docker user)
LABEL maintainer docker user<docker user@email.com>
# Commands to update the image
RUN echo "deb http://archive.ubuntu.com/ubuntu/ xeniel main universe" >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaeron off;" >> /etc/nginx/nginx.conf
# Commands when creating a new container
CMD /usr/sbin/nginx
首行可以通过注释来指定解析器命令, 后续通过注释说明镜像的相关信息。 主体部分首先使用FROM指令指明所基于的镜像名称, 接下来一般是使用LABEL指令说明维护者信息。后面则是镜像操作指令, 例如RUN指令将对镜像执行跟随的命令。 每运行一条RUN指令,镜像添加新的一层, 并提交。 最后是CMD指令, 来指定运行容器时的操作命令。
指令说明
配置指令
ARG
定义创建镜像过程中使用的变量。格式为 ARG <name>[=<default value>]。在执行 docker build 时, 可以通过 -build-arg[=] 来为变量赋值。 当镜像编译成功后, ARG 指定的变量将不再存在 (ENV 指定的变量将在镜像中保留)。
Docker 内置了一些镜像创建变量, 用户可以直接使用而无须声明, 包括(不区分大小写) HTTP PROXY 、 HTTPS PROXY 、 FTP PROXY 、 NO PROXY。
FROM
指定所创建镜像的基础镜像。
格式为 FROM <image> [AS <name>] 或 FROM <image>:<tag> [AS <name>]或FROM <image>@<digest> [AS <name>] 。
任何 Dockerfile 中第一条指令必须为 FROM 指令。 并且, 如果在同 一个 Dockerfle 中创建多个镜像时, 可以使用多个 FROM 指令(每个镜像一次)。
为了保证镜像精简, 可以选用体积较小的镜像如 Alpine或Debian 作为基础镜像。 例如:
ARG VERSION=9.3
FROM debian:${VERSION}
LABEL
LABEL 指令可以为生成的镜像添加元数据标签信息。 这些信息可以用来辅助过滤出特定镜像。
格式为 LABEL <key>=<value> <key>=<value> <key>=<value> ...。
例如:
LAEL version="l.0.0-rc3"
LAEL author="yeasy@github"