mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-08-10 08:27:25 +00:00
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:
+20
-1
@@ -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 |
|
||||||
|
|------|---------------|-----------|--------|
|
||||||
|
| 启动速度 | 较慢(约 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)。
|
如果在使用过程中发现拉取 Docker 镜像十分缓慢,可以配置 Docker [国内镜像加速](3.9_mirror.md)。
|
||||||
|
|||||||
@@ -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 入门
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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 自动快照,适合对安全审计有严格要求的企业场景。
|
||||||
|
|||||||
@@ -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 权限来运行进程的话。
|
||||||
|
|
||||||
|
|||||||
@@ -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 Hub、GHCR、ECR 等主流 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://` 语法:
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user