Simplify words and fix format issues

This commit is contained in:
Baohua Yang
2026-02-24 22:01:02 -08:00
parent c44cbfcd62
commit d6e0838807
124 changed files with 45 additions and 1073 deletions

View File

@@ -1,7 +1,5 @@
## 7.10 WORKDIR 指定工作目录
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 7.10.1 基本语法
如下代码块所示展示了相关示例
@@ -30,8 +28,6 @@ COPY . . # 复制到 /app/
### 7.10.3 为什么需要 WORKDIR
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 常见错误
如下代码块所示展示了相关示例
@@ -125,8 +121,6 @@ COPY --from=builder /build/dist .
### 7.10.7 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1. 尽早设置 WORKDIR
如下代码块所示展示了相关示例
@@ -188,8 +182,6 @@ WORKDIR /data
### 7.10.8 与其他指令的关系
相关信息如下表
| 指令 | WORKDIR 的影响 |
|------|---------------|
| `RUN` | WORKDIR 中执行命令 |

View File

@@ -1,7 +1,5 @@
## 7.11 USER 指定当前用户
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 7.11.1 基本语法
如下代码块所示展示了相关示例
@@ -38,8 +36,6 @@ flowchart LR
### 7.11.3 基本用法
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 创建并切换用户
如下代码块所示展示了相关示例
@@ -94,10 +90,6 @@ RUN useradd -r -s /bin/false appuser
USER appuser
```
#### 概述
总体概述了以下内容
#### 创建用户的方式
**Debian/Ubuntu**
@@ -126,8 +118,6 @@ RUN addgroup -g 1001 -S appgroup && \
### 7.11.5 运行时切换用户
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 使用 gosu (推荐)
ENTRYPOINT 脚本中切换用户时不要使用 `su` `sudo`应使用 [gosu](https://github.com/tianon/gosu)
@@ -165,8 +155,6 @@ exec gosu redis "$@"
#### 为什么不用 su/sudo
相关信息如下表
| 问题 | su/sudo | gosu |
|------|---------|------|
| TTY 要求 | 需要 | 不需要 |
@@ -223,8 +211,6 @@ CMD ["node", "server.js"]
### 7.11.8 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1. 始终使用非 root 用户
如下代码块所示展示了相关示例
@@ -279,12 +265,8 @@ CMD ["node", "server.js"]
### 7.11.9 常见问题
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### Q权限被拒绝
运行以下命令
```bash
permission denied: '/app/data.log'
```

View File

@@ -1,7 +1,5 @@
## 7.12 HEALTHCHECK 健康检查
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 7.12.1 基本语法
如下代码块所示展示了相关示例
@@ -37,8 +35,6 @@ Starting ──成功──> Healthy ──失败N次──> Unhealthy
### 7.12.3 基本用法
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### Web 服务检查
如下代码块所示展示了相关示例
@@ -59,8 +55,6 @@ HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
#### 常用选项
相关信息如下表
| 选项 | 说明 | 默认值 |
|------|------|--------|
| `--interval` | 两次检查的间隔 | 30s |
@@ -83,8 +77,6 @@ HEALTHCHECK NONE
### 7.12.5 常见检查脚本
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### HTTP 服务
使用 `curl` `wget`
@@ -158,8 +150,6 @@ services:
### 7.12.7 查看健康状态
运行以下命令
```bash
## 查看容器状态(包含健康信息)
@@ -189,8 +179,6 @@ $ docker inspect --format '{{json .State.Health}}' mycontainer | jq
### 7.12.8 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1. 避免副作用
健康检查会被频繁执行不要在检查脚本中进行写操作或消耗大量资源的操作

View File

@@ -1,7 +1,5 @@
## 7.13 ONBUILD 为他人做嫁衣裳
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 7.13.1 基本语法
如下代码块所示展示了相关示例
@@ -77,8 +75,6 @@ FROM 基础镜像 ──build──> 读取基础镜像触发器 ──> 执行
### 7.13.4 常见使用场景
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1. 自动处理依赖安装
如下代码块所示展示了相关示例
@@ -115,8 +111,6 @@ ONBUILD COPY dist/ /usr/share/nginx/html/
### 7.13.5 注意事项
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1. 继承性限制
`ONBUILD` 指令 **只会继承一次**
@@ -141,8 +135,6 @@ ONBUILD COPY dist/ /usr/share/nginx/html/
### 7.13.6 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1. 命名规范
建议在镜像标签中添加 `-onbuild` 后缀明确告知使用者该镜像包含触发器

