github编辑

本章小结

相关信息如下表:

要点
说明

作用

设置后续指令的工作目录

语法

WORKDIR /path

自动创建

目录不存在会自动创建

持久性

影响后续所有指令,直到下次 WORKDIR

不要用

RUN cd /path (无效)

7.19.1 延伸阅读

要点
说明

作用

切换后续指令的执行用户

语法

USER usernameUSER UID:GID

前提

用户必须已存在

运行时覆盖

docker run -u

切换工具

使用 gosu,不用 su/sudo

7.19.2 延伸阅读

要点
说明

作用

检测容器应用是否真实可用

命令

HEALTHCHECK [选项] CMD command

状态

starting, healthy, unhealthy

Compose

支持 condition: service_healthy 依赖

注意

避免副作用,节省资源

7.19.3 延伸阅读

要点
说明

作用

定义在子镜像构建时执行的指令

语法

ONBUILD INSTRUCTION

适用

基础架构镜像 (Node, Python, Go 等)

限制

只继承一次,不可级联

规范

建议使用 -onbuild 标签后缀

7.19.4 延伸阅读

要点
说明

作用

添加 key-value 元数据

语法

LABEL k=v k=v ...

规范

推荐使用 OCI 标准标签

弃用

不要再使用 MAINTAINER

查看

docker inspect

7.19.5 延伸阅读

要点
说明

作用

更改 RUN/CMD/ENTRYPOINT 的默认 shell

Linux 默认

["/bin/sh", "-c"]

Windows 默认

["cmd", "/S", "/C"]

推荐用法

SHELL ["/bin/bash", "-o", "pipefail", "-c"]

影响范围

后续所有使用 shell 格式的指令

7.19.6 延伸阅读

要点
说明

作用

在新层执行命令

原则

合并命令,清理缓存

格式

Shell (常用) vs Exec

陷阱

cd 不持久,环境变量不持久

进阶

使用 Cache Mount 加速构建

7.19.7 延伸阅读

操作
示例

复制文件

COPY app.js /app/

复制多个文件

COPY *.json /app/

复制目录内容

COPY src/ /app/src/

修改所有者

COPY --chown=node:node . /app/

从构建阶段复制

COPY --from=builder /app/dist ./

7.19.8 延伸阅读

场景
推荐指令

复制普通文件

COPY

复制目录

COPY

自动解压 tar

ADD

从 URL 下载

RUN curl

保持 tar 不解压

COPY

7.19.9 延伸阅读

要点
说明

作用

指定容器启动时的默认命令

推荐格式

exec 格式 CMD ["程序", "参数"]

覆盖方式

docker run image 新命令

与 ENTRYPOINT

CMD 作为 ENTRYPOINT 的默认参数

核心原则

应用必须在前台运行

7.19.10 延伸阅读

ENTRYPOINT
CMD
适用场景

镜像作为固定命令使用

简单的默认命令

推荐:固定命令 + 可配置参数

7.19.11 延伸阅读

要点
说明

语法

ENV KEY=value

作用范围

构建时 + 运行时

覆盖方式

docker run -e KEY=value

与 ARG

ARG 仅构建时,ENV 持久化到运行时

安全

不要存储敏感信息

7.19.12 延伸阅读

要点
说明

作用

定义构建时变量

语法

ARG NAME=value

覆盖

docker build --build-arg NAME=value

作用域

FROM 之后需要重新声明

vs ENV

ARG 仅构建时,ENV 构建+运行时

安全

不要存储敏感信息

7.19.13 延伸阅读

要点
说明

作用

创建挂载点,标记为外部卷

语法

VOLUME /path

默认行为

自动创建匿名卷

覆盖方式

docker run -v name:/path

注意

VOLUME 之后的修改会丢失

7.19.14 延伸阅读

要点
说明

作用

声明容器提供服务的端口 (文档)

不会

自动映射端口或开放外部访问

配合

docker run -P 自动映射

外部访问

需要 -p 宿主机端口:容器端口

语法

EXPOSE 80EXPOSE 80/tcp

7.19.15 延伸阅读

最后更新于