我遇到一个问题,就是我的容器变得太重,其中许多容器具有很多相同的依赖关系。
我想制作一个基本容器,该容器将安装并保存所有依赖项,然后让其他容器指向该基本容器上的依赖项目录(使用卷)。
我试图对此做一个小的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目录中。
/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个卷(其中一个用于输入文件,另一个用于容器将创建的文件)
在那种情况下,我如何获得双向容量,为什么会发生这种情况也将得到很好的解释。
当你docker run有一个卷,它会 先 在主机上创建目录,如果它不存在,然后装入量,这样就可以读取它。所以事情是,容器中的目标目录将被主机上的目录替换,从而导致目录为空。
docker run
只需在“运行时”复制依赖项,您就不再需要该容器了tail -f
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