使用Docker来运行构​​build过程

我使用dockerdocker-compose来build立一个构buildpipe道。 我有一个用javascript编写的前端,需要在使用之前进行构build。 后端是用go写的。

为了使这个组件与我们的docker-compose设置的其他部分整合,我也想在Docker镜像中进行构build。

这是我要去的stream程:

  • 在构build过程中:
    • build立前端的东西,并把它放在/output (这是绑定到
      output
    • build立后端服务器
  • 运行时做:
    • 运行服务器,它可以访问/output的构build文件

我对dockerdocker-compose都很docker ,所以我不确定这是否可行,甚至是正确的做法。

作为参考,这里是我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"] 

这里有点不对劲,但我不知道是什么。 看起来好像构build步骤的output没有保留在output量中。 我能做些什么来解决这个问题?

docker build期间不能附加卷。 这样做的原因是docker build命令的目标是构build一个映像,除此之外,不需要拥有卷,因为Dockerfile具有ADD / COPY。

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

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