【发布时间】:2022-02-20 04:07:22
【问题描述】:
我们有一个 python 项目,当前的 docker build 需要 350s。这是当前的 Dockerfile
FROM python:3.9
RUN apt-get update && \
apt-get install -y python2.7
WORKDIR /var/app
COPY . .
RUN pip install
ENTRYPOINT ["python3", "/var/app/src/main.py"]
每个docker build 都需要 350 秒
这里有明显的改进空间,所以我把它改成了这个
FROM python:3.9
RUN apt-get update && \
apt-get install -y python2.7
WORKDIR /var/app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
RUN pip install
ENTRYPOINT ["python3", "/var/app/src/main.py"]
这将后续构建时间缩短到 1 秒
经过一番搜索,我也发现了以下内容,
FROM python:3.9
RUN apt-get update && \
apt-get install -y python2.7
WORKDIR /var/app
COPY requirements.txt .
RUN --mount=type=cache,target=/root/.cache/pip pip install -r requirements.txt
COPY . .
RUN pip install
ENTRYPOINT ["python3", "/var/app/src/main.py"]
这需要 80 多岁左右的时间,但比第一个要好
- 我不明白#2 的注意事项是什么(为了安全起见)。
- 什么时候应该使用#3
我没有使用 pip/docker fyi 的经验
使用#2,作为 docker 缓存层的副作用,如果我的任何依赖项依赖版本发生更改,因为使用范围 operators,那么我仍然不会重建任何东西。这就是#3 想要解决的问题吗?也就是说,它会尽可能多地重用缓存,但也会确保更新任何必要的东西
如果不是,我不知道#3 发生了什么。 /root/.cache/pip 是特定于 pip 的目录还是可以是任何目录?
【问题讨论】:
-
你使用python 3.9基础镜像安装Python 2.7...逻辑?
-
这真的是特定于我们的应用程序的功能。 afaik 这是历史性的和必需的,没有它我们就无法完成我们正在尝试做的事情。我确信有更好的方法可以做到这一点,但我们可以稍后再谈@KevinC 编辑:似乎是在 mesos 上运行的容器的问题,因此需要同时安装 2.7