Dockerfile

FROM

FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
# platform 指定镜像的系统架构,如linux/amd64、linux/arm64、windows/amd64,默认与构建镜像的平台一致

FROM 指令设置基础镜像,镜像在基础镜像上进行构建

# 在centos7.6.1810镜像基础上构建新镜像
FROM centos:7.6.1810

RUN

RUN <command>
RUN ["executable", "param1", "param2"]

RUN 命令执行命令并创建新的镜像层,通常用于安装软件包

# 打印hello
RUN echo hello
RUN ["/bin/bash", "-c", "echo hello"]
# 安装httpd并清除缓存
RUN set -eux; \
    yum -y update ; \
    yum install -y httpd ; \
    yum clean all

CMD

CMD 命令设置容器启动后默认执行的命令及其参数,但 CMD 设置的命令能够被docker run命令后面的命令行参数替换

每个 Dockerfile 中只能有一个 CMD,当指定多个时,只有最后一个起效

注意:

Docker 容器启动时,默认会把容器内部第一个进程,也就是pid=1的程序,作为 docker 容器是否正在运行的依据,如果 docker 容器 pid=1 的进程挂了,那么 docker 容器便会直接退出。

ENTRYPOINT

ENTRYPOINT 配置容器启动时的执行命令(不会被忽略,一定会被执行,即使运行 docker run时指定了其他命令)

每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效

LABEL

LABEL 指令为镜像添加元数据

EXPOSE

EXPOSE 指令暴露容器的端口

ENV

ENV 指令设置镜像构建过程中的环境变量

WORKDIR

WORKDIR 指令设置工作目录

ADD

ADD 指令拷贝本地资源或 url 资源到镜像,复制目录时,目录本身不会被复制,只是其内容被复制。本地资源为压缩包时,会解压文件,url 资源不会

COPY

COPY 指令拷贝本地资源到镜像,复制目录时,目录本身不会被复制,只是其内容被复制。

VOLUME

VOLUME 指令将宿主机本地目录挂载到镜像的指定目录,默认是本地/var/lib/docker/volumes/***

USER

USER 指令指定后续命令使用此用户进行,如 RUN、CMD 等。镜像构建完成后,通过 docker run 运行容器时,可以通过-u 参数来覆盖所指定的用户

ARG

ARG 指令定义一个变量,用户可以在docker build时,添加--build-arg <varname>=<value> 参数将变量传递给构建器

使用ENV指令定义的环境变量 始终会覆盖ARG指令的同名变量

ONBUILD

ONBUILD 是一个特殊的指令,它后面跟的是其它指令,比如 RUN, COPY 等,而这些指令,在当前镜像构建时并不会被执行。只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行

STOPSIGNAL

HEALTHCHECK

SHELL

最后更新于