当前位置: 首页 > 面试题库 >

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

卫开济
2023-03-14
问题内容

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

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

我试图对此做一个小的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个卷(其中一个用于输入文件,另一个用于容器将创建的文件)

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


问题答案:

当你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


 类似资料:
  • 问题内容: 我已经安装了带有mysql的docker容器,该容器公开了3306。我已经指定了数据库用户,数据库密码并创建了一个测试数据库,并将特权授予了新用户。 在另一个容器中,我想访问此数据库。 因此,我用一个简单的PHP脚本设置了新容器,该脚本在此db中创建了新表。 我知道mysql容器的ip是172.17.0.2这样: 比起使用mysqli,我创建了新表,并且一切正常。 但是我认为使用他的I

  • 问题内容: 示例(为简便起见,省略了许多选项): 这是错误的,因为没有名称名称的卷,这意味着该卷名称必须是文件的完整路径(即,您不能在该卷名称后附加路径)? 尝试设置只会返回错误。 有没有办法将单个文件安装到容器中? 问题答案: 您不能在命名卷中装入文件或子目录,源是命名卷或主机路径。NFS本身,以及您将在Linux中挂载的大多数文件系统,都要求您挂载整个文件系统,而不是单个文件,当下降到inod

  • 问题内容: 我对Docker中的整个数据量过程有疑问。基本上,这里有两个Dockerfile及其各自的运行命令: Dockerfile 1- 命令1- Dockerfile 2- 命令2- 因此,奇怪的是第一个dockerfile和命令按预期工作。docker守护程序将目录从容器装载到主机的位置。因此,我可以根据需要编辑配置文件,它们将在重新启动后保留在容器中。 但是,对于第二个dockerfil

  • 我有两张docker的照片。其中一个docker映像(来自第一个容器)在运行时会生成一些文件,这些文件需要由另一个容器使用。 我可以这样做吗?

  • 我有两个gradle项目。A和B。A依赖于B。我还将B作为一组工件上传到artifactory本地服务器。我用了maven publish。然后我试着用B作为A中的依赖项。我试着用它作为maven依赖项,所以我写道 但是,它总是尝试从repo1下载JAR。我想我误解了什么。首先,我不太明白为什么我需要maven,我也不明白我的工件发布是否等于maven安装。如何使用B作为A的依赖项?我的看法是:在

  • 是否可以将卷从一个容器装入另一个不同路径的容器中?例如。 null Docker-compose.yml 如果尝试这样做,则无法在上看到文件: