From 89b0dc442566ef5752b8169c001aeea4e8d2e2d1 Mon Sep 17 00:00:00 2001 From: yeasy Date: Mon, 9 Mar 2026 19:27:38 -0700 Subject: [PATCH] Add details for cloud images --- 16_cloud/16.2_tencentCloud.md | 109 +++++++++++++++++++++++ 16_cloud/16.3_alicloud.md | 157 +++++++++++++++++++++++++++++++--- 20_cases_os/README.md | 32 +++++-- 21_case_devops/README.md | 24 ++++-- README.md | 2 +- 5 files changed, 301 insertions(+), 23 deletions(-) diff --git a/16_cloud/16.2_tencentCloud.md b/16_cloud/16.2_tencentCloud.md index 879dc69..488365e 100644 --- a/16_cloud/16.2_tencentCloud.md +++ b/16_cloud/16.2_tencentCloud.md @@ -85,6 +85,53 @@ docker tag my-app:latest ccr.ccs.tencentyun.com/namespace/my-app:latest docker push ccr.ccs.tencentyun.com/namespace/my-app:latest ``` +### 腾讯云 Docker 镜像加速器配置 + +为了加快镜像拉取速度,腾讯云提供了镜像加速服务。配置方法如下: + +#### Linux 系统配置 + +编辑 `/etc/docker/daemon.json` 文件(如果不存在则创建): + +```bash +# 创建或编辑配置文件 +sudo mkdir -p /etc/docker +sudo nano /etc/docker/daemon.json +``` + +添加以下内容: + +```json +{ + "registry-mirrors": [ + "https://mirror.ccs.tencentyun.com" + ], + "insecure-registries": [] +} +``` + +重启 Docker 服务: + +```bash +sudo systemctl daemon-reload +sudo systemctl restart docker +``` + +验证配置: + +```bash +# 查看镜像源是否生效 +docker info | grep -A 5 "Registry Mirrors" +``` + +#### Windows/Mac 配置 + +对于 Docker Desktop,在设置界面中: +1. 打开 Docker Desktop 设置 +2. 导航到 "Docker Engine" +3. 在 JSON 配置中添加上述 `registry-mirrors` 字段 +4. 点击 "Apply & Restart" + ### 腾讯云容器镜像服务 (TCR) 腾讯云容器镜像服务 (TCR) 提供企业级容器镜像存储和分发能力: @@ -102,3 +149,65 @@ docker push ccr.ccs.tencentyun.com/namespace/my-app:latest 3. 配置 Docker 登录凭证 4. 本地构建镜像并推送到 TCR 5. 在 TKE 集群部署时引用 TCR 镜像地址 + +#### 完整推送/拉取示例 + +```bash +# 登录到腾讯云 TCR(使用 API 密钥) +docker login ccr.ccs.tencentyun.com \ + --username <腾讯云账号ID> \ + --password + +# 拉取公开镜像 +docker pull ccr.ccs.tencentyun.com/library/nginx:latest + +# 构建本地镜像 +docker build -t my-app:v1.0 . + +# 标记镜像为 TCR 地址 +docker tag my-app:v1.0 \ + ccr.ccs.tencentyun.com/my-namespace/my-app:v1.0 + +# 推送镜像到 TCR +docker push ccr.ccs.tencentyun.com/my-namespace/my-app:v1.0 + +# 在 Dockerfile 中使用 TCR 镜像 +FROM ccr.ccs.tencentyun.com/my-namespace/my-app:v1.0 +RUN echo "使用腾讯云镜像作为基础镜像" +``` + +#### TKE 集群中使用 TCR 镜像 + +配置镜像拉取凭证后,在 Deployment 中直接引用 TCR 镜像: + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: my-app-deployment + namespace: default +spec: + replicas: 3 + selector: + matchLabels: + app: my-app + template: + metadata: + labels: + app: my-app + spec: + imagePullSecrets: + - name: tcr-secret # 需提前创建该 Secret + containers: + - name: my-app + image: ccr.ccs.tencentyun.com/my-namespace/my-app:v1.0 + ports: + - containerPort: 8080 + resources: + requests: + memory: "256Mi" + cpu: "100m" + limits: + memory: "512Mi" + cpu: "500m" +``` diff --git a/16_cloud/16.3_alicloud.md b/16_cloud/16.3_alicloud.md index fc570c3..a58447c 100644 --- a/16_cloud/16.3_alicloud.md +++ b/16_cloud/16.3_alicloud.md @@ -100,6 +100,61 @@ kubectl apply -f service.yaml kubectl get svc web-service ``` +### 阿里云 Docker 镜像加速器配置 + +为了加快从阿里云镜像源拉取官方镜像的速度,可以配置镜像加速器。阿里云为容器服务 ACK 用户提供了免费的镜像加速服务。 + +#### 获取加速器地址 + +登录阿里云容器镜像服务控制台,在 "镜像工具" > "镜像加速器" 中可获取个人的加速器地址(类似于 `https://xxxxxx.mirror.aliyuncs.com`)。 + +#### Linux 系统配置 + +编辑或创建 `/etc/docker/daemon.json` 文件: + +```bash +sudo mkdir -p /etc/docker +sudo nano /etc/docker/daemon.json +``` + +添加或修改以下内容(替换为你的加速器地址): + +```json +{ + "registry-mirrors": [ + "https://xxxxxx.mirror.aliyuncs.com" + ] +} +``` + +重新加载并重启 Docker: + +```bash +sudo systemctl daemon-reload +sudo systemctl restart docker +``` + +验证配置生效: + +```bash +docker info | grep -A 5 "Registry Mirrors" +``` + +#### Windows/Mac 配置 + +在 Docker Desktop 的 Settings 中: +1. 进入 "Docker Engine" 标签 +2. 编辑 JSON 配置,添加 `registry-mirrors` 字段 +3. 点击 "Apply & Restart" + +#### 测试加速效果 + +```bash +# 从加速器拉取镜像(速度应该明显提升) +docker pull nginx:latest +time docker pull alpine:latest +``` + ### 阿里云容器镜像服务 (ACR) 阿里云容器镜像服务 (ACR, Container Registry) 是企业级的容器镜像存储和分发平台: @@ -111,25 +166,105 @@ kubectl get svc web-service - **集成 ACK**:与 ACK 无缝集成,自动身份认证 - **镜像版本管理**:标签管理、镜像过期清理、保留策略 -#### 使用示例 +#### 完整推送/拉取示例 ```bash -# 登录阿里云镜像服务 -docker login registry.cn-hangzhou.aliyuncs.com -u +# 登录阿里云镜像仓库(使用 Docker 登录) +# 使用阿里云账户 ID 和 RAM 访问密钥或密码 +docker login registry.cn-hangzhou.aliyuncs.com \ + --username=<阿里云账户ID> -# 标记镜像 -docker tag my-app:latest registry.cn-hangzhou.aliyuncs.com/myapp/my-app:v1.0 +# 拉取阿里云公开镜像 +docker pull registry.cn-hangzhou.aliyuncs.com/library/nginx:latest -# 推送镜像 +# 构建本地镜像 +docker build -t my-app:v1.0 . + +# 标记镜像为阿里云仓库地址 +docker tag my-app:v1.0 \ + registry.cn-hangzhou.aliyuncs.com/myapp/my-app:v1.0 + +# 推送镜像到阿里云 ACR docker push registry.cn-hangzhou.aliyuncs.com/myapp/my-app:v1.0 -# 在 ACK 集群使用镜像 -kubectl set image deployment/web-server web=registry.cn-hangzhou.aliyuncs.com/myapp/web:v2.0 +# 在 Dockerfile 中使用 ACR 镜像 +FROM registry.cn-hangzhou.aliyuncs.com/myapp/my-app:v1.0 +COPY . /app +RUN echo "已成功使用阿里云镜像" +``` + +#### ACK 集群中使用 ACR 镜像 + +在 ACK 集群中,需要先配置镜像拉取凭证(Secret),然后在 Deployment 中引用: + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: web-server + namespace: default +spec: + replicas: 3 + selector: + matchLabels: + app: web + template: + metadata: + labels: + app: web + spec: + # 如果是私有镜像,需配置镜像拉取凭证 + imagePullSecrets: + - name: acr-secret + containers: + - name: web + image: registry.cn-hangzhou.aliyuncs.com/myapp/web:v2.0 + imagePullPolicy: IfNotPresent + ports: + - containerPort: 8080 + resources: + requests: + memory: "256Mi" + cpu: "100m" + limits: + memory: "512Mi" + cpu: "500m" + affinity: + # 配置 Pod 反亲和性,分散到不同节点 + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + podAffinityTerm: + labelSelector: + matchExpressions: + - key: app + operator: In + values: + - web + topologyKey: kubernetes.io/hostname +``` + +#### 创建镜像拉取凭证 + +在 ACK 集群中创建 Secret,用于拉取私有镜像: + +```bash +# 创建镜像拉取 Secret +kubectl create secret docker-registry acr-secret \ + --docker-server=registry.cn-hangzhou.aliyuncs.com \ + --docker-username=<阿里云账户ID> \ + --docker-password= \ + --docker-email=<邮箱地址> + +# 查看创建的 Secret +kubectl get secret acr-secret +kubectl describe secret acr-secret ``` #### ACR 优势 -- 在 ACK 集群中无需额外配置认证,自动使用 ACR 镜像 -- 支持 Helm Chart 存储和版本管理 -- 提供图形化镜像仓库管理界面 +- 在 ACK 集群中与镜像仓库无缝集成,简化身份认证 +- 支持 Helm Chart 存储和版本管理,方便应用交付 +- 提供完整的图形化镜像仓库管理界面 - 完整的审计日志和操作追踪功能 +- 支持镜像自动扫描和漏洞报告 diff --git a/20_cases_os/README.md b/20_cases_os/README.md index c7befe2..ec4f9dd 100644 --- a/20_cases_os/README.md +++ b/20_cases_os/README.md @@ -4,15 +4,37 @@ 本章将介绍 Docker 在不同操作系统镜像场景下的实战案例。当你构建容器化应用时,选择合适的基础镜像至关重要。不同的操作系统镜像在大小、功能和性能方面各有特点,适用于不同的使用场景。本章通过具体的案例,详细讲解如何在 Docker 中使用主流操作系统镜像,包括轻量级镜像 (Busybox、Alpine) 和完整功能镜像 (Debian、Ubuntu、CentOS 等)。 +## 为什么选择合适的操作系统镜像很重要 + +在容器化应用开发中,选择合适的基础操作系统镜像直接影响容器的大小、启动速度、安全性和运行性能。不同的镜像提供了不同的功能集和资源占用: + +- **轻量级镜像** (Busybox、Alpine) - 镜像大小仅几 MB,启动快速,适合微服务、IoT 设备和对资源敏感的环境。Busybox 是最小的选择,集成了常见的 Unix 工具;Alpine 则提供了完整的包管理器,方便安装额外工具。 +- **通用镜像** (Debian、Ubuntu) - 提供完整的 Linux 功能和丰富的软件生态,镜像大小通常在 100-300 MB 之间。适合需要灵活安装各种依赖和工具的应用场景。 +- **企业级镜像** (CentOS、Fedora) - 基于 Red Hat 生态,广泛应用于企业环境和复杂系统应用。提供了 yum 包管理器和强大的系统管理工具。 + +选择镜像的关键原则是 "小而够用"——选择满足应用需求的最小镜像。这样可以减少安全漏洞表面积、加快镜像拉取和推送速度、降低存储成本,同时也使容器更便于分发和部署。 + +## 常用操作系统镜像对比 + +| 镜像 | 大小 | 包管理器 | 适用场景 | 优势 | +|------|------|--------|--------|------| +| **Busybox** | ~1 MB | 无 | 最小化工具集、initrd | 极致轻量,启动秒级 | +| **Alpine** | ~5 MB | apk | 微服务、静态应用 | 体积小,有包管理器 | +| **Debian** | ~100 MB | apt-get | 通用应用、开发环境 | 软件包丰富,稳定性强 | +| **Ubuntu** | ~80 MB | apt-get | 类似 Debian,现代化系统 | 更新频繁,用户多 | +| **CentOS** | ~200 MB | yum | 企业应用、兼容性需求 | 企业级支持,稳定性高 | +| **Fedora** | ~200 MB | dnf | 新特性需求、开发环境 | 最新技术栈,创新性强 | + ## 学习目标 通过学习本章内容,你将能够: -- 理解不同操作系统镜像的特点和适用场景 -- 掌握在 Docker 中使用各类操作系统镜像的方法 -- 学习如何根据实际需求选择合适的基础镜像 -- 了解如何在容器中安装和配置应用程序 -- 掌握镜像优化和大小控制的最佳实践 +- 理解不同操作系统镜像的特点、大小和适用场景 +- 掌握在 Docker 中使用各类操作系统镜像的方法和最佳实践 +- 学习如何根据实际需求选择合适的基础镜像,实现镜像优化 +- 了解如何在不同操作系统容器中安装、配置和管理应用程序 +- 掌握多阶段构建等高级技巧,最小化最终镜像大小 +- 学会使用 Docker Compose 编排多个操作系统容器环境 ## 章节内容导航 diff --git a/21_case_devops/README.md b/21_case_devops/README.md index b736570..5a4083b 100644 --- a/21_case_devops/README.md +++ b/21_case_devops/README.md @@ -8,16 +8,28 @@ DevOps 是一种重要的开发和运维文化,强调开发团队和运维团 Docker 在 DevOps 工作流中承担多个关键角色。首先,它标准化了应用的开发和部署环境,使得团队成员在相同的 Docker 容器中工作,避免了"在我的机器上可以运行"的问题。其次,Docker 与 CI/CD 流程无缝集成,通过自动化的镜像构建、测试和部署,实现快速的迭代周期。此外,Docker 还支持微服务架构和容器编排,使团队能够更灵活地扩展应用和管理基础设施。 +## CI/CD 管道的重要性 + +持续集成与持续部署 (CI/CD) 是现代 DevOps 的核心。通过自动化的代码检测、测试、构建和部署流程,团队可以更加频繁地发布新版本,同时保持系统的稳定性和可靠性。Docker 在 CI/CD 中扮演了重要角色: + +- **标准化构建环境** - Docker 确保开发、测试和生产环境完全一致,消除了环境差异带来的问题 +- **加速流水线** - 容器的快速启动和轻量级特性,大幅加快了 CI/CD 流程的执行效率 +- **灵活的测试框架** - 可以轻松创建短生命周期的测试容器,并行运行多个测试 +- **自动化镜像发布** - CI/CD 工具可以自动构建、扫描、标记和推送 Docker 镜像到仓库 +- **蓝绿部署和金丝雀发布** - 利用容器的隔离性和可重复性,实现高级发布策略 + +本章将通过介绍 GitHub Actions、Drone 等流行的 CI/CD 工具,展示如何在实际项目中构建完整的自动化流水线。我们还将演示如何在本地开发环境中集成 Docker,使用 IDE 的容器开发插件,加快本地迭代周期。 + ## 本章学习目标 通过学习本章内容,你将能够: -- 理解 DevOps 的核心原则和 Docker 的作用 -- 掌握完整的 Docker 工作流,从代码提交到线上部署 -- 学习如何使用 GitHub Actions 实现自动化 CI/CD -- 了解 Drone 等第三方 CI/CD 工具的集成方式 -- 学会在本地 IDE 中集成 Docker,提升开发效率 -- 掌握实战中常见的 DevOps 场景和最佳实践 +- 理解 DevOps 文化、CI/CD 流程和容器化的紧密关系 +- 掌握完整的 Docker 工作流,从代码提交到线上部署的每一个环节 +- 学习如何使用 GitHub Actions 实现自动化 CI/CD,以及工作流的编写和优化 +- 了解 Drone 等第三方 CI/CD 工具的架构、部署和配置方式 +- 学会在本地 IDE (VS Code) 中集成 Docker,利用容器开发工具提升开发效率 +- 掌握实战中常见的 DevOps 场景、最佳实践和故障排查方法 ## 章节内容导航 diff --git a/README.md b/README.md index 5222aba..3a3a152 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![图](https://img.shields.io/github/stars/yeasy/docker_practice.svg?style=social&label=Stars)](https://github.com/yeasy/docker_practice) [![图](https://img.shields.io/github/release/yeasy/docker_practice/all.svg)](https://github.com/yeasy/docker_practice/releases) [![图](https://img.shields.io/badge/Based-Docker%20Engine%20v29.x-blue.svg)](https://docs.docker.com/engine/release-notes/) [![图](https://img.shields.io/badge/Docker%20%E6%8A%80%E6%9C%AF%E5%85%A5%E9%97%A8%E4%B8%8E%E5%AE%9E%E6%88%98-jd.com-red.svg)][1] -**v1.6.3** +**v1.6.4** [Docker](https://www.docker.com) 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的维护效率,降低了云计算应用开发的成本!使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效和轻松!