使用Docker来运行构build过程
我使用docker
和docker-compose
来build立一个构buildpipe道。 我有一个用javascript编写的前端,需要在使用之前进行构build。 后端是用go
写的。
为了使这个组件与我们的docker-compose
设置的其他部分整合,我也想在Docker镜像中进行构build。
这是我要去的stream程:
- 在构build过程中:
- build立前端的东西,并把它放在
/output
(这是绑定到
output
量 - build立后端服务器
- build立前端的东西,并把它放在
- 运行时做:
- 运行服务器,它可以访问
/output
的构build文件
- 运行服务器,它可以访问
我对docker
和docker-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容器,然后执行后端容器,输出目录作为一个卷。