我有这样的码头工人
# 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
这里构建两个react应用程序,然后将构建的工件放入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
我在这个阶段停了下来,因为我不明白怎么加
体积
创建者
docker-compose
第一个是
建造家园
阶段,添加后
体积
到
构建仪表板
.
也许我应该创建一个两个卷,并将每个卷附加到每个构建阶段,但是如何做到这一点呢?
更新:
Initial build.
家庭应用程序:
-
安装模块:100.91S
-
构建应用程序:39.51s
仪表板应用程序:
-
安装模块:100.91S
-
构建应用程序:50.38s
总时间:
real 8m14.322s
user 0m0.560s
sys 0m0.373s
Second build
(无代码或依赖项更改):
家庭应用程序:
-
安装模块:使用缓存
-
构建应用:使用缓存
仪表板应用程序:
-
安装模块:使用缓存
-
构建应用:使用缓存
总时间:
real 0m2.933s
user 0m0.309s
sys 0m0.427s
Third build
(第一个应用程序中的代码变化很小):
家庭应用程序:
-
安装模块:使用缓存
-
构建应用程序:50.04s
仪表板应用程序:
-
安装模块:使用缓存
-
构建应用:使用缓存
总时间:
real 0m58.216s
user 0m0.340s
sys 0m0.445s
Initial build
无Docker的家庭应用:89.69s
real 1m30.111s
user 2m6.148s
sys 2m17.094s
Second build
没有Docker的家庭应用程序
迪特
文件夹存在于磁盘上(无代码或依赖项更改):18.16s
real 0m18.594s
user 0m20.940s
sys 0m2.155s
Third build
没有Docker的家庭应用程序
区
文件夹存在于磁盘上(代码变化很小):20.44s
real 0m20.886s
user 0m22.472s
sys 0m2.607s
在Docker容器中,应用程序的第三次构建要长2倍。这表明,如果第一次生成的结果在磁盘上,则其他生成的完成速度更快。在Docker容器中,第一个之后的所有程序集只要第一个就执行,因为没有
迪特
文件夹。