DockerFile构建镜像(三)

759 阅读4分钟

DockerFile是一个文本格式的配置文件,可以使用DockerFile快速的创建Docker镜像。

1.DockerFile基本组成

通常DockerFile的主要内容由四部分组成:基础镜像,维护者,镜像操作指令及容器启动执行指令,DockerFile由多行命令组成,且支持在每行开头使用#开头的注释行。

# This is a sample

# Base image to use, this must be set as the first line
FROM ubuntu:xeniel

# Maintainer info
LABEL maintainer docker_user<docker_user@email.com>

# Command 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 "\ndaemon off;" >> /etc/nginx/nginx.conf

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

通过在首行使用FROM指令可以指定基础镜像,使用LABEL指令描述维护者的信息。接下来是镜像的操作指令,使用RUN指令指定将对镜像执行跟随的命令,同时每运行一条RUN指令,镜像就会被封装一次,添加新的一层并提交。最后使用CMD指令指定容器创建时的操作命令。

2.DockerFile指令说明

DockerFile指令分为配置指令和操作指令,配置指令用于配置镜像信息,操作指令是具体执行的操作。

指令一般格式:INSTRUCTION arguments

2.1 配置指令

指令说明
ARG定义创建镜像过程中使用的变量
FROM指定基础镜像
LABEL添加元数据标签信息
EXPOSE声明镜像内服务监听端口
ENV指定环境变量
ENTRYPOINT指定镜像的默认入口命令
VOLUME创建一个数据卷挂载点
USER指定运行容器时的用户名或UID
WORKDIR配置工作目录
ONBUILD创建子镜像时指定自动执行的操作指令
STOPSIGNAL指定退出的信号值
HEALTHCHECK配置容器如何健康检查
SHELL指定默认shell类型
  • ARG

    定义创建镜像过程中使用的变量,当镜像编译成功后,ARG指定的变量将销毁

    格式:ARG [=]

    ARG VERSION=9.3
    FROM debian:${VERSION}
    
  • FROM

    指定基础镜像

    格式:FROM [: [AS ]]

    FROM debian:9.3
    
  • LABEL

    为生成的镜像添加元数据标签信息

    格式:LABEL = =

    LABEL version="0.0.1-beta"
    LABEL author="jeff" date="2020-11-18"
    
  • EXPOSE

    声明镜像内服务监听端口

    格式:EXPOSE

    EXPOSE 22
    
  • ENV

    指定环境变量,在镜像生成过程中会被后续RUN指令使用,且在容器中也会存在

    格式:ENV =

    ENV APP_VERSION=0.1.1-beta
    ENV APP_HOME=/usr/local/app
    
  • ENTRYPOINT

    指定镜像的默认入口命令,会在容器启动时作为跟命令执行,所有传入值都将作为该命令的参数。使用该指令时,CMD指令指定值将作为根命令的参数。每个DockerFile只会有一个ENTRYPOINT指令生效,当指定多个时只有最后一个生效。在容器启动时,可以使用--entrypoint参数覆盖

    格式:ENTRYPOINT ["executable", "param1", "param2"]或ENTRYPOINT command param1 param2

  • VOLUME

    创建一个数据卷挂载点

    格式:VOLUME ["/data"]

  • USER

    指定运行容器时的用户名或UID,后续的RUN指令也会使用指定的用户身份

    格式:USER

  • WORKDIR

    为后续RUN, CMD, ENTRYPOINT指令配置工作目录。为避免出错,推荐使用绝对路径

    格式:WORKDIR

    WORKDIR /a
    WORKDIR b
    WORKDIR c
    
    RUN pwd
    
    # path: /a/b/c
    
  • ONBUILD

    指定当基于已生成的父镜像创建子镜像时自动执行的操作指令,即在子镜像的DockerFile中执行相应的指令

    格式:ONBUILD [INSTRUCTION]

    ONBUILD ADD . /app/src
    ONBUILD RUN apt-get update && apt-get install -y nginx
    
  • STOPSIGNAL

    指定创建的容器接受退出的信号值

    格式:STOPSIGNAL

  • HEALTHCHECK

    配置容器如何健康检查,自Docker 1.12开始支持

    格式::

    ​ HEALTHCHECK [OPTIONS] CMD 根据执行命令返回值是否为0判断

    ​ HEALTHCHECK NONE 禁用健康检查

    OPTIONS支持的参数:

    ​ -interval=DURATION 健康检查时间间隔,默认30s

    ​ -timeout=DURATION 健康检查等待结果的超时,默认30s

    ​ -retries=N 失败重试次数,默认3次

  • SHELL

    指定默认shell类型

    格式:SHELL ["executable", parameters]

    默认:["/bin/sh", "-c"]

2.2 操作指令

指令说明
RUN对镜像运行跟随命令
CMD容器启动时默认执行的命令
ADD添加内容到镜像
COPY复制内容到镜像
  • RUN

    对镜像运行跟随命令,命令较长时可以使用\换行

    格式:RUN 或 RUN ["executable", "param1", "param2"]

    RUN apt-get update \
    	&& apt-get install -y nginx
    
  • CMD

    容器启动时默认执行的命令,每个DockerFile只会执行一条CMD指令,若指定了多条,则只有最后一条被执行

    格式:

    ​ CMD ["executable", "param1", "param2"] 推荐

    ​ CMD command param1 param2 在默认shell中执行

    ​ CMD ["param1", "param2"] 给ENTRYPOINT提供默认参数

  • ADD

    添加内容到镜像

    格式:ADD

    src可以是DockerFIle所在目录的相对路径,也可以是URL还可以是一个tar文件(会自动解压为目录),dest可以是镜像内绝对路径或相对WORKDIR的相对路径

  • COPY

    复制内容到镜像,功能同ADD指令,当使用本地目录为源目录时推荐使用COPY指令

    格式:COPY

3.镜像创建

完成DockerFile编写之后,可以通过使用docker build命令来创建镜像

docker build [OPTIONS]

OPTIONS选项:

​ -t 可重复使用为镜像添加标签

:上下文路径,打包该路径下的所有内容并上传供Docker引擎构建镜像使用