使用Docker运行构建过程

时间:2016-05-18 17:23:30

标签: docker build-process docker-compose

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

要使此组件与我们docker-compose设置的其余部分集成,我还想在docker镜像中进行构建。

这是我想要的流程:

  • 在构建过程中执行:
    • 构建前端内容并将其放入/output(与...绑定) output
    • 构建后端服务器
  • 跑步的时候:
    • 运行服务器,它可以访问/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

backend/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卷中。我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:3)

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

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

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