mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-11 12:21:17 +00:00
Add details for cloud images
This commit is contained in:
@@ -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 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)
|
||||||
|
|
||||||
腾讯云容器镜像服务 (TCR) 提供企业级容器镜像存储和分发能力:
|
腾讯云容器镜像服务 (TCR) 提供企业级容器镜像存储和分发能力:
|
||||||
@@ -102,3 +149,65 @@ docker push ccr.ccs.tencentyun.com/namespace/my-app:latest
|
|||||||
3. 配置 Docker 登录凭证
|
3. 配置 Docker 登录凭证
|
||||||
4. 本地构建镜像并推送到 TCR
|
4. 本地构建镜像并推送到 TCR
|
||||||
5. 在 TKE 集群部署时引用 TCR 镜像地址
|
5. 在 TKE 集群部署时引用 TCR 镜像地址
|
||||||
|
|
||||||
|
#### 完整推送/拉取示例
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 登录到腾讯云 TCR(使用 API 密钥)
|
||||||
|
docker login ccr.ccs.tencentyun.com \
|
||||||
|
--username <腾讯云账号ID> \
|
||||||
|
--password <API_KEY>
|
||||||
|
|
||||||
|
# 拉取公开镜像
|
||||||
|
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"
|
||||||
|
```
|
||||||
|
|||||||
@@ -100,6 +100,61 @@ kubectl apply -f service.yaml
|
|||||||
kubectl get svc web-service
|
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)
|
||||||
|
|
||||||
阿里云容器镜像服务 (ACR, Container Registry) 是企业级的容器镜像存储和分发平台:
|
阿里云容器镜像服务 (ACR, Container Registry) 是企业级的容器镜像存储和分发平台:
|
||||||
@@ -111,25 +166,105 @@ kubectl get svc web-service
|
|||||||
- **集成 ACK**:与 ACK 无缝集成,自动身份认证
|
- **集成 ACK**:与 ACK 无缝集成,自动身份认证
|
||||||
- **镜像版本管理**:标签管理、镜像过期清理、保留策略
|
- **镜像版本管理**:标签管理、镜像过期清理、保留策略
|
||||||
|
|
||||||
#### 使用示例
|
#### 完整推送/拉取示例
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 登录阿里云镜像服务
|
# 登录阿里云镜像仓库(使用 Docker 登录)
|
||||||
docker login registry.cn-hangzhou.aliyuncs.com -u <username>
|
# 使用阿里云账户 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
|
docker push registry.cn-hangzhou.aliyuncs.com/myapp/my-app:v1.0
|
||||||
|
|
||||||
# 在 ACK 集群使用镜像
|
# 在 Dockerfile 中使用 ACR 镜像
|
||||||
kubectl set image deployment/web-server web=registry.cn-hangzhou.aliyuncs.com/myapp/web:v2.0
|
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=<RAM访问密钥或密码> \
|
||||||
|
--docker-email=<邮箱地址>
|
||||||
|
|
||||||
|
# 查看创建的 Secret
|
||||||
|
kubectl get secret acr-secret
|
||||||
|
kubectl describe secret acr-secret
|
||||||
```
|
```
|
||||||
|
|
||||||
#### ACR 优势
|
#### ACR 优势
|
||||||
|
|
||||||
- 在 ACK 集群中无需额外配置认证,自动使用 ACR 镜像
|
- 在 ACK 集群中与镜像仓库无缝集成,简化身份认证
|
||||||
- 支持 Helm Chart 存储和版本管理
|
- 支持 Helm Chart 存储和版本管理,方便应用交付
|
||||||
- 提供图形化镜像仓库管理界面
|
- 提供完整的图形化镜像仓库管理界面
|
||||||
- 完整的审计日志和操作追踪功能
|
- 完整的审计日志和操作追踪功能
|
||||||
|
- 支持镜像自动扫描和漏洞报告
|
||||||
|
|||||||
@@ -4,15 +4,37 @@
|
|||||||
|
|
||||||
本章将介绍 Docker 在不同操作系统镜像场景下的实战案例。当你构建容器化应用时,选择合适的基础镜像至关重要。不同的操作系统镜像在大小、功能和性能方面各有特点,适用于不同的使用场景。本章通过具体的案例,详细讲解如何在 Docker 中使用主流操作系统镜像,包括轻量级镜像 (Busybox、Alpine) 和完整功能镜像 (Debian、Ubuntu、CentOS 等)。
|
本章将介绍 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 编排多个操作系统容器环境
|
||||||
|
|
||||||
## 章节内容导航
|
## 章节内容导航
|
||||||
|
|
||||||
|
|||||||
@@ -8,16 +8,28 @@ DevOps 是一种重要的开发和运维文化,强调开发团队和运维团
|
|||||||
|
|
||||||
Docker 在 DevOps 工作流中承担多个关键角色。首先,它标准化了应用的开发和部署环境,使得团队成员在相同的 Docker 容器中工作,避免了"在我的机器上可以运行"的问题。其次,Docker 与 CI/CD 流程无缝集成,通过自动化的镜像构建、测试和部署,实现快速的迭代周期。此外,Docker 还支持微服务架构和容器编排,使团队能够更灵活地扩展应用和管理基础设施。
|
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 的作用
|
- 理解 DevOps 文化、CI/CD 流程和容器化的紧密关系
|
||||||
- 掌握完整的 Docker 工作流,从代码提交到线上部署
|
- 掌握完整的 Docker 工作流,从代码提交到线上部署的每一个环节
|
||||||
- 学习如何使用 GitHub Actions 实现自动化 CI/CD
|
- 学习如何使用 GitHub Actions 实现自动化 CI/CD,以及工作流的编写和优化
|
||||||
- 了解 Drone 等第三方 CI/CD 工具的集成方式
|
- 了解 Drone 等第三方 CI/CD 工具的架构、部署和配置方式
|
||||||
- 学会在本地 IDE 中集成 Docker,提升开发效率
|
- 学会在本地 IDE (VS Code) 中集成 Docker,利用容器开发工具提升开发效率
|
||||||
- 掌握实战中常见的 DevOps 场景和最佳实践
|
- 掌握实战中常见的 DevOps 场景、最佳实践和故障排查方法
|
||||||
|
|
||||||
## 章节内容导航
|
## 章节内容导航
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
[](https://github.com/yeasy/docker_practice) [](https://github.com/yeasy/docker_practice/releases) [](https://docs.docker.com/engine/release-notes/) [][1]
|
[](https://github.com/yeasy/docker_practice) [](https://github.com/yeasy/docker_practice/releases) [](https://docs.docker.com/engine/release-notes/) [][1]
|
||||||
|
|
||||||
**v1.6.3**
|
**v1.6.4**
|
||||||
|
|
||||||
[Docker](https://www.docker.com) 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的维护效率,降低了云计算应用开发的成本!使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效和轻松!
|
[Docker](https://www.docker.com) 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的维护效率,降低了云计算应用开发的成本!使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效和轻松!
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user