mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-11 12:21:17 +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 @@
|
||||
|
||||
从 Docker 镜像仓库获取镜像可谓是 Docker 运作的第一步。本节将介绍如何使用 `docker pull` 命令下载镜像,以及如何理解下载过程。
|
||||
|
||||
### docker pull 命令
|
||||
### 4.1.1 docker pull 命令
|
||||
|
||||
从镜像仓库获取镜像的命令是 `docker pull`:
|
||||
|
||||
@@ -61,7 +61,7 @@ $ docker pull ghcr.io/username/myapp:v1.0
|
||||
|
||||
---
|
||||
|
||||
### 下载过程解析
|
||||
### 4.1.2 下载过程解析
|
||||
|
||||
当我们执行 `docker pull` 命令时,Docker 会输出详细的下载进度。让我们以 `ubuntu:24.04` 为例来解析这些信息。
|
||||
|
||||
@@ -108,7 +108,7 @@ flowchart TD
|
||||
|
||||
---
|
||||
|
||||
### 常用选项
|
||||
### 4.1.3 常用选项
|
||||
|
||||
`docker pull` 命令支持多种选项来满足不同的下载需求,例如下载所有标签、指定平台架构等。
|
||||
|
||||
@@ -132,7 +132,7 @@ $ docker pull --platform linux/amd64 nginx
|
||||
|
||||
---
|
||||
|
||||
### 拉取后运行
|
||||
### 4.1.4 拉取后运行
|
||||
|
||||
拉取镜像后,可以基于它启动容器:
|
||||
|
||||
@@ -162,7 +162,7 @@ root@e7009c6ce357:/# exit
|
||||
|
||||
---
|
||||
|
||||
### 镜像加速
|
||||
### 4.1.5 镜像加速
|
||||
|
||||
从 Docker Hub 下载可能较慢。可以配置镜像加速器:
|
||||
|
||||
@@ -190,7 +190,7 @@ $ sudo systemctl restart docker # Linux
|
||||
|
||||
---
|
||||
|
||||
### 验证镜像完整性
|
||||
### 4.1.6 验证镜像完整性
|
||||
|
||||
为了确保下载的镜像没有被篡改且内容一致,我们可以校验镜像的摘要 (Digest)。
|
||||
|
||||
@@ -216,7 +216,7 @@ $ docker pull ubuntu@sha256:4bc3ae6596938cb0d9e5ac51a1152ec9dcac2a1c50829c74abd9
|
||||
|
||||
---
|
||||
|
||||
### 常见问题
|
||||
### 4.1.7 常见问题
|
||||
|
||||
在使用 `docker pull` 过程中,可能会遇到下载速度慢、镜像不存在或磁盘空间不足等问题。以下是一些常见问题的排查思路。
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
在下载了镜像后,我们可以使用 `docker image ls` 命令列出本地主机上的镜像。
|
||||
|
||||
### 基本用法
|
||||
### 4.2.1 基本用法
|
||||
|
||||
查看本地已下载的镜像:
|
||||
|
||||
@@ -19,7 +19,7 @@ ubuntu noble 329ed837d508 3 days ago 78MB
|
||||
|
||||
---
|
||||
|
||||
### 输出字段说明
|
||||
### 4.2.2 输出字段说明
|
||||
|
||||
`docker image ls` 命令默认输出的列表包含仓库名、标签、镜像 ID、创建时间和占用空间等信息。
|
||||
|
||||
@@ -41,7 +41,7 @@ ubuntu noble 329ed837d508 3 days ago 78MB
|
||||
|
||||
---
|
||||
|
||||
### 理解镜像大小
|
||||
### 4.2.3 理解镜像大小
|
||||
|
||||
Docker 镜像的大小可能与我们通常理解的文件大小有所不同,这涉及到分层存储的概念。
|
||||
|
||||
@@ -83,7 +83,7 @@ Build Cache 0 0 0B 0B
|
||||
|
||||
---
|
||||
|
||||
### 过滤镜像
|
||||
### 4.2.4 过滤镜像
|
||||
|
||||
随着本地镜像数量的增加,我们需要更有效的方式来查找特定的镜像。Docker 提供了多种过滤方式。
|
||||
|
||||
@@ -139,7 +139,7 @@ $ docker images -f label=maintainer=example@email.com
|
||||
|
||||
---
|
||||
|
||||
### 虚悬镜像
|
||||
### 4.2.5 虚悬镜像
|
||||
|
||||
在镜像列表里,你可能会看到一些仓库名和标签都为 `<none>` 的镜像,这类镜像被称为虚悬镜像。
|
||||
|
||||
@@ -174,7 +174,7 @@ $ docker image prune
|
||||
|
||||
---
|
||||
|
||||
### 中间层镜像
|
||||
### 4.2.6 中间层镜像
|
||||
|
||||
除了虚悬镜像,`docker image ls` 默认列出的只是顶层镜像。还有一种镜像是为了加速镜像构建、重复利用资源而存在的中间层镜像。
|
||||
|
||||
@@ -196,7 +196,7 @@ $ docker images -a
|
||||
|
||||
---
|
||||
|
||||
### 格式化输出
|
||||
### 4.2.7 格式化输出
|
||||
|
||||
为了配合脚本使用或展示更关注的信息,我们可以使用 `--format` 参数来自定义输出格式。
|
||||
|
||||
@@ -278,7 +278,7 @@ ubuntu 24.04 78MB
|
||||
|
||||
---
|
||||
|
||||
### 常用命令组合
|
||||
### 4.2.8 常用命令组合
|
||||
|
||||
运行以下命令:
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
当不再需要某个镜像时,我们可以将其删除以释放存储空间。本节介绍删除镜像的常用方法。
|
||||
|
||||
### 基本用法
|
||||
### 4.3.1 基本用法
|
||||
|
||||
使用 `docker image rm` 删除本地镜像:
|
||||
|
||||
@@ -14,7 +14,7 @@ $ docker image rm [选项] <镜像1> [<镜像2> ...]
|
||||
|
||||
---
|
||||
|
||||
### 镜像标识方式
|
||||
### 4.3.2 镜像标识方式
|
||||
|
||||
删除镜像时,可以使用多种方式指定镜像:
|
||||
|
||||
@@ -70,7 +70,7 @@ $ docker rmi nginx@sha256:b4f0e0bdeb578043c1ea6862f0d40cc4afe32a4a582f3be235a3b1
|
||||
|
||||
---
|
||||
|
||||
### 理解输出信息
|
||||
### 4.3.3 理解输出信息
|
||||
|
||||
执行删除命令后,Docker 会输出一系列的操作记录,理解这些信息有助于我们掌握镜像删除的机制。
|
||||
|
||||
@@ -122,7 +122,7 @@ flowchart TD
|
||||
|
||||
---
|
||||
|
||||
### 批量删除
|
||||
### 4.3.4 批量删除
|
||||
|
||||
手动一个一个删除镜像非常繁琐,Docker 提供了 `image prune` 命令和 shell 组合命令来实现批量清理。
|
||||
|
||||
@@ -178,7 +178,7 @@ $ docker image prune -a --filter "until=168h" # 7天前
|
||||
|
||||
---
|
||||
|
||||
### 删除失败的常见原因
|
||||
### 4.3.5 删除失败的常见原因
|
||||
|
||||
在删除镜像时,Docker 可能会提示错误并拒绝执行。这通常是为了防止误删正在使用的资源。
|
||||
|
||||
@@ -236,7 +236,7 @@ Error: image has dependent child images
|
||||
|
||||
---
|
||||
|
||||
### 常用过滤条件
|
||||
### 4.3.6 常用过滤条件
|
||||
|
||||
相关信息如下表:
|
||||
|
||||
@@ -250,7 +250,7 @@ Error: image has dependent child images
|
||||
|
||||
---
|
||||
|
||||
### 清理策略
|
||||
### 4.3.7 清理策略
|
||||
|
||||
针对不同的环境 (开发环境 vs 生产环境),我们应该采用不同的镜像清理策略。
|
||||
|
||||
|
||||
@@ -120,11 +120,11 @@ docker run --name web2 -d -p 81:80 nginx:v2
|
||||
|
||||
至此,我们第一次完成了定制镜像,使用的是 `docker commit` 命令,手动操作给旧的镜像添加了新的一层,形成新的镜像,对镜像多层存储应该有了更直观的感觉。
|
||||
|
||||
### 概述
|
||||
### 4.4.1 概述
|
||||
|
||||
总体概述了以下内容。
|
||||
|
||||
### 慎用 `docker commit`
|
||||
### 4.4.2 慎用 `docker commit`
|
||||
|
||||
使用 `docker commit` 命令虽然可以比较直观的帮助理解镜像分层存储的概念,但是实际环境中并不会这样使用。
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
Dockerfile 是一个文本文件,其内包含了一条条的 **指令 (Instruction)**,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
|
||||
|
||||
### 使用 docker init 快速创建 (推荐)
|
||||
### 4.5.1 使用 docker init 快速创建 (推荐)
|
||||
|
||||
Docker 提供了 `docker init` 命令,可以根据项目类型自动生成 Dockerfile、。dockerignore 和 compose.yaml 文件:
|
||||
|
||||
@@ -14,7 +14,7 @@ $ docker init
|
||||
|
||||
该命令会交互式地询问项目类型 (如 Go、Node.js、Python、Rust 等),并生成符合最佳实践的配置文件。对于新项目,这是推荐的起步方式。
|
||||
|
||||
### 手动创建 Dockerfile
|
||||
### 4.5.2 手动创建 Dockerfile
|
||||
|
||||
还以之前定制 `nginx` 镜像为例,这次我们使用 Dockerfile 来定制。
|
||||
|
||||
@@ -35,7 +35,7 @@ RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
|
||||
|
||||
这个 Dockerfile 很简单,一共就两行。涉及到了两条指令,`FROM` 和 `RUN`。
|
||||
|
||||
### FROM 指定基础镜像
|
||||
### 4.5.3 FROM 指定基础镜像
|
||||
|
||||
所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制。就像我们之前运行了一个 `nginx` 镜像的容器,再进行修改一样,基础镜像是必须指定的。而 `FROM` 就是指定 **基础镜像**,因此一个 `Dockerfile` 中 `FROM` 是必备的指令,并且必须是第一条指令。
|
||||
|
||||
@@ -54,7 +54,7 @@ FROM scratch
|
||||
|
||||
不以任何系统为基础,直接将可执行文件复制进镜像的做法并不罕见,对于 Linux 下静态编译的程序来说,并不需要有操作系统提供运行时支持,所需的一切库都已经在可执行文件里了,因此直接 `FROM scratch` 会让镜像体积更加小巧。使用 [Go 语言](https://golang.google.cn/)开发的应用很多会使用这种方式来制作镜像,这也是有人认为 Go 是特别适合容器微服务架构的语言的原因之一。
|
||||
|
||||
### RUN 执行命令
|
||||
### 4.5.4 RUN 执行命令
|
||||
|
||||
`RUN` 指令是用来执行命令行命令的。由于命令行的强大能力,`RUN` 指令在定制镜像时是最常用的指令之一。其格式有两种:
|
||||
|
||||
@@ -76,7 +76,7 @@ Dockerfile 中每一个指令都会建立一层,`RUN` 也不例外。每一个
|
||||
|
||||
要想编写优秀的 `Dockerfile`,必须了解每一条指令的作用和副作用。在 **[第七章 Dockerfile 指令详解](../07_dockerfile/README.md)** 中,我们将对 `COPY`,`ADD`,`CMD`,`ENTRYPOINT` 等指令进行详细讲解。
|
||||
|
||||
### 构建镜像
|
||||
### 4.5.5 构建镜像
|
||||
|
||||
好了,让我们再回到之前定制的 nginx 镜像的 Dockerfile 来。现在我们明白了这个 Dockerfile 的内容,那么让我们来构建这个镜像吧。
|
||||
|
||||
@@ -104,7 +104,7 @@ docker build [选项] <上下文路径/URL/->
|
||||
|
||||
在这里我们指定了最终镜像的名称 `-t nginx:v3`,构建成功后,我们可以像之前运行 `nginx:v2` 那样来运行这个镜像,其结果会和 `nginx:v2` 一样。
|
||||
|
||||
### 镜像构建上下文
|
||||
### 4.5.6 镜像构建上下文
|
||||
|
||||
如果注意,会看到 `docker build` 命令最后有一个 `.`。`.` 表示当前目录,而 `Dockerfile` 就在当前目录,因此不少初学者以为这个路径是在指定 `Dockerfile` 所在路径,这么理解其实是不准确的。如果对应上面的命令格式,你可能会发现,这是在指定 **上下文路径**。那么什么是上下文呢?
|
||||
|
||||
@@ -144,7 +144,7 @@ Sending build context to Docker daemon 2.048 kB
|
||||
|
||||
当然,一般大家习惯性的会使用默认的文件名 `Dockerfile`,以及会将其置于镜像构建上下文目录中。
|
||||
|
||||
### 其它 `docker build` 的用法
|
||||
### 4.5.7 其它 `docker build` 的用法
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
除了标准的使用 `Dockerfile` 生成镜像的方法外,由于各种特殊需求和历史原因,还提供了一些其它方法用以生成镜像。
|
||||
|
||||
### 从 rootfs 压缩包导入
|
||||
### 4.6.1 从 rootfs 压缩包导入
|
||||
|
||||
格式:`docker import [选项] <文件>|<URL>|- [<仓库名>[:<标签>]]`
|
||||
|
||||
@@ -37,7 +37,7 @@ IMAGE CREATED CREATED BY SIZE
|
||||
f477a6e18e98 About a minute ago 214.9 MB Imported from http://download.openvz.org/template/precreated/ubuntu-16.04-x86_64.tar.gz
|
||||
```
|
||||
|
||||
### Docker 镜像的导入和导出 `docker save` 和 `docker load`
|
||||
### 4.6.2 Docker 镜像的导入和导出 `docker save` 和 `docker load`
|
||||
|
||||
Docker 还提供了 `docker save` 和 `docker load` 命令,用以将镜像保存为一个文件,然后传输到另一个位置上,再加载进来。这是在没有 Docker Registry 时的做法,现在已经不推荐,镜像迁移应该直接使用 Docker Registry,无论是直接使用 Docker Hub 还是使用内网私有 Registry 都可以。
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
Docker 镜像是怎么实现增量的修改和维护的?为什么容器启动如此之快?这一切都归功于 Docker 的镜像分层存储设计。
|
||||
|
||||
### 镜像与分层存储
|
||||
### 4.7.1 镜像与分层存储
|
||||
|
||||
在之前的章节中,我们一直强调镜像包含操作系统完整的 `root` 文件系统,其体积往往是庞大的。因此在 Docker 设计时,就充分利用 **Union FS** 的技术,将其设计为分层存储的架构。
|
||||
|
||||
@@ -17,7 +17,7 @@ Docker 镜像并不是一个单纯的文件,而是由一组文件系统叠加
|
||||
* **复用**:如果多个镜像都基于同一个基础镜像 (例如都基于 `ubuntu:24.04`),那么宿主机只需要下载一份 `ubuntu:24.04`,所有镜像都可以共享它。
|
||||
* **轻量**:镜像仅仅记录了与基础镜像的差异,因此体积非常小。
|
||||
|
||||
### 容器层与读写
|
||||
### 4.7.2 容器层与读写
|
||||
|
||||
我们要理解的一个关键概念是:**镜像的每一层都是只读的 (Read-only)**。
|
||||
|
||||
@@ -48,7 +48,7 @@ flowchart TD
|
||||
1. **容器删除后数据会丢失**:因为所有的数据修改都保存在最上层的容器层中,容器销毁时,这个层也就随之销毁了。(除非使用了数据卷,详见[数据管理](../08_data_network/README.md))。
|
||||
2. **镜像不可变**:无论我们在容器里删除了多少文件,基础镜像的体积并不会减小,因为它们依然存在于底层的只读层中。
|
||||
|
||||
### 内容寻址与镜像 ID
|
||||
### 4.7.3 内容寻址与镜像 ID
|
||||
|
||||
Docker 镜像的每一层都有一个唯一的 ID,这个 ID 是根据该层的内容计算出来的哈希值 (SHA256)。这意味着:
|
||||
|
||||
@@ -56,7 +56,7 @@ Docker 镜像的每一层都有一个唯一的 ID,这个 ID 是根据该层的
|
||||
* **安全性**:确保了镜像内容的完整性,下载过程中如果数据损坏,ID 校验就会失败。
|
||||
* **去重**:如果两个不同的镜像 (甚至是不同来源的镜像) 包含相同的层 (ID 相同),Docker 引擎在本地只会存储一份,绝不重复下载。
|
||||
|
||||
### 联合文件系统
|
||||
### 4.7.4 联合文件系统
|
||||
|
||||
Docker 使用联合文件系统 (Union FS) 来实现这种分层挂载。常见的驱动包括 `overlay2` (目前推荐)、`aufs` (早期使用)、`btrfs`、`zfs` 等。
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 本章小结
|
||||
## 4.8 本章小结
|
||||
|
||||
相关信息如下表:
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
| 指定平台 | `docker pull --platform linux/amd64 镜像名` |
|
||||
| 用摘要拉取 | `docker pull 镜像名@sha256:...` |
|
||||
|
||||
### 延伸阅读
|
||||
### 4.8.1 延伸阅读
|
||||
|
||||
- [列出镜像](4.2_list.md):查看本地镜像
|
||||
- [删除镜像](4.3_rm.md):清理本地镜像
|
||||
@@ -26,7 +26,7 @@
|
||||
| 自定义格式 | `docker images --format "..."` |
|
||||
| 查看空间占用 | `docker system df` |
|
||||
|
||||
### 延伸阅读
|
||||
### 4.8.2 延伸阅读
|
||||
|
||||
- [获取镜像](4.1_pull.md):从 Registry 拉取镜像
|
||||
- [删除镜像](4.3_rm.md):清理本地镜像
|
||||
@@ -41,7 +41,7 @@
|
||||
| 批量删除 | `docker rmi $(docker images -q -f ...)` |
|
||||
| 查看空间占用 | `docker system df` |
|
||||
|
||||
### 延伸阅读
|
||||
### 4.8.3 延伸阅读
|
||||
|
||||
- [列出镜像](4.2_list.md):查看和过滤镜像
|
||||
- [删除容器](../05_container/5.6_rm.md):清理容器
|
||||
|
||||
Reference in New Issue
Block a user