我使用docker
和docker-compose
来设置构建管道。我有一个用javascript编写的前端,需要在使用之前构建。后端写在go
。
要使此组件与我们docker-compose
设置的其余部分集成,我还想在docker镜像中进行构建。
这是我想要的流程:
/output
(与...绑定)
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
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
卷中。我该怎么做才能解决这个问题?
答案 0 :(得分:3)
docker build
期间无法附加音量。
这样做的原因是docker build
命令的目标是构建一个图像,没有别的,它不需要有卷,因为Dockerfile有ADD / COPY。
要生成输出,您应该创建一个脚本,该脚本主要从当前的dockerfile中执行npm install ; npm build ; cp /usr/src/app/build/* /output
,并将此脚本用作dockerfile中的入口点/ cmd。
我不确定compose是否可以运行它,但无论如何,我发现它更清楚地包含在首先执行前端构建器容器的shell脚本中,然后执行后端容器,并将输出目录作为卷