From b5830eb690415f1ae06959e5b41d56639c296752 Mon Sep 17 00:00:00 2001 From: yeasy Date: Mon, 16 Mar 2026 00:32:49 -0700 Subject: [PATCH] Polish Docker workflow formatting --- 02_basic_concept/2.1_image.md | 2 +- 02_basic_concept/2.2_container.md | 2 +- 03_install/3.6_offline.md | 10 ++-- 04_image/4.2_list.md | 2 +- 04_image/4.3_rm.md | 2 +- 04_image/4.5_build.md | 2 +- 05_container/5.2_daemon.md | 4 +- 05_container/5.3_stop.md | 2 +- 05_container/5.4_attach_exec.md | 4 +- 05_container/5.6_rm.md | 2 +- 06_repository/6.1_dockerhub.md | 2 +- 07_dockerfile/7.11_user.md | 2 +- 07_dockerfile/7.14_label.md | 4 +- 07_dockerfile/7.1_run.md | 2 +- 07_dockerfile/7.2_copy.md | 2 +- 07_dockerfile/7.3_add.md | 4 +- 07_dockerfile/7.4_cmd.md | 2 +- 07_dockerfile/7.5_entrypoint.md | 2 +- 08_data/8.1_volume.md | 8 +-- 08_data/8.2_bind-mounts.md | 4 +- 09_network/9.1_dns.md | 2 +- 09_network/9.2_network_types.md | 2 +- 09_network/9.7_advanced_networking.md | 4 +- 10_buildx/10.3_multi-arch-images.md | 2 +- 11_compose/11.8_wordpress.md | 2 +- 12_implementation/12.1_arch.md | 66 +++++++++------------- 12_implementation/12.4_ufs.md | 2 +- 13_kubernetes_concepts/13.1_intro.md | 10 ++-- 14_kubernetes_setup/14.1_kubeadm.md | 2 +- 14_kubernetes_setup/14.2_kubeadm-docker.md | 4 +- 14_kubernetes_setup/14.6_systemd.md | 2 +- 16_cloud/16.2_tencentCloud.md | 4 +- 16_cloud/16.3_alicloud.md | 2 +- 16_cloud/16.5_multicloud.md | 4 +- 18_security/18.3_daemon_sec.md | 2 +- 18_security/18.5_other_feature.md | 2 +- 19_observability/19.1_prometheus.md | 2 +- 19_observability/19.2_elk.md | 2 +- 21_case_devops/21.7_practical_examples.md | 2 +- README.md | 2 +- appendix/command/dockerd.md | 2 +- appendix/example_guidelines.md | 2 +- appendix/faq/README.md | 4 +- appendix/learning_roadmap.md | 36 ++++++------ 44 files changed, 107 insertions(+), 121 deletions(-) diff --git a/02_basic_concept/2.1_image.md b/02_basic_concept/2.1_image.md index 702b6b0..f8dbdfc 100644 --- a/02_basic_concept/2.1_image.md +++ b/02_basic_concept/2.1_image.md @@ -178,7 +178,7 @@ ubuntu:24.04 nginx # 等同于 nginx:latest ``` -#### 2. 镜像 ID (Content-Addressable) +#### 2. 镜像 ID:Content-Addressable 标识 每个镜像有一个基于内容计算的唯一 ID: diff --git a/02_basic_concept/2.2_container.md b/02_basic_concept/2.2_container.md index 248c1b1..3fc68fe 100644 --- a/02_basic_concept/2.2_container.md +++ b/02_basic_concept/2.2_container.md @@ -95,7 +95,7 @@ flowchart TD ContainerLayer --> ImageLayerN --> ImageLayerN1 --> Dots --> ImageLayer1 ``` -#### Copy-on-Write (写时复制) +#### Copy-on-Write:写时复制 当容器需要修改镜像层中的文件时: diff --git a/03_install/3.6_offline.md b/03_install/3.6_offline.md index 49de2f8..624ef95 100644 --- a/03_install/3.6_offline.md +++ b/03_install/3.6_offline.md @@ -12,7 +12,7 @@ > 注意:以下命令以 CentOS 7 为例。对于 CentOS Stream 9、Rocky Linux 9 或 AlmaLinux 9,请将 `yum` 替换为 `dnf`,并将软件包后缀 `el7` 替换为 `el9`。 -#### YUM 本地文件安装 (推荐) +#### YUM 本地文件安装:推荐 推荐这种方式,是因为在生产环境中一般会选定某个指定的文档软件版本使用。 @@ -78,7 +78,7 @@ Total exiting because "Download Only" specified ``` -##### 复制到目标服务器之后进入文件夹安装 (C-N) +##### 复制到目标服务器之后进入文件夹安装:C-N * 离线安装时,必须使用 rpm 命令不检查依赖的方式安装 @@ -86,7 +86,7 @@ exiting because "Download Only" specified rpm -Uvh *.rpm --nodeps --force ``` -##### 锁定软件版本 (C-N) +##### 锁定软件版本:C-N **下载锁定版本软件** @@ -228,7 +228,7 @@ reposync -r docker-ce-stable -p /tmp/docker-ce/ createrepo /var/www/html/docker-ce/ ``` -##### YUM 客户端设置 (C...N) +##### YUM 客户端设置:C...N ```bash rm -f /etc/yum.repos.d/* @@ -253,7 +253,7 @@ EOF ``` -##### Docker 安装 (C...N) +##### Docker 安装:C...N ```bash sudo yum makecache fast diff --git a/04_image/4.2_list.md b/04_image/4.2_list.md index 103a75b..45c9a92 100644 --- a/04_image/4.2_list.md +++ b/04_image/4.2_list.md @@ -162,7 +162,7 @@ $ docker image prune 除了虚悬镜像,`docker image ls` 默认列出的只是顶层镜像。还有一种镜像是为了加速镜像构建、重复利用资源而存在的中间层镜像。 -#### 查看所有镜像 (包含中间层) +#### 查看所有镜像:包含中间层 ```bash $ docker images -a diff --git a/04_image/4.3_rm.md b/04_image/4.3_rm.md index eb2af61..cfa6d8d 100644 --- a/04_image/4.3_rm.md +++ b/04_image/4.3_rm.md @@ -208,7 +208,7 @@ Untagged: ubuntu:24.04 当同一个镜像有多个标签时,`docker rmi` 只是删除指定的标签,不会删除镜像本身。 -#### 原因三:被其他镜像依赖 (中间层) +#### 原因三:被其他镜像依赖:中间层 ```bash $ docker rmi some_base_image diff --git a/04_image/4.5_build.md b/04_image/4.5_build.md index cffe686..7194f0d 100644 --- a/04_image/4.5_build.md +++ b/04_image/4.5_build.md @@ -4,7 +4,7 @@ Dockerfile 是一个文本文件,其内包含了一条条的 **指令 (Instruction)**,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。 -### 4.5.1 使用 docker init 快速创建 (推荐) +### 4.5.1 使用 docker init 快速创建:推荐 Docker 提供了 `docker init` 命令,可以根据项目类型自动生成 Dockerfile、.dockerignore 和 compose.yaml 文件: diff --git a/05_container/5.2_daemon.md b/05_container/5.2_daemon.md index ff6fc63..9032ab3 100644 --- a/05_container/5.2_daemon.md +++ b/05_container/5.2_daemon.md @@ -13,7 +13,7 @@ Docker 容器默认是 **前台运行** 的。使用 `-d` (detach) 参数可以 ### 5.2.2 基本使用 -#### 前台运行 (默认) +#### 前台运行:默认 ```bash $ docker run ubuntu:24.04 /bin/sh -c "while true; do echo hello world; sleep 1; done" @@ -29,7 +29,7 @@ hello world - 按 `Ctrl+C` 会终止容器 - 关闭终端窗口,容器也会停止 -#### 后台运行 (使用 -d 参数) +#### 后台运行:使用 -d 参数 ```bash $ docker run -d ubuntu:24.04 /bin/sh -c "while true; do echo hello world; sleep 1; done" diff --git a/05_container/5.3_stop.md b/05_container/5.3_stop.md index 3b5b00a..d09928f 100644 --- a/05_container/5.3_stop.md +++ b/05_container/5.3_stop.md @@ -14,7 +14,7 @@ --- -### 5.3.2 docker stop (推荐) +### 5.3.2 docker stop:推荐 #### docker stop 基本用法 diff --git a/05_container/5.4_attach_exec.md b/05_container/5.4_attach_exec.md index b2fe77d..ad297e7 100644 --- a/05_container/5.4_attach_exec.md +++ b/05_container/5.4_attach_exec.md @@ -22,7 +22,7 @@ Docker 提供两种进入容器的命令: --- -### 5.4.3 docker exec (推荐) +### 5.4.3 docker exec:推荐 #### docker exec 基本用法 @@ -109,7 +109,7 @@ root@69d137adef7a:/# # 有提示符 --- -### 5.4.4 docker attach (谨慎使用) +### 5.4.4 docker attach:谨慎使用 #### docker attach 基本用法 diff --git a/05_container/5.6_rm.md b/05_container/5.6_rm.md index bbf0383..dabc6f8 100644 --- a/05_container/5.6_rm.md +++ b/05_container/5.6_rm.md @@ -78,7 +78,7 @@ Total reclaimed space: 150MB $ docker container prune -f ``` -#### 删除所有容器 (包括运行中的) +#### 删除所有容器:包括运行中的 ```bash ## 先停止所有容器,再删除 diff --git a/06_repository/6.1_dockerhub.md b/06_repository/6.1_dockerhub.md index f1994f4..60fa88e 100644 --- a/06_repository/6.1_dockerhub.md +++ b/06_repository/6.1_dockerhub.md @@ -94,7 +94,7 @@ $ docker push username/myapp:v1 ### 6.1.4 安全最佳实践 -#### 1. 启用 2FA (双因素认证) +#### 1. 启用 2FA:双因素认证 为了保护您的 Docker Hub 账号安全,我们建议采取以下措施。 diff --git a/07_dockerfile/7.11_user.md b/07_dockerfile/7.11_user.md index b6686bc..a5c415a 100644 --- a/07_dockerfile/7.11_user.md +++ b/07_dockerfile/7.11_user.md @@ -112,7 +112,7 @@ RUN addgroup -g 1001 -S appgroup && \ ### 7.11.5 运行时切换用户 -#### 使用 gosu (推荐) +#### 使用 gosu:推荐 在 ENTRYPOINT 脚本中切换用户时,不要使用 `su` 或 `sudo`,应使用 [gosu](https://github.com/tianon/gosu): diff --git a/07_dockerfile/7.14_label.md b/07_dockerfile/7.14_label.md index 2acb7db..3be6587 100644 --- a/07_dockerfile/7.14_label.md +++ b/07_dockerfile/7.14_label.md @@ -28,7 +28,7 @@ LABEL version="1.0" LABEL description="这是一个 Web 应用服务器" ``` -#### 定义多个标签 (推荐) +#### 定义多个标签:推荐 ```docker LABEL maintainer="user@example.com" \ @@ -68,7 +68,7 @@ LABEL org.opencontainers.image.authors="yeasy" \ --- -### 7.14.5 MAINTAINER 指令 (已废弃) +### 7.14.5 MAINTAINER 指令:已废弃 旧版本的 Dockerfile 中常看到 `MAINTAINER` 指令: diff --git a/07_dockerfile/7.1_run.md b/07_dockerfile/7.1_run.md index 3887874..3e49768 100644 --- a/07_dockerfile/7.1_run.md +++ b/07_dockerfile/7.1_run.md @@ -40,7 +40,7 @@ RUN ["apt-get", "update"] ### 7.1.3 常见最佳实践 -#### 1. 组合命令 (减少层数) +#### 1. 组合命令:减少层数 每一个 `RUN` 指令都会新建一层镜像。为了减少镜像体积和层数,应使用 `&&` 连接命令。 diff --git a/07_dockerfile/7.2_copy.md b/07_dockerfile/7.2_copy.md index a2a8e79..657d1a6 100644 --- a/07_dockerfile/7.2_copy.md +++ b/07_dockerfile/7.2_copy.md @@ -84,7 +84,7 @@ COPY app[0-9].js /app/ # app0.js ~ app9.js COPY app.js /usr/src/app/ ``` -#### 相对路径 (基于 WORKDIR) +#### 相对路径:基于 WORKDIR ```docker WORKDIR /app diff --git a/07_dockerfile/7.3_add.md b/07_dockerfile/7.3_add.md index dbd7b4f..11dde46 100644 --- a/07_dockerfile/7.3_add.md +++ b/07_dockerfile/7.3_add.md @@ -30,7 +30,7 @@ ADD [选项] ["<源路径>", ... "<目标路径>"] ### 7.3.3 自动解压功能 -#### 基本用法 (自动解压本地 tar) +#### 基本用法:自动解压本地 tar ```docker ## 自动解压 tar.gz 到目标目录 @@ -71,7 +71,7 @@ app.tar.gz 包含: /app/ 目录结果: --- -### 7.3.4 URL 下载功能 (不推荐) +### 7.3.4 URL 下载功能:不推荐 #### 基本用法 diff --git a/07_dockerfile/7.4_cmd.md b/07_dockerfile/7.4_cmd.md index 83588ef..beba2bc 100644 --- a/07_dockerfile/7.4_cmd.md +++ b/07_dockerfile/7.4_cmd.md @@ -18,7 +18,7 @@ CMD 有三种格式: | **shell 格式** | `CMD 命令 参数1 参数2` | ⚠️ 简单场景 | | **参数格式** | `CMD [“参数1”, “参数2”]` | 配合 ENTRYPOINT | -#### exec 格式 (推荐) +#### exec 格式:推荐 ```docker CMD ["nginx", "-g", "daemon off;"] diff --git a/07_dockerfile/7.5_entrypoint.md b/07_dockerfile/7.5_entrypoint.md index f93a86a..1ca07ac 100644 --- a/07_dockerfile/7.5_entrypoint.md +++ b/07_dockerfile/7.5_entrypoint.md @@ -80,7 +80,7 @@ $ docker run myimage -v http://other.com # curl -s -v http://other.com ✓ ### 7.5.4 场景一:让镜像像命令一样使用 -#### 需求 (启动前准备) +#### 需求:启动前准备 创建一个查询公网 IP 的 “命令” 镜像。 diff --git a/08_data/8.1_volume.md b/08_data/8.1_volume.md index 597c2a0..85c94a5 100644 --- a/08_data/8.1_volume.md +++ b/08_data/8.1_volume.md @@ -29,7 +29,7 @@ flowchart LR ### 8.1.3 数据卷 vs 容器存储层 -#### 容器存储层 (不推荐存储重要数据) +#### 容器存储层:不推荐存储重要数据 ```mermaid graph TD @@ -43,7 +43,7 @@ graph TD Delete[容器删除] -->|导致| DataLost[数据丢失 ❌] ``` -#### 数据卷 (推荐) +#### 数据卷:推荐 ```mermaid graph TD @@ -105,7 +105,7 @@ $ docker volume inspect my-vol ### 8.1.5 挂载数据卷 -#### 方式一:--mount (推荐) +#### 方式一:--mount:推荐 ```bash $ docker run -d \ @@ -122,7 +122,7 @@ $ docker run -d \ | `target` | 容器内挂载路径 | | `readonly` | 可选,只读挂载 | -#### 方式二:-v (简写) +#### 方式二:-v:简写 ```bash $ docker run -d \ diff --git a/08_data/8.2_bind-mounts.md b/08_data/8.2_bind-mounts.md index 137201e..9d129e5 100644 --- a/08_data/8.2_bind-mounts.md +++ b/08_data/8.2_bind-mounts.md @@ -53,7 +53,7 @@ flowchart LR ### 8.2.3 基本语法 -#### 使用 --mount (推荐) +#### 使用 --mount:推荐 ```bash $ docker run -d \ @@ -61,7 +61,7 @@ $ docker run -d \ nginx ``` -#### 使用 -v (简写) +#### 使用 -v:简写 ```bash $ docker run -d \ diff --git a/09_network/9.1_dns.md b/09_network/9.1_dns.md index 04bba74..835a8cf 100644 --- a/09_network/9.1_dns.md +++ b/09_network/9.1_dns.md @@ -59,7 +59,7 @@ nameserver 114.114.114.114 $ docker run --dns-search=example.com myapp ``` -#### 3. --hostname (-h) +#### 3. --hostname 与 -h 设置容器的主机名。 diff --git a/09_network/9.2_network_types.md b/09_network/9.2_network_types.md index bb40d87..28e6058 100644 --- a/09_network/9.2_network_types.md +++ b/09_network/9.2_network_types.md @@ -22,7 +22,7 @@ ghi789... none null local | **overlay** | 跨主机网络 | Docker Swarm 集群 | | **macvlan** | 容器拥有独立 MAC 地址 | 需要直接接入物理网络 | -### 9.2.2 Bridge 网络 (默认) +### 9.2.2 Bridge 网络:默认 Bridge 是 Docker 默认使用的网络模式。Docker 启动时会自动创建 `docker0` 虚拟网桥,所有未指定网络的容器都会连接到这个网桥上。 diff --git a/09_network/9.7_advanced_networking.md b/09_network/9.7_advanced_networking.md index 9301a36..67a24c6 100644 --- a/09_network/9.7_advanced_networking.md +++ b/09_network/9.7_advanced_networking.md @@ -10,7 +10,7 @@ Overlay 网络在现有网络基础上建立虚拟网络,允许容器跨宿主 Overlay 网络通过隧道封装技术(通常是 VXLAN)将容器网络流量封装在宿主机物理网络的 UDP 数据包中传输。 -``` +```text 容器 A (192.168.0.2) ↓ veth 对 @@ -250,7 +250,7 @@ Docker 内置 DNS 服务器,但 DNS 解析涉及多个层面的配置。 #### DNS 解析流程 -``` +```text 容器应用 (dig www.example.com) ↓ 容器内 /etc/resolv.conf (127.0.0.11:53) diff --git a/10_buildx/10.3_multi-arch-images.md b/10_buildx/10.3_multi-arch-images.md index 9a71c7d..b3f7ec8 100644 --- a/10_buildx/10.3_multi-arch-images.md +++ b/10_buildx/10.3_multi-arch-images.md @@ -101,7 +101,7 @@ COPY bin/dist-${TARGETOS}-${TARGETARCH} /dist ENTRYPOINT ["/dist"] ``` -### 10.3.3 使用 `docker manifest` (底层工具) +### 10.3.3 使用 `docker manifest`:底层工具 除了 `docker buildx`,我们也可以直接操作 Manifest List 来手动组合不同架构的镜像。 diff --git a/11_compose/11.8_wordpress.md b/11_compose/11.8_wordpress.md index 9e2e91b..600bda8 100644 --- a/11_compose/11.8_wordpress.md +++ b/11_compose/11.8_wordpress.md @@ -79,7 +79,7 @@ networks: ### 11.8.3 配置文件详解 -#### 1. 环境变量 (.env) +#### 1. 环境变量文件 .env 为了安全,不要在 `compose.yaml` 中直接写密码。创建 `.env` 文件: diff --git a/12_implementation/12.1_arch.md b/12_implementation/12.1_arch.md index 614f1b8..83f830b 100644 --- a/12_implementation/12.1_arch.md +++ b/12_implementation/12.1_arch.md @@ -8,17 +8,10 @@ Docker 采用了 **C/S (客户端/服务端)** 架构。Client 向 Daemon 发送 ```mermaid graph LR - Client[客户端 (Docker CLI)] -- docker run --> Dockerd - Client -- docker pull --> Dockerd - - subgraph "Docker Host" - Dockerd(dockerd
守护进程) - Containers(Containers
容器) - Images(Images
镜像) - - Dockerd -- 管理 --> Containers - Dockerd -- 管理 --> Images - end + C1["客户端"] -->|docker run| D["dockerd\n守护进程"] + C1 -->|docker pull| D + D -->|管理| C2["Containers\n容器"] + D -->|管理| C3["Images\n镜像"] ``` --- @@ -27,11 +20,11 @@ graph LR Docker 的内部架构如同洋葱一样分层,每一层专注解决特定问题: -#### 1. Docker CLI (客户端) +#### 1. Docker CLI:客户端 用户与 Docker 交互的主要方式。它将用户命令 (如 `docker run`) 转换为 API 请求发送给 dockerd。 -#### 2. Dockerd (守护进程) +#### 2. Dockerd:守护进程 Docker 的大脑。 @@ -39,7 +32,7 @@ Docker 的大脑。 - 管理 Docker 对象 (镜像、容器、网络、卷) - 编排下层组件完成工作 -#### 3. Containerd (高级运行时) +#### 3. Containerd:高级运行时 行业标准的容器运行时 (CNCF 毕业项目)。 @@ -48,7 +41,7 @@ Docker 的大脑。 - **不包含** 复杂的与容器无关的功能 (如构建、API) - Kubernetes 也可以直接使用 containerd (跳过 Docker) -#### 4. Runc (低级运行时) +#### 4. Runc:低级运行时 用于创建和运行容器的 CLI 工具。 @@ -72,31 +65,24 @@ Docker 的大脑。 ```mermaid flowchart TD - User((用户)) - - subgraph DockerCLI [Docker CLI] - Cmd[docker run -d nginx] - end - - subgraph DockerHost [Docker Host] - Dockerd[Dockerd] - Containerd[Containerd] - subgraph ContainerRuntime [Runtime] - Shim[Containerd-shim] - Runc[Runc] - Container[容器进程 (nginx)] - end - end - - User --> Cmd - Cmd -- 1. REST API --> Dockerd - Dockerd -- 2. gRPC --> Containerd - Containerd -- 3. 准备镜像 & Bundle --> Containerd - Containerd -- 4. Fork --> Shim - Shim -- 5. Exec --> Runc - Runc -- 6. Create Namespaces/Cgroups --> Container - Runc -.-> |7. Exit| Runc - Shim -.-> |8. Monitor IO/Exit| Container + U["用户"] + K["docker run -d nginx"] + D["Dockerd"] + C["Containerd"] + B["OCI Bundle"] + S["Containerd-shim"] + R["Runc"] + P["容器进程\nnginx"] + E["退出"] + + U -->|1. REST API| D + K -->|2. gRPC| C + C -->|3. 准备镜像和 Bundle| B + C -->|4. 启动 Shim| S + S -->|5. 执行| R + R -->|6. 创建 Namespaces 和 Cgroups| P + R -->|7. 进程退出| E + S -->|8. 监控 IO 和退出| P ``` 1. **CLI** 发送请求给 **Dockerd** diff --git a/12_implementation/12.4_ufs.md b/12_implementation/12.4_ufs.md index b618ee7..aa93632 100644 --- a/12_implementation/12.4_ufs.md +++ b/12_implementation/12.4_ufs.md @@ -60,7 +60,7 @@ COPY . . # 层4:应用代码 --- -### 12.4.3 Copy-on-Write (写时复制) +### 12.4.3 Copy-on-Write:写时复制 当容器修改只读层中的文件时: diff --git a/13_kubernetes_concepts/13.1_intro.md b/13_kubernetes_concepts/13.1_intro.md index 1131140..75bdd74 100644 --- a/13_kubernetes_concepts/13.1_intro.md +++ b/13_kubernetes_concepts/13.1_intro.md @@ -32,23 +32,23 @@ Kubernetes 完美解决了这些问题。 ### 13.1.3 核心概念 -#### Pod (豆荚) +#### Pod:豆荚 Kubernetes 的最小调度单位。一个 Pod 可以包含一个或多个紧密协作的容器 (共享网络和存储)。就像豌豆荚里的豌豆一样。 -#### Node (节点) +#### Node:节点 运行 Pod 的物理机或虚拟机。 -#### Deployment (部署) +#### Deployment:部署 定义应用的期望状态 (如:需要 3 个副本,镜像版本为 v1)。K8s 会持续确保当前状态符合期望状态。 -#### Service (服务) +#### Service:服务 定义一组 Pod 的访问策略。提供稳定的 Cluster IP 和 DNS 名称,负责负载均衡。 -#### Namespace (命名空间) +#### Namespace:命名空间 用于多租户资源隔离。 diff --git a/14_kubernetes_setup/14.1_kubeadm.md b/14_kubernetes_setup/14.1_kubeadm.md index e384e44..5af0c0a 100644 --- a/14_kubernetes_setup/14.1_kubeadm.md +++ b/14_kubernetes_setup/14.1_kubeadm.md @@ -284,7 +284,7 @@ $ sudo modprobe overlay $ sudo modprobe br_netfilter ``` -#### 禁用 swap (必须) +#### 禁用 swap:必须 kubelet 默认要求禁用 swap,否则可能导致初始化失败或节点无法加入集群。 diff --git a/14_kubernetes_setup/14.2_kubeadm-docker.md b/14_kubernetes_setup/14.2_kubeadm-docker.md index 0345cd3..dd7d6b2 100644 --- a/14_kubernetes_setup/14.2_kubeadm-docker.md +++ b/14_kubernetes_setup/14.2_kubeadm-docker.md @@ -1,4 +1,4 @@ -## 14.2 使用 kubeadm 部署 Kubernetes (使用 Docker) +## 14.2 使用 kubeadm 部署 Kubernetes:使用 Docker `kubeadm` 提供了 `kubeadm init` 以及 `kubeadm join` 这两个命令,作为快速创建 `Kubernetes` 集群的最佳实践。 @@ -70,7 +70,7 @@ $ sudo modprobe overlay $ sudo modprobe br_netfilter ``` -#### 禁用 swap (必须) +#### 禁用 swap:必须 kubelet 默认要求禁用 swap,否则可能导致初始化失败或节点无法加入集群。 diff --git a/14_kubernetes_setup/14.6_systemd.md b/14_kubernetes_setup/14.6_systemd.md index bf1d443..413a5b1 100644 --- a/14_kubernetes_setup/14.6_systemd.md +++ b/14_kubernetes_setup/14.6_systemd.md @@ -25,7 +25,7 @@ 为了让 systemd 管理 Kubernetes 服务,需要创建相应的 `.service` 文件,例如: -``` +```text /etc/systemd/system/kubelet.service /etc/systemd/system/kube-proxy.service /etc/systemd/system/kube-apiserver.service diff --git a/16_cloud/16.2_tencentCloud.md b/16_cloud/16.2_tencentCloud.md index effbcdc..fb0b93d 100644 --- a/16_cloud/16.2_tencentCloud.md +++ b/16_cloud/16.2_tencentCloud.md @@ -16,7 +16,7 @@ 图 16-2:腾讯云容器服务示意图 -### 腾讯云容器服务 (TKE) 简介 +### 腾讯云容器服务:TKE 简介 腾讯云容器服务 (TKE, Tencent Kubernetes Engine) 是一款容器编排平台,基于原生 Kubernetes 提供,支持自动扩展、负载均衡、多可用区高可用等企业级功能。TKE 帮助开发者快速部署和管理容器化应用,消除集群运维的复杂度。 @@ -132,7 +132,7 @@ docker info | grep -A 5 "Registry Mirrors" 3. 在 JSON 配置中添加上述 `registry-mirrors` 字段 4. 点击 “Apply & Restart” -### 腾讯云容器镜像服务 (TCR) +### 腾讯云容器镜像服务:TCR 腾讯云容器镜像服务 (TCR) 提供企业级容器镜像存储和分发能力: diff --git a/16_cloud/16.3_alicloud.md b/16_cloud/16.3_alicloud.md index 6d51586..8b8be66 100644 --- a/16_cloud/16.3_alicloud.md +++ b/16_cloud/16.3_alicloud.md @@ -156,7 +156,7 @@ docker pull nginx:latest time docker pull alpine:latest ``` -### 阿里云容器镜像服务 (ACR) +### 阿里云容器镜像服务:ACR 阿里云容器镜像服务 (ACR, Container Registry) 是企业级的容器镜像存储和分发平台: diff --git a/16_cloud/16.5_multicloud.md b/16_cloud/16.5_multicloud.md index 61510dc..5af1396 100644 --- a/16_cloud/16.5_multicloud.md +++ b/16_cloud/16.5_multicloud.md @@ -16,14 +16,14 @@ 随着企业业务的扩展,单一云平台可能无法满足所有需求,多云部署成为趋势。 -#### 1. 跨云灾备 (Active-Passive) +#### 1. 跨云灾备:Active-Passive 主要业务运行在一个云 (如 AWS),数据实时复制到另一个云 (如阿里云)。当主云发生故障时,流量切换到备云。 * **优点**:架构相对简单,数据一致性好控制。 * **缺点**:资源闲置浪费,切换可能有 RTO。 -#### 2. 多活部署 (Active-Active) +#### 2. 多活部署:Active-Active 业务同时在多个云上运行,通过全局流量管理 (DNS/GSLB) 分发流量。 diff --git a/18_security/18.3_daemon_sec.md b/18_security/18.3_daemon_sec.md index 6b76bec..980de5c 100644 --- a/18_security/18.3_daemon_sec.md +++ b/18_security/18.3_daemon_sec.md @@ -48,7 +48,7 @@ dockerd \ > [!CAUTION] > 永远不要将不可信的普通用户加入到 `docker` 用户组中。同样,在容器编排时尽量避免将宿主机的 `/var/run/docker.sock` 直接映射给普通容器使用,这种模式被称为 Docker-in-Docker (DinD) 或 Docker-out-of-Docker (DooD),存在极高的越权风险。 -### 18.3.3 Rootless 模式 (非特权运行) +### 18.3.3 Rootless 模式:非特权运行 为了从根本上解决“拥有 Docker socket 就是 root”的问题,Docker 在近年推出了 **Rootless 模式**。 diff --git a/18_security/18.5_other_feature.md b/18_security/18.5_other_feature.md index 472b6c6..08815db 100644 --- a/18_security/18.5_other_feature.md +++ b/18_security/18.5_other_feature.md @@ -39,7 +39,7 @@ chmod: /etc/passwd: Operation not permitted ``` 应用只要被劫持进行越界尝试,其操作系统层命令便会立刻吃瘪。 -### 18.5.2 强制访问控制 (AppArmor / SELinux) +### 18.5.2 强制访问控制:AppArmor / SELinux 传统的 Linux 模型遵循 DAC(自主访问控制),这意味着如果一个文件被赋予了全员读写权限(`777`),普通隔离下任何人便都能修改。但 **MAC(强制访问控制)** 技术,诸如 `AppArmor` (常用于 Ubuntu/Debian) 或 `SELinux` (常用于 CentOS/RHEL),可以制定比“文件所有权”更宏观且优先的策略控制模块。 diff --git a/19_observability/19.1_prometheus.md b/19_observability/19.1_prometheus.md index 44bc1f8..2d94452 100644 --- a/19_observability/19.1_prometheus.md +++ b/19_observability/19.1_prometheus.md @@ -150,7 +150,7 @@ $ docker compose up -d * **cAdvisor 无数据或报错**:确认挂载了 Docker 目录与宿主机的 `/sys`、`/var/run` 等路径,并确保宿主机上 Docker 运行正常。 * **指标缺失**:确认你的 Docker/内核版本与 cAdvisor 兼容;对于 containerd 等运行时,采集方式会不同。 -#### 关键指标速查 (节点/容器) +#### 关键指标速查:节点/容器 在生产环境排障时,建议优先关注下面几类指标,并在 Grafana 面板中建立对应的常用视图。 diff --git a/19_observability/19.2_elk.md b/19_observability/19.2_elk.md index 27f71bf..5ed9114 100644 --- a/19_observability/19.2_elk.md +++ b/19_observability/19.2_elk.md @@ -135,7 +135,7 @@ docker run -d \ * **时间窗口/时区**:Discover 右上角的时间范围默认可能是最近 15 分钟,且时区可能影响显示。建议先把范围扩大到最近 24 小时再验证。 * **数据解析失败**:若日志是非结构化文本,仍可入库但字段不可用;生产环境建议输出 JSON 并在采集端解析。 -#### 5. 验证日志是否写入 Elasticsearch (生产排错必备) +#### 5. 验证日志是否写入 Elasticsearch:生产排错必备 当你在 Kibana 看不到日志时,建议先跳过 UI,从存储端直接验证“日志是否入库”。 diff --git a/21_case_devops/21.7_practical_examples.md b/21_case_devops/21.7_practical_examples.md index 37f7a2d..053901b 100644 --- a/21_case_devops/21.7_practical_examples.md +++ b/21_case_devops/21.7_practical_examples.md @@ -113,7 +113,7 @@ docker history go-app:latest **go.mod 和 go.sum 示例:** -``` +```text module github.com/example/go-app go 1.20 diff --git a/README.md b/README.md index 0e8e528..68b922e 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ graph LR 您也可以选择以下方式在本地离线阅读。 -#### 方式 1:Docker 镜像 (推荐) +#### 方式 1:Docker 镜像:推荐 无需安装任何依赖,一条命令即可启动。 diff --git a/appendix/command/dockerd.md b/appendix/command/dockerd.md index 89e450b..91ecc3a 100644 --- a/appendix/command/dockerd.md +++ b/appendix/command/dockerd.md @@ -4,7 +4,7 @@ `dockerd` 参数会随版本变化。建议优先在目标机器上执行 `dockerd --help`,并以 `daemon.json` 为主进行持久化配置。 -### 常用选项 (Docker Engine 29.x) +### 常用选项:Docker Engine 29.x * `--config-file="/etc/docker/daemon.json"`:指定 daemon 配置文件路径; * `--data-root=""`:Docker 数据目录 (默认 `/var/lib/docker`); diff --git a/appendix/example_guidelines.md b/appendix/example_guidelines.md index 2767703..93a0530 100644 --- a/appendix/example_guidelines.md +++ b/appendix/example_guidelines.md @@ -24,7 +24,7 @@ * **全书统一标准**:所有的编排命令必须书写为 `docker compose` (带空格的 V2 CLI 插件版)。 * 不得在新的文档和案例中提及或使用旧版格式,除非是为了特意说明 V1 到 V2 的迁移。 -## 4. 可复现性目标 (以可重建为目标) +## 4. 可复现性目标:以可重建为目标 本书中的所有实战和案例 (尤其 OS 与 DevOps 章节) 应尽量给出“最小可复现实验环境”。 diff --git a/appendix/faq/README.md b/appendix/faq/README.md index aa5133c..85babc9 100644 --- a/appendix/faq/README.md +++ b/appendix/faq/README.md @@ -86,7 +86,7 @@ $ docker run --network=my-net --ip=172.25.3.3 -itd --name=my-container busybox 答:一般并不推荐在同一个容器内运行多个应用进程。如果有类似需求,可以通过一些额外的进程管理机制,比如 `supervisord` 来管理所运行的进程。可以参考 https://docs.docker.com/engine/containers/multi-service_container/ 。 -### 如何控制容器占用系统资源 (CPU、内存) 的份额? +### 如何控制容器占用 CPU、内存等系统资源的份额? 答:在使用 `docker create` 命令创建容器或使用 `docker run` 创建并启动容器的时候,可以使用 -c|--cpu-shares\[=0] 参数来调整容器使用 CPU 的权重;使用 -m|--memory\[=MEMORY] 参数来调整容器使用内存的大小。 @@ -166,7 +166,7 @@ lrwxrwxrwx. 1 root root 15 11月 17 13:43 docker -> /storage/docker ## 其它 -### Docker 能在非 Linux 平台 (比如 Windows 或 macOS) 上运行么? +### Docker 能在非 Linux 平台上运行么?比如 Windows 或 macOS 答:完全可以。安装方法请查看[安装 Docker](../../03_install/README.md) 一节 diff --git a/appendix/learning_roadmap.md b/appendix/learning_roadmap.md index 715fdb6..e9bea1b 100644 --- a/appendix/learning_roadmap.md +++ b/appendix/learning_roadmap.md @@ -14,7 +14,7 @@ Docker 学习可分为四个递进阶段,每个阶段都有明确的学习目 - 了解镜像和仓库的基本操作 **核心内容:** -``` +```text Docker 简介 ├── 为什么需要 Docker ├── 容器 vs 虚拟机 vs 云计算 @@ -64,7 +64,7 @@ Docker 安装配置 - 熟悉 Docker Compose 编排 **核心内容:** -``` +```text Dockerfile 指令详解 ├── FROM / RUN / COPY / ADD ├── WORKDIR / ENV / ARG @@ -122,7 +122,7 @@ Docker Compose - 总计:4-6 周 **项目实战:** -``` +```text 项目 1: Python Web 应用(Flask/Django) - 编写多阶段 Dockerfile - 使用 Compose 配置数据库 @@ -148,7 +148,7 @@ Docker Compose - 熟悉 CI/CD 集成 **核心内容:** -``` +```text 容器安全 ├── 镜像安全 │ ├── 漏洞扫描(Trivy/Grype/Snyk) @@ -231,7 +231,7 @@ CI/CD 集成 - 总计:6-12 周 **项目实战:** -``` +```text 项目 1: 安全镜像构建流程 - 集成 Trivy 扫描 - 镜像签名和验证 @@ -263,7 +263,7 @@ CI/CD 集成 - 贡献开源社区 **核心内容:** -``` +```text Kubernetes 高级特性 ├── 集群管理 │ ├── 节点管理和驱逐 @@ -329,7 +329,7 @@ DevOps 工程化 ### 知识点依赖关系 -``` +```text 基础概念 (Week 0-2) ├── 容器 vs 虚拟机 ├── Docker 三大概念 @@ -430,7 +430,7 @@ Kubernetes 进阶 (Week 24-36) - 有效期:3 年 考试内容比例: -``` +```text 镜像和仓库(20%) - 镜像构建和管理 - 镜像层和缓存 @@ -513,7 +513,7 @@ docker stats / events / inspect **Q1: Docker 容器和虚拟机有什么区别?** A(要点): -``` +```text 虚拟机: - 完整的操作系统环境(GB 级) - 启动时间:分钟级 @@ -532,7 +532,7 @@ A(要点): **Q2: 什么是 Docker 镜像?它如何存储的?** A(要点): -``` +```text 镜像本质: - 只读的文件系统快照 - 分层存储结构 @@ -552,7 +552,7 @@ A(要点): **Q3: 容器如何实现隔离?** A(要点): -``` +```text 技术手段: 1. Namespace(资源隔离): - PID Namespace:进程隔离 @@ -579,7 +579,7 @@ A(要点): **Q4: 如何优化 Docker 镜像大小?** A(要点): -``` +```text 1. 选择合适的基础镜像: scratch < alpine:3.17 < python:3.11-slim < python:3.11 @@ -610,7 +610,7 @@ A(要点): **Q5: CMD 和 ENTRYPOINT 有什么区别?** A(要点): -``` +```text CMD: - 定义容器默认命令 - 容器运行时可被覆盖:docker run image_name custom_cmd @@ -634,7 +634,7 @@ CMD ["--port", "8000"] **Q6: Docker 网络驱动的区别?** A(要点): -``` +```text Bridge(默认): - 虚拟网桥,容器间通过网桥通信 - 支持端口映射 @@ -662,7 +662,7 @@ None: **Q7: Volume 和 Bind Mount 有什么区别?** A(要点): -``` +```text Volume: - Docker 管理,存储位置:/var/lib/docker/volumes/ - 跨平台兼容,隔离性好 @@ -686,7 +686,7 @@ tmpfs: **Q8: 如何提高 Docker 安全性?** A(要点): -``` +```text 镜像安全: - 使用官方镜像或可信镜像源 - 定期扫描漏洞(Trivy/Grype) @@ -714,7 +714,7 @@ A(要点): **Q9: 容器被 OOM 杀死,如何诊断和解决?** A(要点): -``` +```text 诊断: 1. 检查容器是否被 OOM 杀死: docker inspect | grep OOMKilled @@ -746,7 +746,7 @@ A(要点): **Q10: 如何在 CI/CD 中集成 Docker?** A(要点): -``` +```text 构建阶段: - 触发器:Push / PR 事件 - 构建镜像:docker build