mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-11 04:14:38 +00:00
style(docs): standardize heading formats and numbering
- Enforce Level 1-3 structural numbering based on SUMMARY.md hierarchy - Remove structural numbering from Level 4+ headings - Eliminate single child headings by converting to bold text - Auto-inject summary text for headings with multiple children missing intro text - Exclude Appendix chapters from structural numbering - Avoid modifying code block contents - Add script to detect non-standard English usage in headers
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
### 基本语法
|
||||
### 7.10.1 基本语法
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -14,7 +14,7 @@ WORKDIR <工作目录路径>
|
||||
|
||||
---
|
||||
|
||||
### 基本用法
|
||||
### 7.10.2 基本用法
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -28,7 +28,7 @@ COPY . . # 复制到 /app/
|
||||
|
||||
---
|
||||
|
||||
### 为什么需要 WORKDIR
|
||||
### 7.10.3 为什么需要 WORKDIR
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -73,7 +73,7 @@ RUN echo "hello" > world.txt # 创建 /app/world.txt
|
||||
|
||||
---
|
||||
|
||||
### 相对路径
|
||||
### 7.10.4 相对路径
|
||||
|
||||
WORKDIR 支持相对路径,基于上一个 WORKDIR:
|
||||
|
||||
@@ -87,7 +87,7 @@ RUN pwd # 输出 /a/b/c
|
||||
|
||||
---
|
||||
|
||||
### 使用环境变量
|
||||
### 7.10.5 使用环境变量
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -100,7 +100,7 @@ RUN pwd # 输出 /app
|
||||
|
||||
---
|
||||
|
||||
### 多阶段构建中的 WORKDIR
|
||||
### 7.10.6 多阶段构建中的 WORKDIR
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -123,7 +123,7 @@ COPY --from=builder /build/dist .
|
||||
|
||||
---
|
||||
|
||||
### 最佳实践
|
||||
### 7.10.7 最佳实践
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -186,7 +186,7 @@ WORKDIR /data
|
||||
|
||||
---
|
||||
|
||||
### 与其他指令的关系
|
||||
### 7.10.8 与其他指令的关系
|
||||
|
||||
相关信息如下表:
|
||||
|
||||
@@ -208,7 +208,7 @@ CMD ["./start.sh"] # /app/start.sh
|
||||
|
||||
---
|
||||
|
||||
### 运行时覆盖
|
||||
### 7.10.9 运行时覆盖
|
||||
|
||||
使用 `-w` 参数覆盖工作目录:
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
### 基本语法
|
||||
### 7.11.1 基本语法
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -15,7 +15,7 @@ USER <UID>[:<GID>]
|
||||
|
||||
---
|
||||
|
||||
### 为什么要使用 USER
|
||||
### 7.11.2 为什么要使用 USER
|
||||
|
||||
> 笔者强调:以非 root 用户运行容器是最重要的安全实践之一。
|
||||
|
||||
@@ -36,7 +36,7 @@ flowchart LR
|
||||
|
||||
---
|
||||
|
||||
### 基本用法
|
||||
### 7.11.3 基本用法
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -78,7 +78,7 @@ USER 1001:1001
|
||||
|
||||
---
|
||||
|
||||
### 用户必须已存在
|
||||
### 7.11.4 用户必须已存在
|
||||
|
||||
`USER` 指令只能切换到 **已存在** 的用户:
|
||||
|
||||
@@ -124,7 +124,7 @@ RUN addgroup -g 1001 -S appgroup && \
|
||||
|
||||
---
|
||||
|
||||
### 运行时切换用户
|
||||
### 7.11.5 运行时切换用户
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -176,7 +176,7 @@ exec gosu redis "$@"
|
||||
|
||||
---
|
||||
|
||||
### 运行时覆盖用户
|
||||
### 7.11.6 运行时覆盖用户
|
||||
|
||||
使用 `-u` 或 `--user` 参数:
|
||||
|
||||
@@ -192,7 +192,7 @@ $ docker run -u root myimage
|
||||
|
||||
---
|
||||
|
||||
### 文件权限处理
|
||||
### 7.11.7 文件权限处理
|
||||
|
||||
切换用户后,确保应用有权访问文件:
|
||||
|
||||
@@ -221,7 +221,7 @@ CMD ["node", "server.js"]
|
||||
|
||||
---
|
||||
|
||||
### 最佳实践
|
||||
### 7.11.8 最佳实践
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -277,7 +277,7 @@ CMD ["node", "server.js"]
|
||||
|
||||
---
|
||||
|
||||
### 常见问题
|
||||
### 7.11.9 常见问题
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
### 基本语法
|
||||
### 7.12.1 基本语法
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -15,7 +15,7 @@ HEALTHCHECK NONE
|
||||
|
||||
---
|
||||
|
||||
### 为什么需要 HEALTHCHECK
|
||||
### 7.12.2 为什么需要 HEALTHCHECK
|
||||
|
||||
在没有 HEALTHCHECK 之前,Docker 只能通过 **进程退出码** 来判断容器状态。**问题场景**:
|
||||
|
||||
@@ -35,7 +35,7 @@ Starting ──成功──> Healthy ──失败N次──> Unhealthy
|
||||
|
||||
---
|
||||
|
||||
### 基本用法
|
||||
### 7.12.3 基本用法
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -70,7 +70,7 @@ HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
|
||||
|
||||
---
|
||||
|
||||
### 屏蔽健康检查
|
||||
### 7.12.4 屏蔽健康检查
|
||||
|
||||
如果基础镜像定义了 HEALTHCHECK,但你不想使用它:
|
||||
|
||||
@@ -81,7 +81,7 @@ HEALTHCHECK NONE
|
||||
|
||||
---
|
||||
|
||||
### 常见检查脚本
|
||||
### 7.12.5 常见检查脚本
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -124,7 +124,7 @@ HEALTHCHECK CMD ["healthcheck.sh"]
|
||||
|
||||
---
|
||||
|
||||
### 在 Compose 中使用
|
||||
### 7.12.6 在 Compose 中使用
|
||||
|
||||
可以在 `compose.yaml` (或 `docker-compose.yml`) 中覆盖或定义健康检查:
|
||||
|
||||
@@ -156,7 +156,7 @@ services:
|
||||
|
||||
---
|
||||
|
||||
### 查看健康状态
|
||||
### 7.12.7 查看健康状态
|
||||
|
||||
运行以下命令:
|
||||
|
||||
@@ -187,7 +187,7 @@ $ docker inspect --format '{{json .State.Health}}' mycontainer | jq
|
||||
|
||||
---
|
||||
|
||||
### 最佳实践
|
||||
### 7.12.8 最佳实践
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
### 基本语法
|
||||
### 7.13.1 基本语法
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -14,7 +14,7 @@ ONBUILD <其它指令>
|
||||
|
||||
---
|
||||
|
||||
### 为什么需要 ONBUILD
|
||||
### 7.13.2 为什么需要 ONBUILD
|
||||
|
||||
`ONBUILD` 主要用于制作 **语言栈基础镜像** 或 **框架基础镜像**。
|
||||
|
||||
@@ -60,7 +60,7 @@ FROM my-node-base
|
||||
|
||||
---
|
||||
|
||||
### 执行机制
|
||||
### 7.13.3 执行机制
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -75,7 +75,7 @@ FROM 基础镜像 ──build──> 读取基础镜像触发器 ──> 执行
|
||||
|
||||
---
|
||||
|
||||
### 常见使用场景
|
||||
### 7.13.4 常见使用场景
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -113,7 +113,7 @@ ONBUILD COPY dist/ /usr/share/nginx/html/
|
||||
|
||||
---
|
||||
|
||||
### 注意事项
|
||||
### 7.13.5 注意事项
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -139,7 +139,7 @@ ONBUILD COPY dist/ /usr/share/nginx/html/
|
||||
|
||||
---
|
||||
|
||||
### 最佳实践
|
||||
### 7.13.6 最佳实践
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
### 基本语法
|
||||
### 7.14.1 基本语法
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -14,7 +14,7 @@ LABEL <key>=<value> <key>=<value> ...
|
||||
|
||||
---
|
||||
|
||||
### 为什么需要 LABEL
|
||||
### 7.14.2 为什么需要 LABEL
|
||||
|
||||
1. **版本管理**:记录版本号、构建时间、Git Commit ID
|
||||
2. **联系信息**:维护者邮箱、文档地址、支持渠道
|
||||
@@ -23,7 +23,7 @@ LABEL <key>=<value> <key>=<value> ...
|
||||
|
||||
---
|
||||
|
||||
### 基本用法
|
||||
### 7.14.3 基本用法
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -51,7 +51,7 @@ LABEL maintainer="user@example.com" \
|
||||
|
||||
---
|
||||
|
||||
### 常用标签规范
|
||||
### 7.14.4 常用标签规范
|
||||
|
||||
为了标准和互操作性,推荐使用 [OCI Image Format Specification](https://github.com/opencontainers/image-spec/blob/main/annotations.md#pre-defined-annotation-keys) 定义的标准标签:
|
||||
|
||||
@@ -84,7 +84,7 @@ LABEL org.opencontainers.image.authors="yeasy" \
|
||||
|
||||
---
|
||||
|
||||
### MAINTAINER 指令 (已废弃)
|
||||
### 7.14.5 MAINTAINER 指令 (已废弃)
|
||||
|
||||
旧版本的 Dockerfile 中常看到 `MAINTAINER` 指令:
|
||||
|
||||
@@ -107,7 +107,7 @@ LABEL org.opencontainers.image.authors="user@example.com"
|
||||
|
||||
---
|
||||
|
||||
### 动态标签
|
||||
### 7.14.6 动态标签
|
||||
|
||||
配合 `ARG` 使用,可以在构建时动态注入标签:
|
||||
|
||||
@@ -130,7 +130,7 @@ $ docker build \
|
||||
|
||||
---
|
||||
|
||||
### 查看标签
|
||||
### 7.14.7 查看标签
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
### 基本语法
|
||||
### 7.15.1 基本语法
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -19,7 +19,7 @@ SHELL ["executable", "parameters"]
|
||||
|
||||
---
|
||||
|
||||
### 为什么要用 SHELL 指令
|
||||
### 7.15.2 为什么要用 SHELL 指令
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -84,7 +84,7 @@ SHELL ["cmd", "/S", "/C"]
|
||||
|
||||
---
|
||||
|
||||
### 作用范围
|
||||
### 7.15.3 作用范围
|
||||
|
||||
`SHELL` 指令可以出现多次,每次只影响其后的指令:
|
||||
|
||||
@@ -108,7 +108,7 @@ RUN echo "Using sh again"
|
||||
|
||||
---
|
||||
|
||||
### 对其他指令的影响
|
||||
### 7.15.4 对其他指令的影响
|
||||
|
||||
`SHELL` 影响的是所有使用 **shell 格式** 的指令:
|
||||
|
||||
@@ -123,7 +123,7 @@ RUN echo "Using sh again"
|
||||
|
||||
---
|
||||
|
||||
### 最佳实践
|
||||
### 7.15.5 最佳实践
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
在 Docker 17.05 版本之前,我们构建 Docker 镜像时,通常会采用两种方式:
|
||||
|
||||
### 全部放入一个 Dockerfile
|
||||
### 7.17.1 全部放入一个 Dockerfile
|
||||
|
||||
一种方式是将所有的构建过程包含在一个 `Dockerfile` 中,包括项目及其依赖库的编译、测试、打包等流程,这里可能会带来的一些问题:
|
||||
|
||||
@@ -49,7 +49,7 @@ CMD ["./app"]
|
||||
$ docker build -t go/helloworld:1 -f Dockerfile.one .
|
||||
```
|
||||
|
||||
### 分散到多个 Dockerfile
|
||||
### 7.17.2 分散到多个 Dockerfile
|
||||
|
||||
另一种方式,就是我们事先在一个 `Dockerfile` 将项目及其依赖库编译测试打包好后,再将其拷贝到运行环境中,这种方式需要我们编写两个 `Dockerfile` 和一些编译脚本才能将其两个阶段自动整合起来,这种方式虽然可以很好地规避第一种方式存在的风险,但明显部署过程较复杂。
|
||||
|
||||
@@ -118,7 +118,7 @@ go/helloworld 2 f7cf3465432c 22 seconds ago 6.47MB
|
||||
go/helloworld 1 f55d3e16affc 2 minutes ago 295MB
|
||||
```
|
||||
|
||||
## 使用多阶段构建
|
||||
## 7.17 使用多阶段构建
|
||||
|
||||
为解决以上问题,Docker v17.05 开始支持多阶段构建 (`multistage builds`)。使用多阶段构建我们就可以很容易解决前面提到的问题,并且只需要编写一个 `Dockerfile`:
|
||||
|
||||
@@ -167,7 +167,7 @@ go/helloworld 1 f55d3e16affc 2 minutes ago 295MB
|
||||
|
||||
很明显使用多阶段构建的镜像体积小,同时也完美解决了上边提到的问题。
|
||||
|
||||
### 只构建某一阶段的镜像
|
||||
### 7.17.1 只构建某一阶段的镜像
|
||||
|
||||
我们可以使用 `as` 来为某一阶段命名,例如
|
||||
|
||||
@@ -181,7 +181,7 @@ FROM golang:alpine as builder
|
||||
$ docker build --target builder -t username/imagename:tag .
|
||||
```
|
||||
|
||||
### 构建时从其他镜像复制文件
|
||||
### 7.17.2 构建时从其他镜像复制文件
|
||||
|
||||
上面例子中我们使用 `COPY --from=0 /go/src/github.com/go/helloworld/app .` 从上一阶段的镜像中复制文件,我们也可以复制任意镜像中的文件。
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
> 本节适用于 PHP 开发者阅读。`Laravel` 基于 8.x 版本,各个版本的文件结构可能会有差异,请根据实际自行修改。
|
||||
|
||||
### 准备
|
||||
### 7.18.1 准备
|
||||
|
||||
新建一个 `Laravel` 项目或在已有的 `Laravel` 项目根目录下新建 `Dockerfile` `.dockerignore` `laravel.conf` 文件。
|
||||
|
||||
@@ -56,7 +56,7 @@ server {
|
||||
}
|
||||
```
|
||||
|
||||
### 前端构建
|
||||
### 7.18.2 前端构建
|
||||
|
||||
第一阶段进行前端构建。
|
||||
|
||||
@@ -77,7 +77,7 @@ RUN set -x ; cd /app \
|
||||
&& npm run production
|
||||
```
|
||||
|
||||
### 安装 Composer 依赖
|
||||
### 7.18.3 安装 Composer 依赖
|
||||
|
||||
第二阶段安装 Composer 依赖。
|
||||
|
||||
@@ -97,7 +97,7 @@ RUN set -x ; cd /app \
|
||||
--prefer-dist
|
||||
```
|
||||
|
||||
### 整合以上阶段所生成的文件
|
||||
### 7.18.4 整合以上阶段所生成的文件
|
||||
|
||||
第三阶段对以上阶段生成的文件进行整合。
|
||||
|
||||
@@ -123,7 +123,7 @@ RUN set -x ; cd ${LARAVEL_PATH} \
|
||||
&& php artisan package:discover
|
||||
```
|
||||
|
||||
### 最后一个阶段构建 NGINX 镜像
|
||||
### 7.18.5 最后一个阶段构建 NGINX 镜像
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -136,7 +136,7 @@ COPY laravel.conf /etc/nginx/conf.d/
|
||||
COPY --from=laravel ${LARAVEL_PATH}/public ${LARAVEL_PATH}/public
|
||||
```
|
||||
|
||||
### 构建 Laravel 及 Nginx 镜像
|
||||
### 7.18.6 构建 Laravel 及 Nginx 镜像
|
||||
|
||||
使用 `docker build` 命令构建镜像。
|
||||
|
||||
@@ -146,7 +146,7 @@ $ docker build -t my/laravel --target=laravel .
|
||||
$ docker build -t my/nginx --target=nginx .
|
||||
```
|
||||
|
||||
### 启动容器并测试
|
||||
### 7.18.7 启动容器并测试
|
||||
|
||||
新建 Docker 网络
|
||||
|
||||
@@ -170,13 +170,13 @@ $ docker run -dit --rm --network=laravel -p 8080:80 my/nginx
|
||||
|
||||
> 也许 Laravel 项目依赖其他外部服务,例如 redis、MySQL,请自行启动这些服务之后再进行测试,本小节不再赘述。
|
||||
|
||||
### 生产环境优化
|
||||
### 7.18.8 生产环境优化
|
||||
|
||||
本小节内容为了方便测试,将配置文件直接放到了镜像中,实际在使用时 **建议** 将配置文件作为 `config` 或 `secret` 挂载到容器中,请读者自行学习 `Kubernetes` 的相关内容。
|
||||
|
||||
由于篇幅所限本小节只是简单列出,更多内容可以参考 https://github.com/khs1994-docker/laravel-demo 项目。
|
||||
|
||||
### 附录
|
||||
### 7.18.9 附录
|
||||
|
||||
完整的 `Dockerfile` 文件如下。
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
### 基本语法
|
||||
### 7.1.1 基本语法
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -15,7 +15,7 @@ RUN ["executable", "param1", "param2"]
|
||||
|
||||
---
|
||||
|
||||
### 两种格式对比
|
||||
### 7.1.2 两种格式对比
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -48,7 +48,7 @@ RUN ["apt-get", "update"]
|
||||
|
||||
---
|
||||
|
||||
### 常见最佳实践
|
||||
### 7.1.3 常见最佳实践
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -108,7 +108,7 @@ RUN wget http://url | gzip -d > file
|
||||
|
||||
---
|
||||
|
||||
### 常见问题
|
||||
### 7.1.4 常见问题
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -146,7 +146,7 @@ RUN echo $MY_VAR
|
||||
|
||||
---
|
||||
|
||||
### 高级技巧
|
||||
### 7.1.5 高级技巧
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
### 基本语法
|
||||
### 7.2.1 基本语法
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -15,7 +15,7 @@ COPY [选项] ["<源路径1>", "<源路径2>", ... "<目标路径>"]
|
||||
|
||||
---
|
||||
|
||||
### 基本用法
|
||||
### 7.2.2 基本用法
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -69,7 +69,7 @@ src/ /app/src/
|
||||
|
||||
---
|
||||
|
||||
### 通配符规则
|
||||
### 7.2.3 通配符规则
|
||||
|
||||
COPY 支持 Go 的 `filepath.Match` 通配符规则:
|
||||
|
||||
@@ -88,7 +88,7 @@ COPY app[0-9].js /app/ # app0.js ~ app9.js
|
||||
|
||||
---
|
||||
|
||||
### 目标路径
|
||||
### 7.2.4 目标路径
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -122,7 +122,7 @@ COPY settings.json /app/config/
|
||||
|
||||
---
|
||||
|
||||
### 修改文件所有者
|
||||
### 7.2.5 修改文件所有者
|
||||
|
||||
使用 `--chown` 选项设置文件的用户和组:
|
||||
|
||||
@@ -144,7 +144,7 @@ COPY --chown=node . /app/
|
||||
|
||||
---
|
||||
|
||||
### 保留文件元数据
|
||||
### 7.2.6 保留文件元数据
|
||||
|
||||
COPY 会保留源文件的元数据:
|
||||
|
||||
@@ -161,7 +161,7 @@ COPY start.sh /app/
|
||||
|
||||
---
|
||||
|
||||
### COPY vs ADD
|
||||
### 7.2.7 COPY vs ADD
|
||||
|
||||
相关信息如下表:
|
||||
|
||||
@@ -187,7 +187,7 @@ ADD app.tar.gz /app/
|
||||
|
||||
---
|
||||
|
||||
### 多阶段构建中的 COPY
|
||||
### 7.2.8 多阶段构建中的 COPY
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -229,7 +229,7 @@ COPY --link --from=builder /app/dist /usr/share/nginx/html
|
||||
|
||||
---
|
||||
|
||||
### .dockerignore
|
||||
### 7.2.9 dockerignore
|
||||
|
||||
使用 `.dockerignore` 排除不需要复制的文件:
|
||||
|
||||
@@ -252,7 +252,7 @@ Dockerfile
|
||||
|
||||
---
|
||||
|
||||
### 最佳实践
|
||||
### 7.2.10 最佳实践
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
### 基本语法
|
||||
### 7.3.1 基本语法
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -18,7 +18,7 @@ ADD [选项] ["<源路径>", ... "<目标路径>"]
|
||||
|
||||
---
|
||||
|
||||
### ADD vs COPY
|
||||
### 7.3.2 ADD vs COPY
|
||||
|
||||
相关信息如下表:
|
||||
|
||||
@@ -34,7 +34,7 @@ ADD [选项] ["<源路径>", ... "<目标路径>"]
|
||||
|
||||
---
|
||||
|
||||
### 自动解压功能
|
||||
### 7.3.3 自动解压功能
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -83,7 +83,7 @@ app.tar.gz 包含: /app/ 目录结果:
|
||||
|
||||
---
|
||||
|
||||
### URL 下载功能 (不推荐)
|
||||
### 7.3.4 URL 下载功能 (不推荐)
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -131,7 +131,7 @@ RUN curl -fsSL https://example.com/app.tar.gz | tar -xz -C /app
|
||||
|
||||
---
|
||||
|
||||
### 修改文件所有者
|
||||
### 7.3.5 修改文件所有者
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -142,7 +142,7 @@ ADD --chown=1000:1000 files/ /app/
|
||||
|
||||
---
|
||||
|
||||
### 何时使用 ADD
|
||||
### 7.3.6 何时使用 ADD
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -184,7 +184,7 @@ COPY archive.tar.gz /archives/ # ✅ 保持原样
|
||||
|
||||
---
|
||||
|
||||
### 缓存行为
|
||||
### 7.3.7 缓存行为
|
||||
|
||||
ADD 可能导致构建缓存失效:
|
||||
|
||||
@@ -210,7 +210,7 @@ ADD app.tar.gz /app/
|
||||
|
||||
---
|
||||
|
||||
### 最佳实践
|
||||
### 7.3.8 最佳实践
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
### 什么是 CMD
|
||||
### 7.4.1 什么是 CMD
|
||||
|
||||
`CMD` 指令用于指定容器启动时默认执行的命令。它定义了容器的 “主进程”。
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
---
|
||||
|
||||
### 语法格式
|
||||
### 7.4.2 语法格式
|
||||
|
||||
CMD 有三种格式:
|
||||
|
||||
@@ -61,7 +61,7 @@ CMD ["sh", "-c", "echo $HOME"]
|
||||
|
||||
---
|
||||
|
||||
### exec 格式 vs shell 格式
|
||||
### 7.4.3 exec 格式 vs shell 格式
|
||||
|
||||
相关信息如下表:
|
||||
|
||||
@@ -98,7 +98,7 @@ CMD ["node", "server.js"]
|
||||
|
||||
---
|
||||
|
||||
### 运行时覆盖 CMD
|
||||
### 7.4.4 运行时覆盖 CMD
|
||||
|
||||
`docker run` 后的命令会覆盖 Dockerfile 中的 CMD:
|
||||
|
||||
@@ -120,7 +120,7 @@ CMD ["/bin/bash"] + cat /etc/os-release
|
||||
|
||||
---
|
||||
|
||||
### 经典错误:容器立即退出
|
||||
### 7.4.5 经典错误:容器立即退出
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -164,7 +164,7 @@ CMD ["nginx", "-g", "daemon off;"]
|
||||
|
||||
---
|
||||
|
||||
### CMD vs ENTRYPOINT
|
||||
### 7.4.6 CMD vs ENTRYPOINT
|
||||
|
||||
相关信息如下表:
|
||||
|
||||
@@ -208,7 +208,7 @@ $ docker run myimage http://other.com # curl -s http://other.com(参数覆盖
|
||||
|
||||
---
|
||||
|
||||
### 最佳实践
|
||||
### 7.4.7 最佳实践
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -276,7 +276,7 @@ $ docker run myapp --port 9000
|
||||
|
||||
---
|
||||
|
||||
### 常见问题
|
||||
### 7.4.8 常见问题
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
### 什么是 ENTRYPOINT
|
||||
### 7.5.1 什么是 ENTRYPOINT
|
||||
|
||||
`ENTRYPOINT` 指定容器启动时运行的入口程序。与 CMD 不同,ENTRYPOINT 定义的命令不会被 `docker run` 的参数覆盖,而是 **接收这些参数**。
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
---
|
||||
|
||||
### 语法格式
|
||||
### 7.5.2 语法格式
|
||||
|
||||
相关信息如下表:
|
||||
|
||||
@@ -31,7 +31,7 @@ ENTRYPOINT nginx -g "daemon off;"
|
||||
|
||||
---
|
||||
|
||||
### ENTRYPOINT vs CMD
|
||||
### 7.5.3 ENTRYPOINT vs CMD
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -88,7 +88,7 @@ $ docker run myimage -v http://other.com # curl -s -v http://other.com ✓
|
||||
|
||||
---
|
||||
|
||||
### 场景一:让镜像像命令一样使用
|
||||
### 7.5.4 场景一:让镜像像命令一样使用
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -154,7 +154,7 @@ curl -s http://myip.ipip.net -i
|
||||
|
||||
---
|
||||
|
||||
### 场景二:启动前的准备工作
|
||||
### 7.5.5 场景二:启动前的准备工作
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -219,7 +219,7 @@ docker-entrypoint.sh redis-server docker-entrypoint.sh bash
|
||||
|
||||
---
|
||||
|
||||
### 场景三:带参数的应用
|
||||
### 7.5.6 场景三:带参数的应用
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -254,7 +254,7 @@ $ docker run myapp --help
|
||||
|
||||
---
|
||||
|
||||
### 覆盖 ENTRYPOINT
|
||||
### 7.5.7 覆盖 ENTRYPOINT
|
||||
|
||||
使用 `--entrypoint` 参数覆盖:
|
||||
|
||||
@@ -274,7 +274,7 @@ $ docker run --entrypoint /bin/cat myimage /etc/os-release
|
||||
|
||||
---
|
||||
|
||||
### ENTRYPOINT 与 CMD 组合表
|
||||
### 7.5.8 ENTRYPOINT 与 CMD 组合表
|
||||
|
||||
相关信息如下表:
|
||||
|
||||
@@ -290,7 +290,7 @@ $ docker run --entrypoint /bin/cat myimage /etc/os-release
|
||||
|
||||
---
|
||||
|
||||
### 最佳实践
|
||||
### 7.5.9 最佳实践
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
### 基本语法
|
||||
### 7.6.1 基本语法
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -18,7 +18,7 @@ ENV <key1>=<value1> <key2>=<value2> ...
|
||||
|
||||
---
|
||||
|
||||
### 基本用法
|
||||
### 7.6.2 基本用法
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -45,7 +45,7 @@ ENV NODE_VERSION=20.10.0 \
|
||||
|
||||
---
|
||||
|
||||
### 环境变量的作用
|
||||
### 7.6.3 环境变量的作用
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -92,7 +92,7 @@ const dbUrl = process.env.DATABASE_URL;
|
||||
|
||||
---
|
||||
|
||||
### 支持环境变量的指令
|
||||
### 7.6.4 支持环境变量的指令
|
||||
|
||||
以下指令可以使用 `$变量名` 或 `${变量名}` 格式:
|
||||
|
||||
@@ -112,7 +112,7 @@ const dbUrl = process.env.DATABASE_URL;
|
||||
|
||||
---
|
||||
|
||||
### 运行时覆盖
|
||||
### 7.6.5 运行时覆盖
|
||||
|
||||
使用 `-e` 或 `--env` 覆盖 Dockerfile 中定义的环境变量:
|
||||
|
||||
@@ -148,7 +148,7 @@ DATABASE_URL=postgres://localhost/mydb
|
||||
|
||||
---
|
||||
|
||||
### ENV vs ARG
|
||||
### 7.6.6 ENV vs ARG
|
||||
|
||||
相关信息如下表:
|
||||
|
||||
@@ -189,7 +189,7 @@ $ docker build --build-arg NODE_VERSION=18 -t myapp .
|
||||
|
||||
---
|
||||
|
||||
### 最佳实践
|
||||
### 7.6.7 最佳实践
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -255,7 +255,7 @@ ENV HOST=localhost \
|
||||
|
||||
---
|
||||
|
||||
### 常见问题
|
||||
### 7.6.8 常见问题
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
### 基本语法
|
||||
### 7.7.1 基本语法
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -14,7 +14,7 @@ ARG <参数名>[=<默认值>]
|
||||
|
||||
---
|
||||
|
||||
### ARG vs ENV
|
||||
### 7.7.2 ARG vs ENV
|
||||
|
||||
相关信息如下表:
|
||||
|
||||
@@ -37,7 +37,7 @@ ARG <参数名>[=<默认值>]
|
||||
|
||||
---
|
||||
|
||||
### 基本用法
|
||||
### 7.7.3 基本用法
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -72,7 +72,7 @@ $ docker build --build-arg NODE_VERSION=18 -t myapp .
|
||||
|
||||
---
|
||||
|
||||
### ARG 的作用域
|
||||
### 7.7.4 ARG 的作用域
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -130,7 +130,7 @@ RUN echo "Running with Node $NODE_VERSION"
|
||||
|
||||
---
|
||||
|
||||
### 常见使用场景
|
||||
### 7.7.5 常见使用场景
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -192,7 +192,7 @@ $ docker build --build-arg NPM_TOKEN=xxx .
|
||||
|
||||
---
|
||||
|
||||
### 将 ARG 传递给 ENV
|
||||
### 7.7.6 将 ARG 传递给 ENV
|
||||
|
||||
如果需要在运行时使用 ARG 的值:
|
||||
|
||||
@@ -210,7 +210,7 @@ CMD echo "App version: $APP_VERSION"
|
||||
|
||||
---
|
||||
|
||||
### 预定义 ARG
|
||||
### 7.7.7 预定义 ARG
|
||||
|
||||
Docker 提供了一些预定义的 ARG,无需声明即可使用:
|
||||
|
||||
@@ -229,7 +229,7 @@ $ docker build --build-arg HTTP_PROXY=http://proxy:8080 .
|
||||
|
||||
---
|
||||
|
||||
### 最佳实践
|
||||
### 7.7.8 最佳实践
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
### 基本语法
|
||||
### 7.8.1 基本语法
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -15,7 +15,7 @@ VOLUME /路径
|
||||
|
||||
---
|
||||
|
||||
### 为什么使用 VOLUME
|
||||
### 7.8.2 为什么使用 VOLUME
|
||||
|
||||
> **核心原则**:容器存储层应该保持无状态,任何运行时数据都应该存储在卷中。
|
||||
|
||||
@@ -45,7 +45,7 @@ flowchart LR
|
||||
|
||||
---
|
||||
|
||||
### 基本用法
|
||||
### 7.8.3 基本用法
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -69,7 +69,7 @@ VOLUME ["/data", "/logs", "/config"]
|
||||
|
||||
---
|
||||
|
||||
### VOLUME 的行为
|
||||
### 7.8.4 VOLUME 的行为
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -106,7 +106,7 @@ $ docker run -v /my/data:/var/lib/mysql mysql:8.0
|
||||
|
||||
---
|
||||
|
||||
### VOLUME 在构建时的特殊行为
|
||||
### 7.8.5 VOLUME 在构建时的特殊行为
|
||||
|
||||
> ⚠️ **重要**:VOLUME 之后对该目录的修改会被丢弃!
|
||||
|
||||
@@ -143,7 +143,7 @@ VOLUME /data
|
||||
|
||||
---
|
||||
|
||||
### 常见使用场景
|
||||
### 7.8.6 常见使用场景
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -176,7 +176,7 @@ VOLUME /app/uploads
|
||||
|
||||
---
|
||||
|
||||
### 查看 VOLUME 定义
|
||||
### 7.8.7 查看 VOLUME 定义
|
||||
|
||||
运行以下命令:
|
||||
|
||||
@@ -195,7 +195,7 @@ $ docker inspect mycontainer --format '{{json .Mounts}}' | jq
|
||||
|
||||
---
|
||||
|
||||
### VOLUME vs docker run -v
|
||||
### 7.8.8 VOLUME vs docker run -v
|
||||
|
||||
相关信息如下表:
|
||||
|
||||
@@ -208,7 +208,7 @@ $ docker inspect mycontainer --format '{{json .Mounts}}' | jq
|
||||
|
||||
---
|
||||
|
||||
### 在 Compose 中
|
||||
### 7.8.9 在 Compose 中
|
||||
|
||||
在 Compose 中配置如下:
|
||||
|
||||
@@ -230,7 +230,7 @@ volumes:
|
||||
|
||||
---
|
||||
|
||||
### 安全注意事项
|
||||
### 7.8.10 安全注意事项
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -259,7 +259,7 @@ $ docker run -v mysql_data:/var/lib/mysql mysql:8.0
|
||||
|
||||
---
|
||||
|
||||
### 最佳实践
|
||||
### 7.8.11 最佳实践
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
### 基本语法
|
||||
### 7.9.1 基本语法
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -14,7 +14,7 @@ EXPOSE <端口> [<端口>/<协议>...]
|
||||
|
||||
---
|
||||
|
||||
### 基本用法
|
||||
### 7.9.2 基本用法
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -35,7 +35,7 @@ EXPOSE 53/udp
|
||||
|
||||
---
|
||||
|
||||
### EXPOSE 的作用
|
||||
### 7.9.3 EXPOSE 的作用
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -74,7 +74,7 @@ $ docker port $(docker ps -q)
|
||||
|
||||
---
|
||||
|
||||
### EXPOSE vs -p
|
||||
### 7.9.4 EXPOSE vs -p
|
||||
|
||||
相关信息如下表:
|
||||
|
||||
@@ -117,7 +117,7 @@ $ docker run -p 8080:80 mynginx
|
||||
|
||||
---
|
||||
|
||||
### 常见误解
|
||||
### 7.9.5 常见误解
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -158,7 +158,7 @@ $ docker run -p 8080:80 nginx # 2. 映射:宿主机 8080 → 容器 80
|
||||
|
||||
---
|
||||
|
||||
### 最佳实践
|
||||
### 7.9.6 最佳实践
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
@@ -220,7 +220,7 @@ CMD ["node", "server.js"] # 实际监听 3000
|
||||
|
||||
---
|
||||
|
||||
### 使用环境变量
|
||||
### 7.9.7 使用环境变量
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -231,7 +231,7 @@ EXPOSE $PORT
|
||||
|
||||
---
|
||||
|
||||
### 在 Compose 中
|
||||
### 7.9.8 在 Compose 中
|
||||
|
||||
在 Compose 中配置如下:
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 本章小结
|
||||
## 7.19 本章小结
|
||||
|
||||
相关信息如下表:
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
| **持久性** | 影响后续所有指令,直到下次 WORKDIR |
|
||||
| **不要用** | `RUN cd /path` (无效)|
|
||||
|
||||
### 延伸阅读
|
||||
### 7.19.1 延伸阅读
|
||||
|
||||
- [COPY 复制文件](7.2_copy.md):文件复制
|
||||
- [RUN 执行命令](../04_image/4.5_build.md):执行构建命令
|
||||
@@ -24,7 +24,7 @@
|
||||
| **运行时覆盖** | `docker run -u` |
|
||||
| **切换工具** | 使用 gosu,不用 su/sudo |
|
||||
|
||||
### 延伸阅读
|
||||
### 7.19.2 延伸阅读
|
||||
|
||||
- [安全](../17_security/README.md):容器安全实践
|
||||
- [ENTRYPOINT](7.5_entrypoint.md):入口脚本中的用户切换
|
||||
@@ -38,7 +38,7 @@
|
||||
| **Compose** | 支持 `condition: service_healthy` 依赖 |
|
||||
| **注意** | 避免副作用,节省资源 |
|
||||
|
||||
### 延伸阅读
|
||||
### 7.19.3 延伸阅读
|
||||
|
||||
- [CMD 容器启动命令](7.4_cmd.md):启动主进程
|
||||
- [Compose 模板文件](../10_compose/10.5_compose_file.md):Compose 中的健康检查
|
||||
@@ -52,7 +52,7 @@
|
||||
| **限制** | 只继承一次,不可级联 |
|
||||
| **规范** | 建议使用 `-onbuild` 标签后缀 |
|
||||
|
||||
### 延伸阅读
|
||||
### 7.19.4 延伸阅读
|
||||
|
||||
- [COPY 指令](7.2_copy.md):文件复制
|
||||
- [Dockerfile 最佳实践](../appendix/20.1_best_practices.md):基础镜像设计
|
||||
@@ -65,7 +65,7 @@
|
||||
| **弃用** | 不要再使用 `MAINTAINER` |
|
||||
| **查看** | `docker inspect` |
|
||||
|
||||
### 延伸阅读
|
||||
### 7.19.5 延伸阅读
|
||||
|
||||
- [OCI 标签规范](https://github.com/opencontainers/image-spec/blob/main/annotations.md)
|
||||
- [Dockerfile 最佳实践](../appendix/20.1_best_practices.md)
|
||||
@@ -78,7 +78,7 @@
|
||||
| **推荐用法** | `SHELL ["/bin/bash", "-o", "pipefail", "-c"]` |
|
||||
| **影响范围** | 后续所有使用 shell 格式的指令 |
|
||||
|
||||
### 延伸阅读
|
||||
### 7.19.6 延伸阅读
|
||||
|
||||
- [RUN 指令](../04_image/4.5_build.md):执行命令
|
||||
- [Dockerfile 最佳实践](../appendix/20.1_best_practices.md):错误处理与调试
|
||||
@@ -91,7 +91,7 @@
|
||||
| **陷阱** | `cd` 不持久,环境变量不持久 |
|
||||
| **进阶** | 使用 Cache Mount 加速构建 |
|
||||
|
||||
### 延伸阅读
|
||||
### 7.19.7 延伸阅读
|
||||
|
||||
- [CMD 容器启动命令](7.4_cmd.md):容器启动时的命令
|
||||
- [WORKDIR 指定工作目录](7.10_workdir.md):改变目录
|
||||
@@ -105,7 +105,7 @@
|
||||
| 修改所有者 | `COPY --chown=node:node . /app/` |
|
||||
| 从构建阶段复制 | `COPY --from=builder /app/dist ./` |
|
||||
|
||||
### 延伸阅读
|
||||
### 7.19.8 延伸阅读
|
||||
|
||||
- [ADD 指令](7.3_add.md):复制和解压
|
||||
- [WORKDIR 指令](7.10_workdir.md):设置工作目录
|
||||
@@ -120,7 +120,7 @@
|
||||
| 从 URL 下载 | `RUN curl` |
|
||||
| 保持 tar 不解压 | `COPY` |
|
||||
|
||||
### 延伸阅读
|
||||
### 7.19.9 延伸阅读
|
||||
|
||||
- [COPY 复制文件](7.2_copy.md):基本复制操作
|
||||
- [多阶段构建](7.17_multistage_builds.md):减少镜像体积
|
||||
@@ -134,7 +134,7 @@
|
||||
| **与 ENTRYPOINT** | CMD 作为 ENTRYPOINT 的默认参数 |
|
||||
| **核心原则** | 应用必须在前台运行 |
|
||||
|
||||
### 延伸阅读
|
||||
### 7.19.10 延伸阅读
|
||||
|
||||
- [ENTRYPOINT 入口点](7.5_entrypoint.md):固定的启动命令
|
||||
- [后台运行](../05_container/5.2_daemon.md):容器前台/后台概念
|
||||
@@ -146,7 +146,7 @@
|
||||
| ✗ | ✓ | 简单的默认命令 |
|
||||
| ✓ | ✓ | **推荐**:固定命令 + 可配置参数 |
|
||||
|
||||
### 延伸阅读
|
||||
### 7.19.11 延伸阅读
|
||||
|
||||
- [CMD 容器启动命令](7.4_cmd.md):默认命令
|
||||
- [最佳实践](../appendix/20.1_best_practices.md):启动命令设计
|
||||
@@ -160,7 +160,7 @@
|
||||
| **与 ARG** | ARG 仅构建时,ENV 持久化到运行时 |
|
||||
| **安全** | 不要存储敏感信息 |
|
||||
|
||||
### 延伸阅读
|
||||
### 7.19.12 延伸阅读
|
||||
|
||||
- [ARG 构建参数](7.7_arg.md):构建时变量
|
||||
- [Compose 环境变量](../10_compose/10.5_compose_file.md):Compose 中的环境变量
|
||||
@@ -175,7 +175,7 @@
|
||||
| **vs ENV** | ARG 仅构建时,ENV 构建+运行时 |
|
||||
| **安全** | 不要存储敏感信息 |
|
||||
|
||||
### 延伸阅读
|
||||
### 7.19.13 延伸阅读
|
||||
|
||||
- [ENV 设置环境变量](7.6_env.md):运行时环境变量
|
||||
- [FROM 指令](../04_image/4.5_build.md):基础镜像指定
|
||||
@@ -189,7 +189,7 @@
|
||||
| **覆盖方式** | `docker run -v name:/path` |
|
||||
| **注意** | VOLUME 之后的修改会丢失 |
|
||||
|
||||
### 延伸阅读
|
||||
### 7.19.14 延伸阅读
|
||||
|
||||
- [数据卷](../08_data_network/data/volume.md):卷的管理和使用
|
||||
- [挂载主机目录](../08_data_network/data/bind-mounts.md):Bind Mount
|
||||
@@ -203,7 +203,7 @@
|
||||
| **外部访问** | 需要 `-p 宿主机端口:容器端口` |
|
||||
| **语法** | `EXPOSE 80` 或 `EXPOSE 80/tcp` |
|
||||
|
||||
### 延伸阅读
|
||||
### 7.19.15 延伸阅读
|
||||
|
||||
- [网络配置](../08_data_network/network/README.md):Docker 网络详解
|
||||
- [端口映射](../08_data_network/network/port_mapping.md):-p 参数详解
|
||||
|
||||
Reference in New Issue
Block a user