Docker:保持Python包一致性

0 投票
1 回答
55 浏览
提问于 2025-04-12 02:05

我想在我的家庭实验室里使用Docker来做一些与Python相关的项目。为了节省磁盘空间,并且让不同Docker容器里的Python包保持一致,我想找个办法在不同的服务之间共享已安装的Python包。

这些服务包括:

  • Jupyterlab(用来创建Python脚本)
  • Kestra(用来自动执行脚本)
  • 几个Flask应用

我的期望是:
如果我在Jupyterlab里安装了pip install pandas,那么这个包在Kestra的容器里也能立刻用。

我对Docker和Docker Compose还很陌生。

1 个回答

0

你可以使用 Docker 的 卷(Volumes)

卷可以更安全地在多个容器之间共享。

你可以在卷上安装你的库文件。

你可以在 dockerfiledocker-compose 文件或者通过 cli 来定义卷。

不过,要共享卷,你需要定义命名卷。

你可以通过 cli 或者 docker-compose 文件来做到这一点。

cli

docker volume create --name shared-volume
docker run -d --name container1 -v shared-volume:/path/in/container1 my-image1
docker run -d --name container2 -v shared-volume:/path/in/container2 my-image2

docker-compose 文件

services:
 service1:
    image: my-image1
    volumes:
      - shared-volume:/path/in/container1
 service2:
    image: my-image2
    volumes:
      - shared-volume:/path/in/container2
volumes:
 shared-volume

命名卷是在容器内的路径 /path/in/container(1/2) 上声明的。Docker 会创建一个名为 shared-volume 的卷(在你的电脑上是一个文件夹),并将其挂载到容器内的 /path/in/container(1/2) 位置。这意味着,任何写入到容器内 /path/in/container(1/2) 的数据都会存储在这个卷中,即使容器停止或被删除,这些数据也会保留。

docker volume 图片来自 Docker 文档 链接

要注意,容器之间可能会覆盖彼此存储在卷上的数据。

撰写回答