mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-11 04:14:38 +00:00
Fix missing links
This commit is contained in:
@@ -127,7 +127,7 @@ COPY --from=builder /build/dist .
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### 1。尽早设置 WORKDIR
|
||||
#### 1. 尽早设置 WORKDIR
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -141,7 +141,7 @@ COPY . .
|
||||
CMD ["node", "server.js"]
|
||||
```
|
||||
|
||||
#### 2。使用绝对路径
|
||||
#### 2. 使用绝对路径
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -155,7 +155,7 @@ WORKDIR /app
|
||||
WORKDIR app
|
||||
```
|
||||
|
||||
#### 3。不要用 RUN cd
|
||||
#### 3. 不要用 RUN cd
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -170,7 +170,7 @@ WORKDIR /app
|
||||
RUN echo "hello" > world.txt
|
||||
```
|
||||
|
||||
#### 4。适时重置 WORKDIR
|
||||
#### 4. 适时重置 WORKDIR
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
|
||||
@@ -225,7 +225,7 @@ CMD ["node", "server.js"]
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### 1。始终使用非 root 用户
|
||||
#### 1. 始终使用非 root 用户
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -241,7 +241,7 @@ CMD ["myapp"]
|
||||
CMD ["myapp"] # 以 root 运行
|
||||
```
|
||||
|
||||
#### 2。使用固定 UID/GID
|
||||
#### 2. 使用固定 UID/GID
|
||||
|
||||
便于在宿主机和容器间共享文件:
|
||||
|
||||
@@ -253,7 +253,7 @@ RUN addgroup -g 1000 -S appgroup && \
|
||||
USER 1000:1000
|
||||
```
|
||||
|
||||
#### 3。多阶段构建中的 USER
|
||||
#### 3. 多阶段构建中的 USER
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
|
||||
@@ -191,15 +191,15 @@ $ docker inspect --format '{{json .State.Health}}' mycontainer | jq
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### 1。避免副作用
|
||||
#### 1. 避免副作用
|
||||
|
||||
健康检查会被频繁执行,不要在检查脚本中进行写操作或消耗大量资源的操作。
|
||||
|
||||
#### 2。使用轻量级工具
|
||||
#### 2. 使用轻量级工具
|
||||
|
||||
优先使用镜像中已有的工具 (如 `wget`),避免为了健康检查安装庞大的依赖 (如 `curl`)。
|
||||
|
||||
#### 3。设置合理的 Start Period
|
||||
#### 3. 设置合理的 Start Period
|
||||
|
||||
应用启动可能需要时间 (如 Java 应用)。设置 `--start-period` 可以防止在启动阶段因检查失败而误判。
|
||||
|
||||
@@ -209,7 +209,7 @@ $ docker inspect --format '{{json .State.Health}}' mycontainer | jq
|
||||
HEALTHCHECK --start-period=60s CMD curl -f http://localhost/ || exit 1
|
||||
```
|
||||
|
||||
#### 4。只检查核心依赖
|
||||
#### 4. 只检查核心依赖
|
||||
|
||||
健康检查应主要关注 **当前服务** 是否可用,而不是检查其下游依赖 (数据库等)。下游依赖的检查应由应用逻辑处理。
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ FROM 基础镜像 ──build──> 读取基础镜像触发器 ──> 执行
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### 1。自动处理依赖安装
|
||||
#### 1. 自动处理依赖安装
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -90,7 +90,7 @@ ONBUILD COPY requirements.txt ./
|
||||
ONBUILD RUN pip install -r requirements.txt
|
||||
```
|
||||
|
||||
#### 2。自动编译代码
|
||||
#### 2. 自动编译代码
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -101,7 +101,7 @@ ONBUILD COPY . .
|
||||
ONBUILD RUN go build -o app main.go
|
||||
```
|
||||
|
||||
#### 3。处理静态资源
|
||||
#### 3. 处理静态资源
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -117,7 +117,7 @@ ONBUILD COPY dist/ /usr/share/nginx/html/
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### 1。继承性限制
|
||||
#### 1. 继承性限制
|
||||
|
||||
`ONBUILD` 指令 **只会继承一次**。
|
||||
|
||||
@@ -125,15 +125,15 @@ ONBUILD COPY dist/ /usr/share/nginx/html/
|
||||
- 镜像 B (FROM A) -> 触发 ONBUILD
|
||||
- 镜像 C (FROM B) -> **不会** 再次触发 ONBUILD
|
||||
|
||||
#### 2。构建上下文
|
||||
#### 2. 构建上下文
|
||||
|
||||
子镜像构建时,`ONBUILD COPY . .` 中的 `.` 指的是 **子项目** 的构建上下文,而不是基础镜像的上下文。
|
||||
|
||||
#### 3。不允许级联
|
||||
#### 3. 不允许级联
|
||||
|
||||
`ONBUILD ONBUILD` 是非法的。你不能写 `ONBUILD ONBUILD COPY ...`。
|
||||
|
||||
#### 4。可能会导致构建失败
|
||||
#### 4. 可能会导致构建失败
|
||||
|
||||
由于 `ONBUILD` 实际上是在子镜像中执行指令,如果子项目的上下文不满足要求 (例如缺少 `package.json`),会导致子镜像构建失败,且错误信息可能比较隐晦。
|
||||
|
||||
@@ -143,7 +143,7 @@ ONBUILD COPY dist/ /usr/share/nginx/html/
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### 1。命名规范
|
||||
#### 1. 命名规范
|
||||
|
||||
建议在镜像标签中添加 `-onbuild` 后缀,明确告知使用者该镜像包含触发器。
|
||||
|
||||
@@ -152,11 +152,11 @@ node:20-onbuild
|
||||
python:3.12-onbuild
|
||||
```
|
||||
|
||||
#### 2。避免执行耗时操作
|
||||
#### 2. 避免执行耗时操作
|
||||
|
||||
尽量不要在 `ONBUILD` 中执行过于耗时或不确定的操作 (如更新系统软件),这会让子镜像构建变得缓慢且不可控。
|
||||
|
||||
#### 3。清理工作
|
||||
#### 3. 清理工作
|
||||
|
||||
如果 `ONBUILD` 指令产生了临时文件,最好在同一个指令链中清理,或者提供机制让子镜像清理。
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ SHELL ["executable", "parameters"]
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### 1。使用 bash 特性
|
||||
#### 1. 使用 bash 特性
|
||||
|
||||
默认的 `/bin/sh` (通常是 dash 或 alpine 的 ash) 功能有限。如果你需要使用 bash 的特有功能 (如数组、`{}` 扩展、`pipefail` 等),可以切换 shell。
|
||||
|
||||
@@ -39,7 +39,7 @@ SHELL ["/bin/bash", "-c"]
|
||||
RUN echo {a..z}
|
||||
```
|
||||
|
||||
#### 2。增强错误处理
|
||||
#### 2. 增强错误处理
|
||||
|
||||
默认情况下,管道命令 `cmd1 | cmd2` 只要 `cmd2` 成功,整个指令就视为成功。这可能掩盖构建错误。
|
||||
|
||||
@@ -61,7 +61,7 @@ SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||
RUN wget -O - https://invalid-url | tar xz
|
||||
```
|
||||
|
||||
#### 3。Windows 环境
|
||||
#### 3. Windows 环境
|
||||
|
||||
在 Windows 容器中,经常需要在 `cmd` 和 `powershell` 之间切换。
|
||||
|
||||
@@ -127,7 +127,7 @@ RUN echo "Using sh again"
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### 1。推荐开启 pipefail
|
||||
#### 1. 推荐开启 pipefail
|
||||
|
||||
对于使用 bash 的镜像,强烈建议开启 `pipefail`,以确保构建过程中的错误能被及时捕获。
|
||||
|
||||
@@ -135,11 +135,11 @@ RUN echo "Using sh again"
|
||||
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||
```
|
||||
|
||||
#### 2。明确意图
|
||||
#### 2. 明确意图
|
||||
|
||||
如果由于脚本需求必须更改 shell,最好在 Dockerfile 中显式声明,而不是依赖默认行为。
|
||||
|
||||
#### 3。尽量保持一致
|
||||
#### 3. 尽量保持一致
|
||||
|
||||
避免在 Dockerfile 中频繁切换 SHELL,这会使构建过程难以理解和调试。尽量在头部定义一次即可。
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ RUN ["executable", "param1", "param2"]
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### 1。Shell 格式
|
||||
#### 1. Shell 格式
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -34,7 +34,7 @@ RUN apt-get update
|
||||
RUN echo "Hello" > /test.txt
|
||||
```
|
||||
|
||||
#### 2。Exec 格式
|
||||
#### 2. Exec 格式
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -52,7 +52,7 @@ RUN ["apt-get", "update"]
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### 1。组合命令 (减少层数)
|
||||
#### 1. 组合命令 (减少层数)
|
||||
|
||||
每一个 `RUN` 指令都会新建一层镜像。为了减少镜像体积和层数,应使用 `&&` 连接命令。
|
||||
|
||||
@@ -72,7 +72,7 @@ RUN apt-get update && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
```
|
||||
|
||||
#### 2。清理缓存
|
||||
#### 2. 清理缓存
|
||||
|
||||
在安装完软件后,立即清除缓存,可以显著减小镜像体积。
|
||||
|
||||
@@ -87,7 +87,7 @@ RUN apt-get update && \
|
||||
RUN apk add --no-cache package-bar
|
||||
```
|
||||
|
||||
#### 3。使用 `set -e` 和 `pipefail`
|
||||
#### 3. 使用 `set -e` 和 `pipefail`
|
||||
|
||||
默认情况下,管道命令 `cmd1 | cmd2` 只要 `cmd2` 成功,整个 `RUN` 就视为成功。
|
||||
|
||||
@@ -150,7 +150,7 @@ RUN echo $MY_VAR
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### 1。使用 BuildKit 的挂载缓存
|
||||
#### 1. 使用 BuildKit 的挂载缓存
|
||||
|
||||
BuildKit 支持在 `RUN` 指令中使用 `--mount` 挂载缓存,加速构建。
|
||||
|
||||
@@ -169,7 +169,7 @@ RUN --mount=type=cache,target=/go/pkg/mod \
|
||||
go build -o app
|
||||
```
|
||||
|
||||
#### 2。挂载密钥
|
||||
#### 2. 挂载密钥
|
||||
|
||||
安全地使用 SSH 密钥或 Token,而不将其记录在镜像中。
|
||||
|
||||
|
||||
@@ -256,7 +256,7 @@ Dockerfile
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### 1。利用缓存,先复制依赖文件
|
||||
#### 1. 利用缓存,先复制依赖文件
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -273,7 +273,7 @@ COPY . .
|
||||
RUN npm install
|
||||
```
|
||||
|
||||
#### 2。使用。dockerignore
|
||||
#### 2. 使用 .dockerignore
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -286,7 +286,7 @@ COPY . .
|
||||
...
|
||||
```
|
||||
|
||||
#### 3。明确复制路径
|
||||
#### 3. 明确复制路径
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
|
||||
@@ -214,7 +214,7 @@ ADD app.tar.gz /app/
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### 1。默认使用 COPY
|
||||
#### 1. 默认使用 COPY
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -224,7 +224,7 @@ ADD app.tar.gz /app/
|
||||
COPY . /app/
|
||||
```
|
||||
|
||||
#### 2。仅在需要解压时使用 ADD
|
||||
#### 2. 仅在需要解压时使用 ADD
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -234,7 +234,7 @@ COPY . /app/
|
||||
ADD app.tar.gz /app/
|
||||
```
|
||||
|
||||
#### 3。不要用 ADD 下载文件
|
||||
#### 3. 不要用 ADD 下载文件
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -248,7 +248,7 @@ ADD https://example.com/file.tar.gz /tmp/
|
||||
RUN curl -fsSL https://example.com/file.tar.gz | tar -xz -C /app
|
||||
```
|
||||
|
||||
#### 4。解压后清理
|
||||
#### 4. 解压后清理
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
|
||||
@@ -212,7 +212,7 @@ $ docker run myimage http://other.com # curl -s http://other.com(参数覆盖
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### 1。优先使用 exec 格式
|
||||
#### 1. 优先使用 exec 格式
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -226,7 +226,7 @@ CMD ["python", "app.py"]
|
||||
CMD ["sh", "-c", "echo $PATH && python app.py"]
|
||||
```
|
||||
|
||||
#### 2。确保应用在前台运行
|
||||
#### 2. 确保应用在前台运行
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -243,7 +243,7 @@ CMD service nginx start
|
||||
CMD systemctl start nginx
|
||||
```
|
||||
|
||||
#### 3。使用双引号
|
||||
#### 3. 使用双引号
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -257,7 +257,7 @@ CMD ["node", "server.js"]
|
||||
CMD ['node', 'server.js']
|
||||
```
|
||||
|
||||
#### 4。配合 ENTRYPOINT 使用
|
||||
#### 4. 配合 ENTRYPOINT 使用
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
|
||||
@@ -294,7 +294,7 @@ $ docker run --entrypoint /bin/cat myimage /etc/os-release
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### 1。使用 exec 格式
|
||||
#### 1. 使用 exec 格式
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -308,7 +308,7 @@ ENTRYPOINT ["python", "app.py"]
|
||||
ENTRYPOINT python app.py
|
||||
```
|
||||
|
||||
#### 2。提供有意义的默认参数
|
||||
#### 2. 提供有意义的默认参数
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -317,7 +317,7 @@ ENTRYPOINT ["nginx"]
|
||||
CMD ["-g", "daemon off;"]
|
||||
```
|
||||
|
||||
#### 3。入口脚本使用 exec
|
||||
#### 3. 入口脚本使用 exec
|
||||
|
||||
运行以下命令:
|
||||
|
||||
@@ -330,7 +330,7 @@ CMD ["-g", "daemon off;"]
|
||||
exec "$@"
|
||||
```
|
||||
|
||||
#### 4。处理信号
|
||||
#### 4. 处理信号
|
||||
|
||||
确保 ENTRYPOINT 脚本能正确传递信号:
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ ENV NODE_VERSION=20.10.0 \
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### 1。后续指令中使用
|
||||
#### 1. 后续指令中使用
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -71,7 +71,7 @@ WORKDIR $APP_HOME
|
||||
COPY . $APP_HOME
|
||||
```
|
||||
|
||||
#### 2。容器运行时使用
|
||||
#### 2. 容器运行时使用
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -193,7 +193,7 @@ $ docker build --build-arg NODE_VERSION=18 -t myapp .
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### 1。统一管理版本号
|
||||
#### 1. 统一管理版本号
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -211,7 +211,7 @@ RUN apt-get install nginx=${NGINX_VERSION}
|
||||
RUN apt-get install nginx=1.25.0
|
||||
```
|
||||
|
||||
#### 2。不要存储敏感信息
|
||||
#### 2. 不要存储敏感信息
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -227,7 +227,7 @@ ENV DB_PASSWORD=secret123
|
||||
...
|
||||
```
|
||||
|
||||
#### 3。为应用提供合理默认值
|
||||
#### 3. 为应用提供合理默认值
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -237,7 +237,7 @@ ENV APP_ENV=production \
|
||||
LOG_LEVEL=info
|
||||
```
|
||||
|
||||
#### 4。使用有意义的变量名
|
||||
#### 4. 使用有意义的变量名
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
|
||||
@@ -134,7 +134,7 @@ RUN echo "Running with Node $NODE_VERSION"
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### 1。控制基础镜像版本
|
||||
#### 1. 控制基础镜像版本
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -147,7 +147,7 @@ FROM alpine:${ALPINE_VERSION}
|
||||
$ docker build --build-arg ALPINE_VERSION=3.18 .
|
||||
```
|
||||
|
||||
#### 2。设置软件版本
|
||||
#### 2. 设置软件版本
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -157,7 +157,7 @@ ARG NGINX_VERSION=1.25.0
|
||||
RUN curl -fsSL https://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz | tar -xz
|
||||
```
|
||||
|
||||
#### 3。配置构建环境
|
||||
#### 3. 配置构建环境
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -172,7 +172,7 @@ RUN if [ "$ENABLE_DEBUG" = "true" ]; then \
|
||||
fi
|
||||
```
|
||||
|
||||
#### 4。配置私有仓库
|
||||
#### 4. 配置私有仓库
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -233,7 +233,7 @@ $ docker build --build-arg HTTP_PROXY=http://proxy:8080 .
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### 1。为 ARG 提供合理默认值
|
||||
#### 1. 为 ARG 提供合理默认值
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -247,7 +247,7 @@ ARG NODE_VERSION=20
|
||||
ARG NODE_VERSION
|
||||
```
|
||||
|
||||
#### 2。不要用 ARG 存储敏感信息
|
||||
#### 2. 不要用 ARG 存储敏感信息
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -262,7 +262,7 @@ RUN echo "password=$DB_PASSWORD" > /app/.env
|
||||
...
|
||||
```
|
||||
|
||||
#### 3。使用 ARG 提高构建灵活性
|
||||
#### 3. 使用 ARG 提高构建灵活性
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ VOLUME ["/data", "/logs", "/config"]
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### 1。自动创建匿名卷
|
||||
#### 1. 自动创建匿名卷
|
||||
|
||||
如果运行时未指定挂载,Docker 会自动创建匿名卷:
|
||||
|
||||
@@ -84,7 +84,7 @@ DRIVER VOLUME NAME
|
||||
local a1b2c3d4e5f6... # 自动创建的匿名卷
|
||||
```
|
||||
|
||||
#### 2。可被命名卷覆盖
|
||||
#### 2. 可被命名卷覆盖
|
||||
|
||||
运行以下命令:
|
||||
|
||||
@@ -94,7 +94,7 @@ local a1b2c3d4e5f6... # 自动创建的匿名卷
|
||||
$ docker run -v mysql_data:/var/lib/mysql mysql:8.0
|
||||
```
|
||||
|
||||
#### 3。可被 Bind Mount 覆盖
|
||||
#### 3. 可被 Bind Mount 覆盖
|
||||
|
||||
运行以下命令:
|
||||
|
||||
@@ -263,7 +263,7 @@ $ docker run -v mysql_data:/var/lib/mysql mysql:8.0
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### 1。定义必须持久化的路径
|
||||
#### 1. 定义必须持久化的路径
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -274,7 +274,7 @@ FROM postgres:15
|
||||
VOLUME /var/lib/postgresql/data
|
||||
```
|
||||
|
||||
#### 2。不要在 VOLUME 后修改目录
|
||||
#### 2. 不要在 VOLUME 后修改目录
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -290,7 +290,7 @@ RUN mkdir -p /app/data && cp init-data.json /app/data/
|
||||
VOLUME /app/data
|
||||
```
|
||||
|
||||
#### 3。文档中说明 VOLUME 用途
|
||||
#### 3. 文档中说明 VOLUME 用途
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ EXPOSE 53/udp
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### 1。文档说明
|
||||
#### 1. 文档说明
|
||||
|
||||
告诉镜像使用者,容器将在哪些端口提供服务:
|
||||
|
||||
@@ -56,7 +56,7 @@ $ docker inspect nginx --format '{{.Config.ExposedPorts}}'
|
||||
map[80/tcp:{}]
|
||||
```
|
||||
|
||||
#### 2。配合 -P 使用
|
||||
#### 2. 配合 -P 使用
|
||||
|
||||
使用 `docker run -P` 时,Docker 会自动映射 EXPOSE 的端口到宿主机随机端口:
|
||||
|
||||
@@ -162,7 +162,7 @@ $ docker run -p 8080:80 nginx # 2. 映射:宿主机 8080 → 容器 80
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### 1。总是声明应用使用的端口
|
||||
#### 1. 总是声明应用使用的端口
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -183,7 +183,7 @@ FROM redis
|
||||
EXPOSE 6379
|
||||
```
|
||||
|
||||
#### 2。使用明确的协议
|
||||
#### 2. 使用明确的协议
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
@@ -201,7 +201,7 @@ EXPOSE 53/udp
|
||||
EXPOSE 53/tcp 53/udp
|
||||
```
|
||||
|
||||
#### 3。与应用实际端口保持一致
|
||||
#### 3. 与应用实际端口保持一致
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
### 7.19.2 延伸阅读
|
||||
|
||||
- [安全](../17_security/README.md):容器安全实践
|
||||
- [安全](../18_security/README.md):容器安全实践
|
||||
- [ENTRYPOINT](7.5_entrypoint.md):入口脚本中的用户切换
|
||||
- [最佳实践](../appendix/20.1_best_practices.md):Dockerfile 安全
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
### 7.19.3 延伸阅读
|
||||
|
||||
- [CMD 容器启动命令](7.4_cmd.md):启动主进程
|
||||
- [Compose 模板文件](../10_compose/10.5_compose_file.md):Compose 中的健康检查
|
||||
- [Compose 模板文件](../11_compose/11.5_compose_file.md):Compose 中的健康检查
|
||||
- [Docker 调试](../appendix/20.2_debug.md):容器排障
|
||||
|
||||
| 要点 | 说明 |
|
||||
@@ -163,7 +163,7 @@
|
||||
### 7.19.12 延伸阅读
|
||||
|
||||
- [ARG 构建参数](7.7_arg.md):构建时变量
|
||||
- [Compose 环境变量](../10_compose/10.5_compose_file.md):Compose 中的环境变量
|
||||
- [Compose 环境变量](../11_compose/11.5_compose_file.md):Compose 中的环境变量
|
||||
- [最佳实践](../appendix/20.1_best_practices.md):Dockerfile 编写指南
|
||||
|
||||
| 要点 | 说明 |
|
||||
@@ -191,9 +191,9 @@
|
||||
|
||||
### 7.19.14 延伸阅读
|
||||
|
||||
- [数据卷](../08_data_network/data/volume.md):卷的管理和使用
|
||||
- [挂载主机目录](../08_data_network/data/bind-mounts.md):Bind Mount
|
||||
- [Compose 数据管理](../10_compose/10.5_compose_file.md):Compose 中的卷配置
|
||||
- [数据卷](../08_data/volume.md):卷的管理和使用
|
||||
- [挂载主机目录](../08_data/bind-mounts.md):Bind Mount
|
||||
- [Compose 数据管理](../11_compose/11.5_compose_file.md):Compose 中的卷配置
|
||||
|
||||
| 要点 | 说明 |
|
||||
|------|------|
|
||||
@@ -205,6 +205,6 @@
|
||||
|
||||
### 7.19.15 延伸阅读
|
||||
|
||||
- [网络配置](../08_data_network/network/README.md):Docker 网络详解
|
||||
- [端口映射](../08_data_network/network/port_mapping.md):-p 参数详解
|
||||
- [Compose 端口](../10_compose/10.5_compose_file.md):Compose 中的端口配置
|
||||
- [网络配置](../09_network/README.md):Docker 网络详解
|
||||
- [端口映射](../09_network/port_mapping.md):-p 参数详解
|
||||
- [Compose 端口](../11_compose/11.5_compose_file.md):Compose 中的端口配置
|
||||
|
||||
Reference in New Issue
Block a user