使用Docker运行构建过程

前端之家收集整理的这篇文章主要介绍了使用Docker运行构建过程 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在使用docker和docker-compose设置构建管道.我有一个用javascript编写的前端,需要在使用前进行构建.后端是用go编写的.

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

这是我要执行的流程:

>在构建期间执行:

>构建前端的东西,并将其放在/ output(绑定到
输出
>构建后端服务器

>运行时执行:

>运行服务器,它可以访问/ output中的构建文件

我对docker和docker-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"]

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

最佳答案
您无法在Docker构建期间附加卷.
这样做的原因是docker build命令的目标是构建映像,除此之外,它不需要卷,因为Dockerfile具有ADD / COPY.

为了产生输出,您应该创建一个脚本,该脚本主要由npm安装; npm构建;从当前dockerfile cp /usr/src / app / build / * / output并使用此脚本作为dockerfile中的入口点/ cmd.

我不确定compose是否可以运行此命令,但是无论如何,我发现它被包装在shell脚本中更为清晰,该脚本首先执行前端构建器容器,然后以输出目录作为卷执行后端容器.

猜你在找的Docker相关文章