我建议为docker映像创建单独的构建管道,在这里您知道npm和pip的需求并不那么频繁。
这将极大地提高速度,减少访问npm和pip注册表的时间。
official one
或者类似的
VMWare harbor
SonaType Nexus OSS
).
像这样的:
第一个Docker生成器
python builder:你的标签
[吉特里夫,日期等)
docker build --no-cache -t python-builder:YOUR_TAG -f Dockerfile.python.build .
FROM python:3.5
WORKDIR /app
COPY requirements.txt ./
RUN pip install -r requirements.txt &&\
pip3 install Flask-JWT-Extended==3.20.0
//
[吉特里夫,日期等)
docker build --no-cache -t js-builder:YOUR_TAG -f Dockerfile.js.build .
FROM node:10-alpine
WORKDIR /app
COPY app/static/package.json /app/app/static
WORKDIR /app/app/static
RUN npm cache verify && npm install && npm install -g --unsafe-perm node-sass
你的
:
docker build --no-cache -t app_delivery:YOUR_TAG -f Dockerfile.app .
FROM python-builder:YOUR_TAG as python-build
# Nothing, already "stoned" in another build process
FROM js-builder:YOUR_TAG AS node-build
ADD ##### YOUR JS/CSS files only here, required from npm! ###
RUN npm run sass && npm run build
FROM python:3.5-slim
COPY . /app # your original clean app
COPY --from=python-build #### only the files installed with the pip command
WORKDIR /app
COPY --from=node-build ##### Only the generated files from npm here! ###
RUN apt-get update -yq \
&& apt-get install curl -yq \
&& pip install -r requirements.txt
EXPOSE 9595
CMD python3 run.py
问题是:为什么要安装
curl
再次执行
pip install -r requirements.txt
每次触发
apt-get update
安装
没有
清理apt缓存
/var/cache/apt
文件夹产生更大的图像。
建议使用docker build命令和选项
--没有缓存
为了避免缓存结果:
docker build --no-cache -t your_image:your_tag -f your_dockerfile .
评论
:
你将有3个独立的dockerfile,如我上面列出的。
只有
如果你改变你的
python-pip
和
node-npm
要求,否则请为项目固定它们。
如果任何依赖性需求改变,则更新所涉及的docker图像,然后更新多级图像以指向最新构建的图像。
要优化环境并跨多阶段生成器复制文件,请尝试使用
virtualenv