View File

@@ -1,7 +1,5 @@
## 7.14 LABEL 为镜像添加元数据
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 7.14.1 基本语法
如下代码块所示展示了相关示例
@@ -25,8 +23,6 @@ LABEL <key>=<value> <key>=<value> ...
### 7.14.3 基本用法
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 定义单个标签
如下代码块所示展示了相关示例
@@ -67,10 +63,6 @@ LABEL maintainer="user@example.com" \
| `org.opencontainers.image.title` | 镜像标题 | `My App` |
| `org.opencontainers.image.description` | 描述 | `Production ready web server` |
#### 概述
总体概述了以下内容
#### 示例
如下代码块所示展示了相关示例
@@ -132,8 +124,6 @@ $ docker build \
### 7.14.7 查看标签
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### docker inspect
查看镜像的标签信息

View File

@@ -1,7 +1,5 @@
## 7.15 SHELL 指令
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 7.15.1 基本语法
如下代码块所示展示了相关示例
@@ -21,8 +19,6 @@ SHELL ["executable", "parameters"]
### 7.15.2 为什么要用 SHELL 指令
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1. 使用 bash 特性
默认的 `/bin/sh` (通常是 dash alpine ash) 功能有限如果你需要使用 bash 的特有功能 (如数组`{}` 扩展`pipefail` )可以切换 shell
@@ -125,8 +121,6 @@ RUN echo "Using sh again"
### 7.15.5 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1. 推荐开启 pipefail
对于使用 bash 的镜像强烈建议开启 `pipefail`以确保构建过程中的错误能被及时捕获

View File

@@ -1,7 +1,5 @@
## 7.1 RUN 执行命令
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 7.1.1 基本语法
如下代码块所示展示了相关示例
@@ -17,8 +15,6 @@ RUN ["executable", "param1", "param2"]
### 7.1.2 两种格式对比
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1. Shell 格式
如下代码块所示展示了相关示例
@@ -50,8 +46,6 @@ RUN ["apt-get", "update"]
### 7.1.3 常见最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1. 组合命令 (减少层数)
每一个 `RUN` 指令都会新建一层镜像为了减少镜像体积和层数应使用 `&&` 连接命令
@@ -110,8 +104,6 @@ RUN wget http://url | gzip -d > file
### 7.1.4 常见问题
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### Q为什么 `RUN cd /app` 不生效
如下代码块所示展示了相关示例
@@ -148,8 +140,6 @@ RUN echo $MY_VAR
### 7.1.5 高级技巧
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1. 使用 BuildKit 的挂载缓存
BuildKit 支持在 `RUN` 指令中使用 `--mount` 挂载缓存加速构建

View File

@@ -1,7 +1,5 @@
## 7.2 COPY 复制文件
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 7.2.1 基本语法
如下代码块所示展示了相关示例
@@ -17,8 +15,6 @@ COPY [选项] ["<源路径1>", "<源路径2>", ... "<目标路径>"]
### 7.2.2 基本用法
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 复制单个文件
如下代码块所示展示了相关示例
@@ -90,8 +86,6 @@ COPY app[0-9].js /app/ # app0.js ~ app9.js
### 7.2.4 目标路径
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 绝对路径
如下代码块所示展示了相关示例
@@ -163,8 +157,6 @@ COPY start.sh /app/
### 7.2.7 COPY vs ADD
相关信息如下表
| 特性 | COPY | ADD |
|------|------|-----|
| 复制本地文件 | | |
@@ -189,8 +181,6 @@ ADD app.tar.gz /app/
### 7.2.8 多阶段构建中的 COPY
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 从其他构建阶段复制
如下代码块所示展示了相关示例
@@ -254,8 +244,6 @@ Dockerfile
### 7.2.10 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1. 利用缓存先复制依赖文件
如下代码块所示展示了相关示例

View File

