使用单个 Dockerfile 在 GCP 上部署本地 docker 组合的节点 / Express & React 应用程序



我有一个nodejs/express/react应用程序在本地运行,在:3001启动一个节点服务器,在:3000启动一个react应用程序,可以向express API发出请求。

然后我做了一个/client/Dockerfile和一个/server/Dockerfile,以及一个/docker-compose.yml,它能够在本地运行我的应用程序而没有问题。

我现在想把它部署到GCP的云运行,但GCP不允许多个docker图像/docker-compose (AFAIK -它只有一个字段"Dockerfile"),所以我试图重新配置的东西与一个单一的docker文件工作。

这是我为工作的本地实例所做的:

客户机/Dockerfile

FROM node:lts-slim
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
EXPOSE 3000
CMD [ "npm", "start" ]

服务器/Dockerfile

FROM node:lts-slim
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
EXPOSE 3001
# You can change this
CMD [ "npm", "run", "dev" ]

docker-compose.yml

version: "3"
services:
client:
container_name: gcp-cloudrun-client
build:
context: ./client
dockerfile: Dockerfile
image: mheavers/gcp-cloudrun-client
ports:
- "3000:3000"
volumes:
- ./client:/usr/src/app
server:
container_name: gcp-cloudrun-server
build:
context: ./server
dockerfile: Dockerfile
image: mheavers/gcp-cloudrun-server
ports:
- "3001:3001"
volumes:
- ./server:/usr/src/app

我如何将所有这些合并到一个单一的Dockerfile中,并取消docker-compose?

这是我替换docker-compose的最后一个docker文件:

FROM node:lts-slim AS client
WORKDIR /usr/src/app
COPY client/ ./client/
RUN cd client && npm install && npm run build
FROM node:lts-slim AS server
WORKDIR /root/
COPY --from=client /usr/src/app/client/build ./client/build
COPY server/package*.json ./server/
RUN cd server && npm install
COPY server/index.js ./server/
EXPOSE 80
CMD ["node", "./server/index.js"]

相关内容

  • 没有找到相关文章

最新更新