FROM

FROM 指令用于指定基础镜像。每个 Dockerfile 都必须以 FROM 开头,它定义了该镜像基于哪个现有的镜像。

FROM <image>[:<tag>]
FROM ubuntu:20.04

这个例子表示镜像基于 ubuntu 的 20.04 版本。

LABEL

LABEL 指令用于给镜像添加元数据。它们以键值对的形式存储,通常用于说明镜像信息或管理工具标记。

LABEL <key>=<value> <key>=<value> ...
LABEL maintainer="yourname@example.com"

RUN

RUN 指令用于在构建镜像时执行命令,通常用于安装软件包或配置系统。每次 RUN 都会创建一个新的镜像层

RUN <command>
RUN apt-get update && apt-get install -y python3

CMD

CMD 指令用于指定容器启动时要运行的命令或脚本。它可以在 docker run 时被覆盖

CMD ["executable", "param1", "param2"]
CMD ["python3", "app.py"]

ENTRYPOINT

ENTRYPOINTCMD 类似,但更适合作为容器的主命令,不能轻易被 docker run 覆盖。

ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT ["python3", "app.py"]

WORKDIR

WORKDIR 指令用于设置工作目录,后续的 RUNCMDENTRYPOINT 等指令都会在该目录下执行。

WORKDIR /path/to/directory
WORKDIR /usr/src/app

COPY

COPY 指令用于将文件或目录从本地文件系统复制到镜像中的指定路径。相对于 ADD 指令,COPY 更简单,不会自动解压文件。

COPY <src> <dest>
COPY . /usr/src/app

ADD

ADD 指令与 COPY 类似,但它还具备解压 tar 文件以及从 URL 复制文件的能力。

ADD <src> <dest>
ADD https://example.com/file.tar.gz /usr/src/app

EXPOSE

EXPOSE 指令用于声明容器在运行时监听的端口。这个声明不会自动开放端口,它只是一个标识,实际端口映射需要在 docker run 时通过 -p 参数指定。

EXPOSE <port>
EXPOSE 8080

ENV

ENV 指令用于设置环境变量。该变量将在容器的所有后续指令中可用。

ENV <key>=<value>
ENV NODE_ENV=production

VOLUME

VOLUME 指令用于在容器中创建一个挂载点。通过 VOLUME,你可以在容器运行时将本地目录或数据卷挂载到指定路径。

VOLUME ["/data"]
VOLUME ["/var/log/app"]

USER

USER 指令用于指定后续命令以哪个用户的身份执行。如果不指定,默认是 root 用户。

USER <username>
USER node

ARG

ARG 指令用于定义在构建时可传递的参数。与 ENV 不同,ARG 的作用范围仅限于构建时。

ARG <name>[=<default value>]
ARG VERSION=1.0
RUN echo "Building version $VERSION"

SHELL

SHELL 指令用于指定 RUN 命令执行的 shell。默认是 /bin/sh -c

SHELL ["executable", "parameters"]
SHELL ["/bin/bash", "-c"]

HEALTHCHECK

HEALTHCHECK 指令用于设置容器的健康检查。Docker 将定期执行指定的命令检查容器的健康状况。

HEALTHCHECK [OPTIONS] CMD <command>
HEALTHCHECK CMD curl --fail http://localhost:8080/health || exit 1

STOPSIGNAL

STOPSIGNAL 指令用于指定停止容器时发送给主进程的系统信号。默认是 SIGTERM

STOPSIGNAL signal
STOPSIGNAL SIGKILL

ONBUILD

ONBUILD 指令用于在生成基础镜像时定义触发器。这些指令不会在镜像构建时运行,但在基于该镜像创建新镜像时会触发执行。

ONBUILD <instruction>
ONBUILD RUN echo "This will run on child builds"

EXAMPLES

一个简单的 Node.js 应用的 Dockerfile 示例

# 使用官方的 Node.js 作为基础镜像
FROM node:14

# 创建应用目录
WORKDIR /usr/src/app

# 复制 package.json 和 package-lock.json
COPY package*.json ./

# 安装依赖
RUN npm install

# 复制应用代码
COPY . .

# 暴露应用端口
EXPOSE 8080

# 定义启动命令
CMD ["node", "app.js"]

这个 Dockerfile 使用 Node.js 官方镜像作为基础镜像,并包含应用目录的创建、依赖安装、应用代码复制和端口暴露等操作。

文章作者: 知行合一
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 知行合一
docker docker
喜欢就支持一下吧