docs(content): add Mac alternatives, K8s transition guide, CI/CD registry push example

- Add OrbStack/Colima comparison table to Mac install chapter (3.7.4)
- Add Docker→K8s concept mapping paragraph to Ch13 intro
- Add KubeKey/RKE2 deployment tool notes to Ch14
- Add production image checklist to Dockerfile chapter summary
- Add build-and-push-to-registry workflow example to GitHub Actions section
- Expand Ch18 security summary with dimension table
This commit is contained in:
yeasy
2026-05-21 21:33:58 -07:00
parent dae0af9ae7
commit 8b9e4518c8
6 changed files with 100 additions and 3 deletions
+20 -1
View File
@@ -72,6 +72,25 @@ $ docker stop webserver
$ docker rm webserver $ docker rm webserver
``` ```
### 3.7.4 镜像加速 ### 3.7.4 替代容器运行时
Docker Desktop 并非 macOS 上运行容器的唯一选择以下两个工具也广泛使用各有侧重
| 特性 | Docker Desktop | OrbStack | Colima |
|------|---------------|-----------|--------|
| 启动速度 | 较慢 1030 | 极快 2 | 中等 510 |
| 空闲内存占用 | 46 GB | 200300 MB | 400 MB |
| 图形界面 | 完整 GUI | 轻量 GUI | 仅命令行 |
| Apple Silicon | 支持 | 原生优化 | 支持 |
| 商业许可 | 大型企业需付费 | 个人免费商业付费 | MIT 开源 |
| Kubernetes | 内置 | 内置 | 通过 k3s 支持 |
**[OrbStack](https://orbstack.dev/)**:以极低的资源占用和接近原生的 I/O 性能著称。对于 Apple Silicon 机型上需要频繁构建镜像的开发者,体验提升尤为明显。个人和教育用途免费。
**[Colima](https://github.com/abiosoft/colima)**:完全开源的命令行方案,底层基于 Lima 虚拟机。适合偏好终端工作流、不需要 GUI 的开发者,或企业中希望避免商业许可限制的团队。
> 上述三种工具均兼容标准的 `docker` CLI 命令 Docker Desktop 切换到 OrbStack Colima 已有的镜像和容器配置通常可以平滑迁移
### 3.7.5 镜像加速
如果在使用过程中发现拉取 Docker 镜像十分缓慢可以配置 Docker [国内镜像加速](3.9_mirror.md) 如果在使用过程中发现拉取 Docker 镜像十分缓慢可以配置 Docker [国内镜像加速](3.9_mirror.md)
+15
View File
@@ -21,6 +21,21 @@
| **LABEL** | 添加元数据 | 推荐 OCI 标准标签替代 MAINTAINER | | **LABEL** | 添加元数据 | 推荐 OCI 标准标签替代 MAINTAINER |
| **SHELL** | 更改默认 shell | 推荐 `["/bin/bash", "-o", "pipefail", "-c"]` | | **SHELL** | 更改默认 shell | 推荐 `["/bin/bash", "-o", "pipefail", "-c"]` |
### 生产镜像快速检查清单
在将镜像推向生产之前建议逐条过一遍以下清单
- [ ] 基础镜像选择了最小化版本 `alpine``distroless`
- [ ] 使用了[多阶段构建](7.17_multistage_builds.md)最终镜像不含编译工具链
- [ ] 以非 root 用户运行`USER` 指令
- [ ] `COPY` 优先于 `ADD`且仅复制必要文件
- [ ] `RUN` 指令合并了 `apt-get update && install && rm -rf /var/lib/apt/lists/*`
- [ ] 设置了 `HEALTHCHECK`
- [ ] 使用了 `.dockerignore` 排除 `.git``node_modules` 等无关文件
- [ ] 镜像标签使用了具体版本号或 commit hash而非 `latest`
> 更完整的编写指南见[附录Dockerfile 最佳实践](../appendix/best_practices.md)
### 延伸阅读 ### 延伸阅读
- [使用 Dockerfile 定制镜像](../04_image/4.5_build.md)Dockerfile 入门 - [使用 Dockerfile 定制镜像](../04_image/4.5_build.md)Dockerfile 入门
+2
View File
@@ -6,6 +6,8 @@
Kubernetes 的最小调度单位是 `Pod`一个 `Pod` 由一组紧密协作的容器构成它们共享网络命名空间IP 以及部分存储资源也可以根据需要对 Pod 进行端口映射 Kubernetes 的最小调度单位是 `Pod`一个 `Pod` 由一组紧密协作的容器构成它们共享网络命名空间IP 以及部分存储资源也可以根据需要对 Pod 进行端口映射
如果你已经熟悉 Docker可以用以下对照来理解 Kubernetes 的核心概念Docker 中的"容器"对应 Kubernetes `Pod`一个或多个容器的组合`docker-compose.yml` 的角色类似于 Kubernetes `Deployment` + `Service` 声明`docker run` 的端口映射和网络配置 Kubernetes 中由 `Service` `Ingress` 接管掌握这些映射关系有助于从单机 Docker 平滑过渡到集群编排
本章将分为 5 节介绍 `Kubernetes` 本章将分为 5 节介绍 `Kubernetes`
* [简介](13.1_intro.md) * [简介](13.1_intro.md)
+5
View File
@@ -13,3 +13,8 @@
* [一步步部署 Kubernetes 集群](14.6_systemd.md) * [一步步部署 Kubernetes 集群](14.6_systemd.md)
* [部署 Dashboard](14.7_dashboard.md) * [部署 Dashboard](14.7_dashboard.md)
* [Kubernetes 命令行 kubectl](14.8_kubectl.md) * [Kubernetes 命令行 kubectl](14.8_kubectl.md)
除了上述方式企业生产环境中还有两个常见的部署工具值得关注
* **[KubeKey](https://github.com/kubesphere/kubekey)**KubeSphere 社区开源的集群部署工具(CNCF 认证),支持一条命令从裸机部署到高可用集群,内置对 containerd 和多 Linux 发行版的适配,适合需要快速搭建私有化 Kubernetes 的团队。
* **[RKE2](https://docs.rke2.io/)**SUSE Rancher 出品的安全加固型 Kubernetes 发行版,默认启用 CIS 基准合规、SELinux 支持和 etcd 自动快照,适合对安全审计有严格要求的企业场景。
+9 -1
View File
@@ -1,6 +1,14 @@
## 本章小结 ## 本章小结
Docker 的安全性依赖于多层隔离机制的协同工作同时需要用户遵循最佳实践 Docker 的安全性依赖于多层隔离机制的协同工作同时需要用户遵循最佳实践本章涵盖的核心安全维度包括
| 维度 | 关键措施 |
|------|---------|
| **内核隔离** | Namespace 隔离进程/网络/文件系统Cgroups 限制资源使用 |
| **权限控制** | root 运行`--cap-drop ALL` 最小能力集`--read-only` 只读根文件系统 |
| **镜像安全** | 使用可信基础镜像定期扫描漏洞Trivy / Snyk启用 Docker Content Trust 签名验证 |
| **运行时防护** | Seccomp 系统调用过滤AppArmor / SELinux 强制访问控制 |
| **网络隔离** | 自定义 bridge 网络隔离容器通信限制容器对宿主机网络的访问 |
总体来看Docker 容器还是十分安全的特别是在容器内不使用 root 权限来运行进程的话 总体来看Docker 容器还是十分安全的特别是在容器内不使用 root 权限来运行进程的话
+49 -1
View File
@@ -34,11 +34,59 @@ jobs:
``` ```
该示例会在 GitHub Actions 中构建当前仓库的 Docker 镜像不推送到 registry 该示例会在 GitHub Actions 中构建当前仓库的 Docker 镜像不推送到 registry
### 21.2.2 最佳实践 ### 21.2.2 构建并推送到 Registry
实际项目中通常需要在 CI 中构建镜像并推送到容器 Registry以下示例展示了多阶段构建 + 登录 + 推送的完整流程
```yaml
name: Build and Push
on:
push:
branches: [main]
permissions:
contents: read
packages: write
jobs:
build-push:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: docker/login-action@v4
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- uses: docker/setup-buildx-action@v4
- uses: docker/build-push-action@v7
with:
context: .
push: true
tags: |
ghcr.io/${{ github.repository }}:${{ github.sha }}
ghcr.io/${{ github.repository }}:latest
cache-from: type=gha
cache-to: type=gha,mode=max
```
关键说明
* `docker/login-action` 负责认证支持 Docker HubGHCRECR 等主流 Registry
* `cache-from` / `cache-to` 使用 GitHub Actions 原生缓存`type=gha`无需额外配置即可加速增量构建
* 标签同时使用 commit hash `latest`兼顾版本追溯与部署便利
### 21.2.3 最佳实践
* 固定 action 的主版本例如 `@v4` / `@v6`避免使用 `@master` 这类浮动引用 * 固定 action 的主版本例如 `@v4` / `@v6`避免使用 `@master` 这类浮动引用
* 设置最小权限例如 `contents: read`需要写入权限时再打开 * 设置最小权限例如 `contents: read`需要写入权限时再打开
* 需要依赖缓存时优先使用官方支持的缓存方案例如针对语言包管理器的 cache BuildKit cache * 需要依赖缓存时优先使用官方支持的缓存方案例如针对语言包管理器的 cache BuildKit cache
* 敏感凭据Registry 密码Deploy Key 一律通过 `secrets` 注入禁止硬编码
* 多平台构建可在 `build-push-action` 中添加 `platforms: linux/amd64,linux/arm64`
如果你需要在某个步骤里直接运行容器镜像而不是构建镜像可以使用 `docker://` 语法 如果你需要在某个步骤里直接运行容器镜像而不是构建镜像可以使用 `docker://` 语法