@@ -1,7 +1,5 @@
## 7.3 ADD 更高级的复制文件
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 7.3.1 基本语法
如下代码块所示展示了相关示例
@@ -20,8 +18,6 @@ ADD [选项] ["<源路径>", ... "<目标路径>"]
### 7.3.2 ADD vs COPY
相关信息如下表
| 特性 | COPY | ADD |
|------|------|-----|
| 复制本地文件 | | |
@@ -36,8 +32,6 @@ ADD [选项] ["<源路径>", ... "<目标路径>"]
### 7.3.3 自动解压功能
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 基本用法 (自动解压本地 tar)
如下代码块所示展示了相关示例
@@ -85,8 +79,6 @@ app.tar.gz 包含: /app/ 目录结果:
### 7.3.4 URL 下载功能 (不推荐)
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 基本用法
如下代码块所示展示了相关示例
@@ -99,8 +91,6 @@ ADD https://example.com/app.zip /app/app.zip
#### 为什么不推荐
相关信息如下表
| 问题 | 说明 |
|------|------|
| 权限固定 | 下载的文件权限为 600通常需要额外 RUN 修改 |
@@ -144,8 +134,6 @@ ADD --chown=1000:1000 files/ /app/
### 7.3.6 何时使用 ADD
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 适合使用 ADD
如下代码块所示展示了相关示例
@@ -212,8 +200,6 @@ ADD app.tar.gz /app/
### 7.3.8 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1. 默认使用 COPY
如下代码块所示展示了相关示例

View File

@@ -1,7 +1,5 @@
## 7.4 CMD 容器启动命令
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 7.4.1 什么是 CMD
`CMD` 指令用于指定容器启动时默认执行的命令它定义了容器的 主进程
@@ -63,8 +61,6 @@ CMD ["sh", "-c", "echo $HOME"]
### 7.4.3 exec 格式 vs shell 格式
相关信息如下表
| 特性 | exec 格式 | shell 格式 |
|------|----------|-----------|
| 主进程 | 指定的程序 | `/bin/sh` |
@@ -72,10 +68,6 @@ CMD ["sh", "-c", "echo $HOME"]
| 环境变量 | 需要 shell 包装 | 自动解析 |
| 推荐使用 | 大多数场景 | 需要 shell 特性时 |
#### 概述
总体概述了以下内容
#### 信号传递问题示例
如下代码块所示展示了相关示例
@@ -122,8 +114,6 @@ CMD ["/bin/bash"] + cat /etc/os-release
### 7.4.5 经典错误容器立即退出
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 错误示例
如下代码块所示展示了相关示例
@@ -166,8 +156,6 @@ CMD ["nginx", "-g", "daemon off;"]
### 7.4.6 CMD vs ENTRYPOINT
相关信息如下表
| 指令 | 用途 | 运行时行为 |
|------|------|-----------|
| **CMD**| 默认命令 | `docker run` 参数会 **覆盖** |
@@ -210,8 +198,6 @@ $ docker run myimage http://other.com # curl -s http://other.com参数覆盖
### 7.4.7 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1. 优先使用 exec 格式
如下代码块所示展示了相关示例
@@ -278,8 +264,6 @@ $ docker run myapp --port 9000
### 7.4.8 常见问题
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### QCMD 可以写多个吗
不可以多个 CMD 只有最后一个生效

View File

