Docker 镜像构建基础

概述

Dockerfile 是一个用来构建镜像的文本文件,Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。一般的,Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。。

官方文档:Dockerfile reference

Dockerfile 示例:Dockerfile example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# This dockerfile uses the ubuntu 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

# Maintainer: docker_user <docker_user at email.com> (@docker_user)
MAINTAINER docker_user docker_user@email.com

# Commands to update the image
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

# Commands when creating a new container
CMD /usr/sbin/nginx

Dockerfile 结构

Dockerfile 结构主要分为四部分:

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时执行指令(CMD/ENTERYPOINT)

注意:Dockerfile 中的指令是不区分大小写的,但是最好还是按照约定的大小写来写。每条指令可携带多个参数(不支持&&),支持使用以 # 开头的注释行。

常用 Dockerfile 指令

  • ARG — 定义创建镜像过程中使用的变量,唯一一个可以在 FROM 之前使用的指令。
  • FROM — 基于某个镜像,FROM 前只能有一个或者多个 ARG 指令。
  • MAINTAINER — 指定维护者信息。(已弃用)。
  • VOLUME — 创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等,可以在 docker run 时使用 -v 参数来挂载宿主机目录。
  • RUN — 在镜像中执行命令,可以执行多条命令,每条命令都会创建一个新的镜像层,并对镜像进行提交。
  • COPY — 将宿主机的文件复制到镜像中。
  • ADD — 将宿主机的文件复制到镜像中,支持 URL
  • ENV — 设置环境变量。
  • WORKDIR — 为后续的 RUNCMDENTRYPOINT 指令配置工作目录。
  • USER — 指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。。
  • EXPOSE — 暴露端口。
  • CMD — 容器启动时执行命令,只能有一个,如果有多个,只有最后一个生效。
  • ENTRYPOINT — 配置容器启动时执行的命令,ENTRYPOINT 会被 CMD 覆盖。
  • HEALTHCHECK — 检查容器健康状态。
  • ONBUILD — 配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。
  • LABEL — 为镜像添加元数据。