You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 06:50:01