我有一个像这样的 Dockerfiles
# build-home
FROM node:10 AS build-home
WORKDIR /usr/src/app
COPY /home/package.json /home/yarn.lock /usr/src/app/
RUN yarn install
COPY ./home ./
RUN yarn build
# build-dashboard
FROM node:10 AS build-dashboard
WORKDIR /usr/src/app
COPY /dashboard/package.json /dashboard/yarn.lock /usr/src/app/
RUN yarn install
COPY ./dashboard ./
RUN yarn build
# run
FROM nginx
EXPOSE 80
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=build-home /usr/src/app/dist /usr/share/nginx/html/home
COPY --from=build-dashboard /usr/src/app/dist /usr/share/nginx/html/dashboard
在这里构建两个反应应用程序,然后将构建的工件放在 nginx 中。为了提高构建性能,我需要在构建阶段缓存dist
文件夹。为此,我创建了一个build-home
build-dashboard
volume
docker-compose.yml
...
web:
container_name: web
build:
context: ./web
volumes:
- ./web-build-cache:/usr/src/app
ports:
- 80:80
depends_on:
- api
我已经停在这个阶段,因为我不明白如何添加volume
由docker-compose
first 创建的build-home
阶段,然后将其添加volume
到build-dashboard
. 也许我应该创建两个卷并将每个卷附加到每个构建阶段,但是如何做到这一点?
更新:
家庭应用:
- 安装模块:100.91s
- 构建应用程序:39.51s
仪表板应用:
- 安装模块:100.91s
- 构建应用程序:50.38s
总时间:
real 8m14.322s
user 0m0.560s
sys 0m0.373s
第二次构建(没有代码或依赖项更改):
家庭应用:
- 安装模块:使用缓存
- 构建应用程序:使用缓存
仪表板应用:
- 安装模块:使用缓存
- 构建应用程序:使用缓存
总时间:
real 0m2.933s
user 0m0.309s
sys 0m0.427s
第三次构建(第一个应用程序中的代码更改很小):
家庭应用:
- 安装模块:使用缓存
- 构建应用程序:50.04s
仪表板应用:
- 安装模块:使用缓存
- 构建应用程序:使用缓存
总时间:
real 0m58.216s
user 0m0.340s
sys 0m0.445s
没有 Docker 的家庭应用程序的初始构建:89.69s
real 1m30.111s
user 2m6.148s
sys 2m17.094s
没有Docker的家庭应用程序的第二次构建dist
,该文件夹存在于磁盘上(没有代码或依赖项更改):18.16s
real 0m18.594s
user 0m20.940s
sys 0m2.155s
没有 Docker 的家庭应用程序的第三次构建dist
,该文件夹存在于磁盘上(代码更改很小):20.44s
real 0m20.886s
user 0m22.472s
sys 0m2.607s
在 docker-container 中,应用程序的第三次构建要长 2 倍。这表明如果第一个构建的结果在磁盘上,其他构建完成得更快。在docker容器中,第一个之后的所有程序集都与第一个一样执行,因为没有dist
文件夹。