【发布时间】:2019-09-11 06:23:22
【问题描述】:
我在 docker 容器和 GKE 上的 k8s 中运行我的单体应用程序。
该应用程序包含 python 和节点依赖项以及用于前端捆绑的 webpack。
我们已经实施了 CI/CD,大约需要 5-6 分钟来构建和部署新版本到 k8s 集群。
主要目标是尽可能减少构建时间。编写的 Dockerfile 是多阶段的。
Webpack 需要更多时间来生成捆绑包。要构建 docker 映像,我正在使用已经很高的 config worker。
为了减少时间,我尝试使用Kaniko builder。
问题:
作为 python 代码的 docker 缓存层,它运行良好。但是当JS 或CSS 文件有任何变化时,我们必须生成bundle。
当JS & CSS 文件发生任何变化时,如果生成新的捆绑包,则使用缓存层。
有没有办法通过将一些值传递给 docker 文件来分离构建新包或使用缓存。
这是我的 docker 文件:
FROM python:3.5 AS python-build
WORKDIR /app
COPY requirements.txt ./
RUN pip install -r requirements.txt &&\
pip3 install Flask-JWT-Extended==3.20.0
ADD . /app
FROM node:10-alpine AS node-build
WORKDIR /app
COPY --from=python-build ./app/app/static/package.json app/static/
COPY --from=python-build ./app ./
WORKDIR /app/app/static
RUN npm cache verify && npm install && npm install -g --unsafe-perm node-sass && npm run sass && npm run build
FROM python:3.5-slim
COPY --from=python-build /root/.cache /root/.cache
WORKDIR /app
COPY --from=node-build ./app ./
RUN apt-get update -yq \
&& apt-get install curl -yq \
&& pip install -r requirements.txt
EXPOSE 9595
CMD python3 run.py
【问题讨论】:
-
您的 Dockerfile 中有三个构建版本。因此,使用前两个 buld 创建一个新图像并创建新的图像层并使用它来构建应用程序。
-
我已经采用了这种方式。首先它是下载 python 依赖项,其次是生成前端包。第三,它混合了整个应用程序并运行。
标签: docker webpack kubernetes google-cloud-platform google-kubernetes-engine