如何在GCP容器优化操作系统(COS)上部署多个Docker镜像?
单台GCE虚拟机部署多Docker镜像解决方案
核心逻辑
GCE虚拟机的"启动镜像"指的是操作系统镜像,你要部署的业务Docker镜像不能直接作为启动镜像添加,而是要在VM启动后通过容器运行时(Docker/containerd)拉取并运行。
具体实现步骤
1. 创建带容器运行时的GCE虚拟机
创建VM时选择以下两种OS之一:
- Container-Optimized OS:GCP官方提供,默认预装containerd,无需额外安装Docker
- 常规Linux发行版(Ubuntu/Debian):启动后手动安装Docker,执行命令:
sudo apt update && sudo apt install -y docker.io sudo systemctl enable --now docker
2. 配置启动脚本自动启动多容器
在VM创建页面的自定义元数据中添加startup-script,脚本会在VM启动时自动执行,拉取并启动你的三个镜像:
#!/bin/bash # 确保Docker服务运行 sudo systemctl start docker # 启动第一个服务容器 docker run -d --name service1 -p 8080:8080 gcr.io/[你的GCP项目ID]/service1:latest # 启动第二个服务容器 docker run -d --name service2 -p 8081:8080 gcr.io/[你的GCP项目ID]/service2:latest # 启动第三个服务容器 docker run -d --name service3 -p 8082:8080 gcr.io/[你的GCP项目ID]/service3:latest
注意:给VM绑定具有
storage.objectViewer角色的服务账号,确保VM能拉取GCR中的镜像。
3. 集成GitHub Actions实现自动化更新
修改现有GitHub Actions工作流,在镜像推送到GCR后,远程更新VM上的容器:
- name: Update containers on GCE VM run: | gcloud compute ssh [你的VM实例名] --zone [VM所在区域] --command " # 更新并重启第一个容器 docker pull gcr.io/[你的GCP项目ID]/service1:latest docker restart service1 # 更新并重启第二个容器 docker pull gcr.io/[你的GCP项目ID]/service2:latest docker restart service2 # 更新并重启第三个容器 docker pull gcr.io/[你的GCP项目ID]/service3:latest docker restart service3 "
优化建议:使用Docker Compose管理多容器,将容器配置写入
docker-compose.yml,启动和更新时只需执行docker compose up -d,简化操作。
最优替代方案(规范化管理)
如果多容器存在依赖、需要监控或滚动更新,推荐改用GKE(Google Kubernetes Engine):
- 将三个镜像封装为Kubernetes Deployment,部署到单节点GKE集群
- 自带负载均衡、健康检查、自动恢复等功能,比手动管理Docker更可靠
- GitHub Actions可通过
kubectl apply直接部署更新,流程更标准化
内容的提问来源于stack exchange,提问作者Apoorva Chandrashekar
相关产品推荐
相关产品推荐

