# 用 Docker 部署到云与 K8s 的关系

URL: https://caijiao.org/docker/cicd/deploy-to-cloud
Source: docs/docker/cicd/deploy-to-cloud.md
Description: 本章节介绍如何使用 Docker 将应用部署到云环境，并讲解 Docker 与 Kubernetes（K8s）的关系、容器编排与管理策略，帮助开发者理解容器化应用的云端部署方式。

Docker 提供了容器化技术，方便应用打包和部署，而 Kubernetes 则负责大规模容器的编排和管理。本节介绍两者在云部署中的应用与协作。

## 1. 使用 Docker 部署到云

- 常见云服务平台支持 Docker：
  - **AWS ECS / EKS**
  - **Google Cloud Run / GKE**
  - **Azure Container Instances / AKS**

### 1.1 部署步骤示例（Docker + AWS ECS）

1. 构建镜像：

```bash
docker build -t myapp:latest .
````

2. 登录容器注册表：

```bash
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <account>.dkr.ecr.us-east-1.amazonaws.com
```

3. 推送镜像：

```bash
docker tag myapp:latest <account>.dkr.ecr.us-east-1.amazonaws.com/myapp:latest
docker push <account>.dkr.ecr.us-east-1.amazonaws.com/myapp:latest
```

4. 创建 ECS 服务运行镜像，配置任务定义和端口映射

## 2. Docker 与 Kubernetes 的关系

- **Docker**：负责应用容器化，将应用打包成可移植镜像
- **Kubernetes（K8s）**：负责容器编排和管理，实现自动化部署、扩展和高可用
- Docker 镜像是 K8s 部署的基础单元

### 2.1 Kubernetes 部署示例

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp
          image: myregistry/myapp:latest
          ports:
            - containerPort: 80
```

- K8s 会创建多个副本容器，实现负载均衡和高可用
- Service 对外提供统一访问入口

## 3. 部署策略与协作

- **Docker** 负责镜像构建与版本控制

- **Kubernetes** 负责：

  - 容器调度与伸缩
  - 网络与服务发现
  - 配置管理和 Secret
  - 健康检查与自动重启

- 云平台可同时支持 Docker 容器和 K8s 集群管理，提高应用部署灵活性

## 4. 最佳实践

- 构建轻量化镜像，减少部署时间
- 镜像打标签，配合 CI/CD 自动化部署
- K8s 使用 Deployment 管理应用生命周期
- 配置 Secret 和 ConfigMap 管理敏感信息与配置
- 结合监控与日志系统保障运行稳定

---

理解 Docker 与 Kubernetes 的关系，可以让开发者在云环境中高效部署、管理和扩展容器化应用，实现自动化运维与高可用架构。
