使用 Docker 到 运行 构建过程
Use Docker to run a build process
我正在使用 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
卷中。我该怎么做才能解决这个问题?
您无法在 docker build
期间附加卷。
这样做的原因是 docker build
命令的目标是构建一个镜像,没有别的,它不需要卷,因为 Dockerfile 有 ADD / COPY。
要生成输出,您应该创建一个脚本,该脚本主要执行当前 dockerfile 中的 npm install ; npm build ; cp /usr/src/app/build/* /output
,并将此脚本用作 dockerfile 中的入口点/cmd。
我不确定 compose 可以 运行 这个,但无论如何,我发现它更清楚地包含在一个 shell 脚本中,该脚本首先执行前端构建器容器,然后执行后端将输出目录作为卷的容器。
我正在使用 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
卷中。我该怎么做才能解决这个问题?
您无法在 docker build
期间附加卷。
这样做的原因是 docker build
命令的目标是构建一个镜像,没有别的,它不需要卷,因为 Dockerfile 有 ADD / COPY。
要生成输出,您应该创建一个脚本,该脚本主要执行当前 dockerfile 中的 npm install ; npm build ; cp /usr/src/app/build/* /output
,并将此脚本用作 dockerfile 中的入口点/cmd。
我不确定 compose 可以 运行 这个,但无论如何,我发现它更清楚地包含在一个 shell 脚本中,该脚本首先执行前端构建器容器,然后执行后端将输出目录作为卷的容器。