diff --git a/02_basic_concept/2.1_image.md b/02_basic_concept/2.1_image.md
index 0c55cce..6fbbb5e 100644
--- a/02_basic_concept/2.1_image.md
+++ b/02_basic_concept/2.1_image.md
@@ -82,24 +82,24 @@ flowchart TD
#### 分层是如何工作的?
-笔者用一个实际的 Dockerfile 来解释分层:
+笔者用一个更贴近最佳实践的 Dockerfile 来解释分层:
```docker
-FROM ubuntu:24.04 # 第 1 层:基础系统(约 78MB)
-RUN apt-get update # 第 2 层:更新包索引
-RUN apt-get install nginx # 第 3 层:安装 nginx
-COPY app.conf /etc/nginx/ # 第 4 层:复制配置文件
+FROM ubuntu:24.04 # 第 1 层:基础系统(约 78MB)
+RUN apt-get update && apt-get install -y nginx # 第 2 层:更新索引并安装 nginx
+COPY app.conf /etc/nginx/ # 第 3 层:复制配置文件
```
+这里特意把 `apt-get update` 和 `apt-get install` 放在同一个 `RUN` 里,避免构建缓存导致包索引过期。
+
构建后的镜像结构:
```mermaid
flowchart TD
- Layer4["第 4 层: COPY app.conf (只读)
← 最新添加的层"]
- Layer3["第 3 层: nginx 安装文件 (只读)"]
- Layer2["第 2 层: apt 缓存更新 (只读)"]
+ Layer3["第 3 层: COPY app.conf (只读)
← 最新添加的层"]
+ Layer2["第 2 层: nginx 安装文件与包索引 (只读)"]
Layer1["第 1 层: Ubuntu 基础系统 (只读)
← 基础镜像层"]
- Layer4 --> Layer3 --> Layer2 --> Layer1
+ Layer3 --> Layer2 --> Layer1
```
每一层的特点:
@@ -137,7 +137,7 @@ RUN apt-get update && \
```
-### 2.1.5 查看镜像的分层
+### 2.1.5 查看镜像的构建历史
```bash
## 查看镜像的历史(每层的构建记录)
@@ -152,6 +152,7 @@ a6bd71f48f68 2 weeks ago CMD ["nginx" "-g" "daemon off;"] 0B
2 weeks ago COPY 30-tune-worker-processes.sh /docker-ent… 4.62kB
...
```
+需要注意:`docker history` 展示的是镜像的构建历史。像 `CMD`、`ENTRYPOINT`、`EXPOSE`、`STOPSIGNAL` 这类 `0B` 项主要是镜像配置元数据,并不等同于新增了可见的文件系统内容;真正占用空间的通常是 `RUN`、`COPY`、`ADD` 等带来的文件变化。
### 2.1.6 镜像的标识
diff --git a/02_basic_concept/2.2_container.md b/02_basic_concept/2.2_container.md
index 5fd9669..0fb11fa 100644
--- a/02_basic_concept/2.2_container.md
+++ b/02_basic_concept/2.2_container.md
@@ -26,11 +26,11 @@ flowchart TD
C1["• 独立进程空间
• 独立网络环境
• 独立文件系统
• 独立用户空间"]
end
```
-这种隔离是通过 Linux 内核的 **Namespace** 技术实现的。具体表现为:
+这种隔离主要通过 Linux 内核的 **Namespace** 实现,资源限制通常与 **cgroups** 配合。具体表现为:
- **进程空间**:容器看不到宿主机上的其他进程。
-- **网络**:容器拥有独立的 IP、端口等网络资源。
+- **网络**:在默认网络模式下,容器通常拥有独立的网络命名空间,并可分配独立 IP;使用 `host` 或 `container:` 等模式时则例外。
- **文件系统**:容器拥有独立的 root 目录。
-- **用户**:容器内的 root 用户不等于宿主机的 root 用户。
+- **用户**:默认情况下,容器内的 `root` 仍是 `uid 0`,但通常只拥有受限 capabilities;如果启用 `userns-remap` 或 rootless 等机制,还会进一步映射为宿主机上的低权限用户。
### 2.2.3 容器 vs 虚拟机:核心区别
@@ -68,10 +68,10 @@ flowchart TD
```
| 特性 | 容器 | 虚拟机 |
|------|------|--------|
-| **隔离级别** | 进程级 (Namespace)| 硬件级 (Hypervisor)|
-| **启动时间** | 秒级 (甚至毫秒)| 分钟级 |
-| **资源占用** | MB 级别 | GB 级别 |
-| **性能损耗** | 几乎为零 | 5-20% |
+| **隔离级别** | 操作系统级 (Namespaces/cgroups) | 硬件虚拟化级 (Hypervisor) |
+| **启动时间** | 通常更快 | 通常更慢 |
+| **资源占用** | 通常更低 | 通常更高 |
+| **运行开销** | 通常更接近原生 | 通常有更高虚拟化开销 |
| **内核** | 共享宿主机内核 | 各自独立内核 |
### 2.2.4 容器的存储层
@@ -147,7 +147,7 @@ $ docker run -v /host/path:/container/path nginx
### 2.2.5 容器的生命周期
-掌握容器的生命周期对于管理和调试 Docker 应用非常重要。如图 2-1 所示,容器会经历从创建到删除的完整状态流转。
+掌握容器的生命周期对于管理和调试 Docker 应用非常重要。如图 2-1 所示,这里先聚焦最常见的创建、运行、暂停、停止和删除流转;Docker CLI 中还可能看到 `restarting`、`removing`、`dead` 等状态。
```mermaid
stateDiagram-v2
@@ -166,7 +166,7 @@ stateDiagram-v2
```
图 2-1:容器生命周期状态流转图
-#### 常用生命周期命令
+常用生命周期命令如下:
```bash
## 创建并启动容器(最常用)
@@ -211,10 +211,12 @@ $ docker rm -f abc123 # 强制删除运行中的容器
$ docker run ubuntu
-## 这个容器会持续运行(nginx 作为守护进程持续运行)
+## 这个容器会持续运行(官方 nginx 镜像让 nginx 在前台运行)
$ docker run nginx
```
+官方 `nginx` 镜像默认使用 `nginx -g 'daemon off;'`,让主进程保持在前台运行,这样容器才会持续处于运行状态。
+
详细解释请参考[后台运行](../05_container/5.2_daemon.md)章节。
### 2.2.7 容器的隔离性
diff --git a/02_basic_concept/2.3_repository.md b/02_basic_concept/2.3_repository.md
index 0c7dd2a..2b352e6 100644
--- a/02_basic_concept/2.3_repository.md
+++ b/02_basic_concept/2.3_repository.md
@@ -81,7 +81,7 @@ jwilder/nginx-proxy:latest
## 其他 Registry
ghcr.io/username/myapp:v1.0
-gcr.io/google-containers/pause:3.10
+us-west1-docker.pkg.dev/my-project/my-repo/myapp:v1.0
```
> 💡 **笔者提示**:如果不指定 Registry 地址,默认使用 Docker Hub。如果不指定标签,默认使用 `latest`。
@@ -97,7 +97,7 @@ gcr.io/google-containers/pause:3.10
- 拥有大量[官方镜像](https://hub.docker.com/search?q=&type=image&image_filter=official) (nginx、mysql、redis 等)
- 免费账户可以创建公开仓库
-- 付费账户支持私有仓库
+- 免费个人账户可创建 1 个私有仓库;更高套餐支持更多私有仓库
```bash
## 从 Docker Hub 拉取镜像
@@ -118,11 +118,13 @@ $ docker push username/myapp:v1.0
| Registry | 地址 | 说明 |
|----------|------|------|
| **GitHub Container Registry** | ghcr.io | GitHub 提供,与 GitHub Actions 集成好 |
-| **Google Container Registry** | gcr.io | Google Cloud 提供,Kubernetes 镜像常用 |
+| **Google Artifact Registry** | LOCATION-docker.pkg.dev | Google Cloud 当前推荐;也支持迁移后的 `gcr.io` 兼容域名 |
| **Quay.io** | quay.io | Red Hat 提供 |
| **阿里云容器镜像服务** | registry.cn-*.aliyuncs.com | 国内访问快 |
| **腾讯云容器镜像服务** | ccr.ccs.tencentyun.com | 国内访问快 |
+Google 的 Container Registry 已废弃并完成下线,当前应优先使用 Artifact Registry;如果已经完成迁移,部分 `gcr.io` 域名请求会被兼容到 Artifact Registry。
+
### 2.3.4 镜像加速器
由于网络原因,在国内直接访问 Docker Hub 可能会很慢。可以配置 **镜像加速器** (Registry Mirror) 来加速下载。配置示例如下:
diff --git a/02_basic_concept/README.md b/02_basic_concept/README.md
index 93677f7..121ee81 100644
--- a/02_basic_concept/README.md
+++ b/02_basic_concept/README.md
@@ -8,8 +8,6 @@
理解了这三个概念,就理解了 **Docker** 的整个生命周期。
-## 本章内容
-
* [Docker 镜像](2.1_image.md)
* [Docker 容器](2.2_container.md)
* [Docker 仓库](2.3_repository.md)
diff --git a/02_basic_concept/summary.md b/02_basic_concept/summary.md
index a0a8a0a..0bbb891 100644
--- a/02_basic_concept/summary.md
+++ b/02_basic_concept/summary.md
@@ -19,22 +19,7 @@
| **Docker Hub** | 默认的公共 Registry |
| **私有 Registry** | 企业内部使用,推荐 Harbor |
-现在你已经了解了 Docker 的三个核心概念:[镜像](2.1_image.md)、[容器](2.2_container.md)和仓库。接下来,让我们开始[安装 Docker](../03_install/README.md),动手实践!
-
-### 延伸阅读
-
-- [获取镜像](../04_image/4.1_pull.md):从 Registry 下载镜像
-- [使用 Dockerfile 定制镜像](../04_image/4.5_build.md):创建自己的镜像
-- [Dockerfile 最佳实践](../appendix/best_practices.md):构建高质量镜像的技巧
-- [底层实现 - 联合文件系统](../12_implementation/12.4_ufs.md):深入理解分层存储的技术原理
-- [启动容器](../05_container/5.1_run.md):详细的容器启动选项
-- [后台运行](../05_container/5.2_daemon.md):理解容器为什么会“立即退出”
-- [进入容器](../05_container/5.4_attach_exec.md):如何操作运行中的容器
-- [数据管理](../08_data/README.md):Volume 和数据持久化详解
-- [Docker Hub](../06_repository/6.1_dockerhub.md):Docker Hub 的详细使用
-- [私有仓库](../06_repository/6.2_registry.md):搭建私有 Registry
-- [私有仓库高级配置](../06_repository/6.3_registry_auth.md):认证、TLS 配置
-- [镜像加速器](../03_install/3.9_mirror.md):配置镜像加速
+现在你已经了解了 Docker 的三个核心概念:[镜像](2.1_image.md)、[容器](2.2_container.md) 和仓库。接下来,让我们开始 [安装 Docker](../03_install/README.md),动手实践!
---
> 📝 **发现错误或有改进建议?** 欢迎提交 [Issue](https://github.com/yeasy/docker_practice/issues) 或 [PR](https://github.com/yeasy/docker_practice/pulls)。