@@ -1,7 +1,5 @@
## 7.5 ENTRYPOINT 入口点
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 7.5.1 什么是 ENTRYPOINT
`ENTRYPOINT` 指定容器启动时运行的入口程序 CMD 不同ENTRYPOINT 定义的命令不会被 `docker run` 的参数覆盖而是 **接收这些参数**
@@ -12,8 +10,6 @@
### 7.5.2 语法格式
相关信息如下表
| 格式 | 语法 | 推荐程度 |
|------|------|---------|
| **exec 格式**| `ENTRYPOINT ["可执行文件", "参数1"]` | **推荐** |
@@ -33,12 +29,8 @@ ENTRYPOINT nginx -g "daemon off;"
### 7.5.3 ENTRYPOINT vs CMD
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 核心区别
相关信息如下表
| 特性 | ENTRYPOINT | CMD |
|------|------------|-----|
| **定位** | 固定的入口程序 | 默认参数 |
@@ -90,8 +82,6 @@ $ docker run myimage -v http://other.com # curl -s -v http://other.com ✓
### 7.5.4 场景一让镜像像命令一样使用
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 需求 (启动前准备)
创建一个查询公网 IP 命令 镜像
@@ -156,8 +146,6 @@ curl -s http://myip.ipip.net -i
### 7.5.5 场景二启动前的准备工作
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 需求
在启动主服务前执行初始化脚本 (如数据库迁移权限设置)
@@ -276,8 +264,6 @@ $ docker run --entrypoint /bin/cat myimage /etc/os-release
### 7.5.8 ENTRYPOINT CMD 组合表
相关信息如下表
| ENTRYPOINT | CMD | 最终执行命令 |
|------------|-----|-------------|
| | | (容器无法启动)|
@@ -292,8 +278,6 @@ $ docker run --entrypoint /bin/cat myimage /etc/os-release
### 7.5.9 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1. 使用 exec 格式
如下代码块所示展示了相关示例
@@ -319,8 +303,6 @@ CMD ["-g", "daemon off;"]
#### 3. 入口脚本使用 exec
运行以下命令
```bash
#!/bin/sh
## 准备工作...

View File

@@ -1,7 +1,5 @@
## 7.6 ENV 设置环境变量
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 7.6.1 基本语法
如下代码块所示展示了相关示例
@@ -20,8 +18,6 @@ ENV <key1>=<value1> <key2>=<value2> ...
### 7.6.2 基本用法
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 设置单个变量
如下代码块所示展示了相关示例
@@ -47,8 +43,6 @@ ENV NODE_VERSION=20.10.0 \
### 7.6.3 环境变量的作用
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1. 后续指令中使用
如下代码块所示展示了相关示例
@@ -130,14 +124,8 @@ $ docker run -e APP_ENV=development -e DEBUG=true myimage
$ docker run --env-file .env myimage
```
#### 概述
总体概述了以下内容
#### env 文件格式
运行以下命令
```bash
## .env
@@ -150,8 +138,6 @@ DATABASE_URL=postgres://localhost/mydb
### 7.6.6 ENV vs ARG
相关信息如下表
| 特性 | ENV | ARG |
|------|-----|-----|
| **生效时间** | 构建时 + 运行时 | 仅构建时 |
@@ -159,10 +145,6 @@ DATABASE_URL=postgres://localhost/mydb
| **覆盖方式** | `docker run -e` | `docker build --build-arg` |
| **适用场景** | 应用配置 | 构建参数 (如版本号)|
#### 概述
总体概述了以下内容
#### 组合使用
如下代码块所示展示了相关示例
@@ -191,8 +173,6 @@ $ docker build --build-arg NODE_VERSION=18 -t myapp .
### 7.6.7 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1. 统一管理版本号
如下代码块所示展示了相关示例
@@ -257,8 +237,6 @@ ENV HOST=localhost \
### 7.6.8 常见问题
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### Q环境变量在 CMD 中不展开
exec 格式不会自动展开环境变量
@@ -275,8 +253,6 @@ CMD ["sh", "-c", "python app.py --port $PORT"]
#### Q如何查看容器的环境变量
运行以下命令
```bash
$ docker inspect mycontainer --format '{{json .Config.Env}}'
$ docker exec mycontainer env

View File

