gpt4 book ai didi

docker - 使用 Docker 运行构建过程

转载 作者:行者123 更新时间:2023-12-01 13:43:51 25 4
gpt4 key购买 nike

我正在使用 dockerdocker-compose 来设置构建管道。我有一个用 javascript 编写的前端,需要在使用前构建。后端是用 go 编写的。

为了使这个组件与我们的 docker-compose 设置的其余部分集成,我也想在 docker 镜像中进行构建。

这是我想要的流程:

  • 在构建过程中:
    • 构建前端内容并将其放入/output(绑定(bind)到
      输出音量
    • 搭建后端服务器
  • 运行时做:
    • 运行服务器,它可以访问/output中的构建文件

我对 dockerdocker-compose 还很陌生,所以我不确定这是否可行,甚至不确定该怎么做。

作为引用,这是我的docker-compose.yml:

version: '2'
volumes:
output:
driver: local

services:
frontend:
build: .
volumes:
- output:/output
backend:
build: ./backend
depends_on:
- frontend
volumes:
- output:/output

Dockerfile:

FROM node

# create working dir
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
ADD package.json /usr/src/app/package.json

# install packages
RUN npm install
COPY . /usr/src/app

# build frontend files and place results in /output
RUN npm build
RUN cp /usr/src/app/build/* /output

后端/Dockerfile:

 FROM go

# copy and build server
COPY . /usr/src/backend
WORKDIR /usr/src/backend
RUN go build

# run the server
ENTRYPOINT ["/usr/src/backend/main"]

这里有问题,但我不知道是什么。构建步骤的输出似乎没有保存在 output 卷中。我该怎么做才能解决这个问题?

最佳答案

您不能在 docker build 期间附加卷。这样做的原因是 docker build 命令的目标是构建一个镜像,没有别的,它不需要卷,因为 Dockerfile 有 ADD/COPY。

要生成输出,您应该创建一个主要执行 npm install 的脚本; npm 构建; cp/usr/src/app/build/*/output 从您当前的 dockerfile 并将此脚本用作您的 dockerfile 中的入口点/cmd。

我不确定 compose 是否可以运行它,但无论如何,我发现它更清楚地包含在一个 shell 脚本中,该脚本首先执行前端构建器容器,然后使用输出目录作为卷执行后端容器。

关于docker - 使用 Docker 运行构建过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37306363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com