Docker:保持Python包一致性
我想在我的家庭实验室里使用Docker来做一些与Python相关的项目。为了节省磁盘空间,并且让不同Docker容器里的Python包保持一致,我想找个办法在不同的服务之间共享已安装的Python包。
这些服务包括:
- Jupyterlab(用来创建Python脚本)
- Kestra(用来自动执行脚本)
- 几个Flask应用
我的期望是:
如果我在Jupyterlab里安装了pip install pandas
,那么这个包在Kestra的容器里也能立刻用。
我对Docker和Docker Compose还很陌生。
1 个回答
0
你可以使用 Docker 的 卷(Volumes)。
卷可以更安全地在多个容器之间共享。
你可以在卷上安装你的库文件。
你可以在 dockerfile
、docker-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 文档 链接
要注意,容器之间可能会覆盖彼此存储在卷上的数据。