diff --git a/03_install/3.7_mac.md b/03_install/3.7_mac.md index 1cabfd5..a63eddd 100644 --- a/03_install/3.7_mac.md +++ b/03_install/3.7_mac.md @@ -72,6 +72,25 @@ $ docker stop webserver $ docker rm webserver ``` -### 3.7.4 镜像加速 +### 3.7.4 替代容器运行时 + +Docker Desktop 并非 macOS 上运行容器的唯一选择。以下两个工具也广泛使用,各有侧重: + +| 特性 | Docker Desktop | OrbStack | Colima | +|------|---------------|-----------|--------| +| 启动速度 | 较慢(约 10–30 秒) | 极快(约 2 秒) | 中等(约 5–10 秒) | +| 空闲内存占用 | 4–6 GB | 200–300 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)。 diff --git a/07_dockerfile/summary.md b/07_dockerfile/summary.md index 54fbd0f..a224d77 100644 --- a/07_dockerfile/summary.md +++ b/07_dockerfile/summary.md @@ -21,6 +21,21 @@ | **LABEL** | 添加元数据 | 推荐 OCI 标准标签,替代 MAINTAINER | | **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 入门 diff --git a/13_kubernetes_concepts/README.md b/13_kubernetes_concepts/README.md index ab4f706..d2b4a54 100644 --- a/13_kubernetes_concepts/README.md +++ b/13_kubernetes_concepts/README.md @@ -6,6 +6,8 @@ Kubernetes 的最小调度单位是 `Pod`。一个 `Pod` 由一组紧密协作的容器构成,它们共享网络命名空间、IP 以及部分存储资源,也可以根据需要对 Pod 进行端口映射。 +如果你已经熟悉 Docker,可以用以下对照来理解 Kubernetes 的核心概念:Docker 中的"容器"对应 Kubernetes 的 `Pod`(一个或多个容器的组合);`docker-compose.yml` 的角色类似于 Kubernetes 的 `Deployment` + `Service` 声明;`docker run` 的端口映射和网络配置,在 Kubernetes 中由 `Service` 和 `Ingress` 接管。掌握这些映射关系,有助于从单机 Docker 平滑过渡到集群编排。 + 本章将分为 5 节介绍 `Kubernetes`: * [简介](13.1_intro.md) diff --git a/14_kubernetes_setup/README.md b/14_kubernetes_setup/README.md index 6439d5b..4bf04f7 100644 --- a/14_kubernetes_setup/README.md +++ b/14_kubernetes_setup/README.md @@ -13,3 +13,8 @@ * [一步步部署 Kubernetes 集群](14.6_systemd.md) * [部署 Dashboard](14.7_dashboard.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 自动快照,适合对安全审计有严格要求的企业场景。 diff --git a/18_security/summary.md b/18_security/summary.md index 83aeb4b..4aa28bd 100644 --- a/18_security/summary.md +++ b/18_security/summary.md @@ -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 权限来运行进程的话。 diff --git a/21_case_devops/21.2_github_actions.md b/21_case_devops/21.2_github_actions.md index d384cfd..7adcbb0 100644 --- a/21_case_devops/21.2_github_actions.md +++ b/21_case_devops/21.2_github_actions.md @@ -34,11 +34,59 @@ jobs: ``` 该示例会在 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 Hub、GHCR、ECR 等主流 Registry。 +* `cache-from` / `cache-to` 使用 GitHub Actions 原生缓存(`type=gha`),无需额外配置即可加速增量构建。 +* 标签同时使用 commit hash 和 `latest`,兼顾版本追溯与部署便利。 + +### 21.2.3 最佳实践 * 固定 action 的主版本(例如 `@v4` / `@v6`),避免使用 `@master` 这类浮动引用。 * 设置最小权限(例如 `contents: read`),需要写入权限时再打开。 * 需要依赖缓存时,优先使用官方支持的缓存方案(例如针对语言包管理器的 cache 或 BuildKit cache)。 +* 敏感凭据(Registry 密码、Deploy Key 等)一律通过 `secrets` 注入,禁止硬编码。 +* 多平台构建可在 `build-push-action` 中添加 `platforms: linux/amd64,linux/arm64`。 如果你需要在某个步骤里直接运行容器镜像(而不是构建镜像),可以使用 `docker://` 语法: