一尘不染

制作一个依赖关系容器并将其卷挂载到其他容器上

docker

我遇到一个问题,就是我的容器变得太重,其中许多容器具有很多相同的依赖关系。

我想制作一个基本容器,该容器将安装并保存所有依赖项,然后让其他容器指向该基本容器上的依赖项目录(使用卷)。

我试图对此做一个小的POC,我首先尝试让一个容器安装python软件包,然后让另一个容器使用该模块运行python脚本。

我想在主机上建立一个目录,该目录将挂载在所有容器上,并将包含所有需要的数据和依赖项。

我应该注意,即使可能更好,我也无法使用docker compose。

这是我的基本容器的Dockerfile:

FROM python:3.6-slim

RUN apt-get update && apt-get install -y vim

RUN pip install --install-option="--prefix=/volumes/shared/dependencies" deepdiff

CMD tail -f /dev/null

您会看到pip将安装到/volumes/shared/dependencies目录中。

我这样运行:

docker build -t base_container .
docker run -ti -v "$PWD/shared/base_dependencies":/volumes/shared/dependencies base_container

现在,如果我进入容器,/volumes/shared/dependencies我会看到放在主机目录中的文件,但看不到已安装的软件包。另一方面,如果主机目录为空,则会看到已安装的软件包。

我还尝试应用2个卷(其中一个用于输入文件,另一个用于容器将创建的文件)

在那种情况下,我如何获得双向容量,为什么会发生这种情况也将得到很好的解释。


阅读 287

收藏
2020-06-17

共1个答案

一尘不染

当你docker run有一个卷,它会
在主机上创建目录,如果它不存在,然后装入量,这样就可以读取它。所以事情是,容器中的目标目录将被主机上的目录替换,从而导致目录为空。

只需在“运行时”复制依赖项,您就不再需要该容器了tail -f

FROM python:3.6-slim

RUN apt-get update && apt-get install -y vim

RUN pip install --install-option="--prefix=/temp" deepdiff

CMD cp -pr /temp /volumes/shared/dependencies
2020-06-17