@@ -1,7 +1,5 @@
## 7.7 ARG 构建参数
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 7.7.1 基本语法
如下代码块所示展示了相关示例
@@ -16,8 +14,6 @@ ARG <参数名>[=<默认值>]
### 7.7.2 ARG vs ENV
相关信息如下表
| 特性 | ARG | ENV |
|------|-----|-----|
| **生效时间** | 仅构建时 | 构建时 + 运行时 |
@@ -39,8 +35,6 @@ ARG <参数名>[=<默认值>]
### 7.7.3 基本用法
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 定义和使用
如下代码块所示展示了相关示例
@@ -58,8 +52,6 @@ RUN echo "Using Node.js $NODE_VERSION"
#### 构建时覆盖
运行以下命令
```bash
## 使用默认值
@@ -74,8 +66,6 @@ $ docker build --build-arg NODE_VERSION=18 -t myapp .
### 7.7.4 ARG 的作用域
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### FROM 之前的 ARG
如下代码块所示展示了相关示例
@@ -132,8 +122,6 @@ RUN echo "Running with Node $NODE_VERSION"
### 7.7.5 常见使用场景
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1. 控制基础镜像版本
如下代码块所示展示了相关示例
@@ -231,8 +219,6 @@ $ docker build --build-arg HTTP_PROXY=http://proxy:8080 .
### 7.7.8 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1. ARG 提供合理默认值
如下代码块所示展示了相关示例

View File

@@ -1,7 +1,5 @@
## 7.8 VOLUME 定义匿名卷
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 7.8.1 基本语法
如下代码块所示展示了相关示例
@@ -47,8 +45,6 @@ flowchart LR
### 7.8.3 基本用法
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 定义单个卷
如下代码块所示展示了相关示例
@@ -71,8 +67,6 @@ VOLUME ["/data", "/logs", "/config"]
### 7.8.4 VOLUME 的行为
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1. 自动创建匿名卷
如果运行时未指定挂载Docker 会自动创建匿名卷
@@ -86,8 +80,6 @@ local a1b2c3d4e5f6... # 自动创建的匿名卷
#### 2. 可被命名卷覆盖
运行以下命令
```bash
## 使用命名卷替代匿名卷
@@ -96,8 +88,6 @@ $ docker run -v mysql_data:/var/lib/mysql mysql:8.0
#### 3. 可被 Bind Mount 覆盖
运行以下命令
```bash
## 使用宿主机目录替代
@@ -121,10 +111,6 @@ RUN echo "hello" > /data/test.txt
**原因**VOLUME 指令之后Docker 将该目录视为外部挂载点不再记录对它的修改
#### 概述
总体概述了以下内容
#### 正确做法
如下代码块所示展示了相关示例
@@ -145,8 +131,6 @@ VOLUME /data
### 7.8.6 常见使用场景
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 数据库持久化
如下代码块所示展示了相关示例
@@ -178,8 +162,6 @@ VOLUME /app/uploads
### 7.8.7 查看 VOLUME 定义
运行以下命令
```bash
## 查看镜像定义的 VOLUME
@@ -197,8 +179,6 @@ $ docker inspect mycontainer --format '{{json .Mounts}}' | jq
### 7.8.8 VOLUME vs docker run -v
相关信息如下表
| 特性 | Dockerfile VOLUME | docker run -v |
|------|-------------------|---------------|
| **定义时机** | 镜像构建时 | 容器运行时 |
@@ -232,16 +212,8 @@ volumes:
### 7.8.10 安全注意事项
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 概述
总体概述了以下内容
#### 匿名卷可能导致数据丢失
运行以下命令
```bash
## 使用 --rm 运行的容器,匿名卷会在容器删除时一起删除
@@ -261,8 +233,6 @@ $ docker run -v mysql_data:/var/lib/mysql mysql:8.0
### 7.8.11 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1. 定义必须持久化的路径
如下代码块所示展示了相关示例

View File

@@ -1,7 +1,5 @@
## 7.9 EXPOSE 声明端口
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 7.9.1 基本语法
如下代码块所示展示了相关示例
@@ -37,8 +35,6 @@ EXPOSE 53/udp
### 7.9.3 EXPOSE 的作用
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1. 文档说明
告诉镜像使用者容器将在哪些端口提供服务
@@ -76,8 +72,6 @@ $ docker port $(docker ps -q)
### 7.9.4 EXPOSE vs -p
相关信息如下表
| 特性 | EXPOSE | -p |
|------|--------|-----|
| **位置** | Dockerfile | docker run 命令 |
@@ -92,10 +86,6 @@ flowchart TD
Expose ~~~ Run
```
#### 概述
总体概述了以下内容
#### 没有 EXPOSE 也能 -p
如下代码块所示展示了相关示例
@@ -119,8 +109,6 @@ $ docker run -p 8080:80 mynginx
### 7.9.5 常见误解
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 误解EXPOSE 会打开端口
如下代码块所示展示了相关示例
@@ -160,8 +148,6 @@ $ docker run -p 8080:80 nginx # 2. 映射:宿主机 8080 → 容器 80
### 7.9.6 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1. 总是声明应用使用的端口
如下代码块所示展示了相关示例

View File

@@ -1,7 +1,5 @@
# 第七章 Dockerfile 指令详解
本节涵盖了相关内容与详细描述主要探讨以下几个方面
## 什么是 Dockerfile
Dockerfile 是一个文本文件其內包含了一条条的 **指令 (Instruction)**每一条指令构建一层therefore 每一条指令的内容就是描述该层应当如何构建
@@ -19,10 +17,6 @@ Dockerfile 是一个文本文件,其內包含了一条条的 **指令 (Instruc
Dockerfile 一般分为四部分基础镜像信息维护者信息镜像操作指令和容器启动时执行指令
### 概述
总体概述了以下内容
### 指令详解
本章将详细讲解 Dockerfile 中的各个指令

View File

@@ -1,7 +1,5 @@
## 7.19 本章小结
相关信息如下表
| 要点 | 说明 |
|------|------|
| **作用** | 设置后续指令的工作目录 |