Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Github更新GCE上docker容器的操作_Docker_Google Cloud Platform_Docker Compose_Google Compute Engine_Github Actions - Fatal编程技术网

Github更新GCE上docker容器的操作

Github更新GCE上docker容器的操作,docker,google-cloud-platform,docker-compose,google-compute-engine,github-actions,Docker,Google Cloud Platform,Docker Compose,Google Compute Engine,Github Actions,我目前正在尝试创建一个Github操作,自动更新我的一个GCE实例上正在运行的容器。我正在使用: 到目前为止,我所做的更新应用程序的工作是手动从我的github repo中提取更改并运行docker compose-up--build。我使用docker compose,因为我的应用程序也使用Postgres DB 这是我的Dockerfile: FROM node:14 WORKDIR /usr/src/app COPY . . RUN npm install CMD [ "npm&

我目前正在尝试创建一个Github操作,自动更新我的一个GCE实例上正在运行的容器。我正在使用:

到目前为止,我所做的更新应用程序的工作是手动从我的github repo中提取更改并运行
docker compose-up--build
。我使用docker compose,因为我的应用程序也使用Postgres DB

这是我的
Dockerfile

FROM node:14
WORKDIR /usr/src/app
COPY . .
RUN npm install
CMD [ "npm", "run", "prod" ]
和my
docker compose.yaml
(带有虚拟值):

应用程序本身工作正常。docker映像在主服务器上提交后创建并存储在GCP容器注册表中,但如何将此容器与Postgres容器一起运行?

您有两种解决方案

  • 要么使用Docker Compose
  • 或者将GCE与容器映像一起使用
使用Docker Compose,您不需要使用GCE功能,只需在启动时运行命令即可。如果要这样做,可以定义一个。我的建议是将它存储在Google云存储上,并在您的应用程序中引用它(不要忘记在您的计算引擎上授予正确的角色和作用域,以允许它访问该文件)

然后,每次部署新版本时,您都会(使用github操作)在GCS中使用最新的映像标记(使用GIT_SHA值)更新启动脚本,并重新启动它并重播启动脚本(从而加载最新映像)


因为使用docker compose不是GCE的固有功能(以及维护、修补等功能),所以我不推荐这样做

就性能和可伸缩性而言,最好将其用于postgres数据库,并且只在GCE上部署节点容器。这样,您就可以使用GCE with container image功能开箱即用



但这个解决方案还不够完美。您只有一个VM,您必须监视、更新、修补,。。。最终的解决方案是使用全新的节点容器来承载您的节点容器,或者如果您的节点容器只响应HTTP请求。

您所说的
是什么意思?如何将此容器与Postgres容器一起运行?如果我理解正确,您似乎没有为它们定义网络。@Saeed我正在使用上面的docker compose文件启动我的应用程序所需的两个容器。我不明白如何使用Github操作和
gcloud
实现同样的效果。Github操作模板还没有使用docker compose文件,这意味着postgres容器永远不会启动/更新。
FROM node:14
WORKDIR /usr/src/app
COPY . .
RUN npm install
CMD [ "npm", "run", "prod" ]
version: "3"
services:
  app:
    container_name: cname
    restart: always
    build: .
    depends_on:
      - postgres
  postgres:
    image: postgres
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pw
      POSTGRES_DB: db
    ports:
      - '5432:5432'
    volumes:
      - db-volume:/var/lib/postgresql/data

volumes:
  db-volume: