小编典典

为 Python 项目构建 Docker 映像时如何避免重新安装包?

all

我的 Dockerfile 类似于

FROM my/base

ADD . /srv
RUN pip install -r requirements.txt
RUN python setup.py install

ENTRYPOINT ["run_server"]

每次构建新映像时,都必须重新安装依赖项,这在我所在的地区可能非常慢。

cache对于已安装的软件包,我想到的一种方法是my/base用较新的图像覆盖图像,如下所示:

docker build -t new_image_1 .
docker tag new_image_1 my/base

所以下次我用这个 Dockerfile 构建时,my/base 已经安装了一些包。

但是这个解决方案有两个问题:

  1. 并非总是可以覆盖基本映像
  2. 随着更新的图像在其上分层,基础图像变得越来越大

那么我可以使用什么更好的解决方案来解决这个问题呢?

编辑:

关于我机器上 docker 的一些信息:

☁ test  docker version
Client version: 1.1.2
Client API version: 1.13
Go version (client): go1.2.1
Git commit (client): d84a070
Server version: 1.1.2
Server API version: 1.13
Go version (server): go1.2.1
Git commit (server): d84a070
☁ test  docker info
Containers: 0
Images: 56
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Dirs: 56
Execution Driver: native-0.2
Kernel Version: 3.13.0-29-generic
WARNING: No swap limit support

阅读 86

收藏
2022-07-18

共1个答案

小编典典

尝试构建一个看起来像这样的 Dockerfile:

FROM my/base

WORKDIR /srv
ADD ./requirements.txt /srv/requirements.txt
RUN pip install -r requirements.txt
ADD . /srv
RUN python setup.py install

ENTRYPOINT ["run_server"]

requirements.txtDocker将在 pip install 期间使用缓存,只要您.不对 . 这是一个例子。


这是一个简单的Hello, World!程序:

$ tree
.
2022-07-18