2 containers docker dockerfile docker-image docker-volume
当Dockerfile包含VOLUME指令(比如说)VOLUME [/opt/apache2/www, ...](希望这条路径存在于实际安装中)时,这意味着该路径将被挂载到某个东西(对吗?).这个VOLUME指令用于图像而不是它的一个实例(容器),但适用于每个实例.
无论如何图像是否包含定义的VOLUME,在启动容器时,run命令可以通过将本地主机路径映射到容器路径来创建卷.
docker run --name understanding_volumes -v /localhost/path1:/opt/apache2/www -v /localhost/path2:/any/container/path image_name
Run Code Online (Sandbox Code Playgroud)
上面应该清楚说明虽然/any/container/path在Dockerfile中没有定义为VOLUME,但我们可以在运行容器时挂载它.
也就是说,这个SOF问题对它有所启发 - 在DockerFile中定义VOLUME挂载点而不是adhoc cmd-line -v的目的是什么?.这里提到了VOLUME指令的一个好处.也就是说,其他容器可以从中受益.使用--from-container(无法找到此选项docker run --help,不确定答案是否意味着--volumes-from)无论如何因此安装点可以通过某种自动方式访问其他容器.大.
我的第一个问题是,/any/container/path image_name安装在容器理解 _volumes上的另一个卷路径是否也可用于第二个容器 --from-container或--volumes-from(无论哪个选项是正确的)?
我的下一个问题是,使用VOLUME指令只是为了让其他容器链接到这条路径 - >即/opt/apache2/www通过简单的链接使数据可供其他容器使用.所以它只是分享.或者是否有任何数据也可以提供给第一个容器.
在Dockerfile中定义卷的优点是可以将图像定义中的卷位置指定为从图像创建者到图像用户的文档.这只是唯一的好处.
它很早就被添加到docker中,很可能当数据容器是持久化数据的唯一方法时.我们现在有一个已废弃数据容器的命名卷的解决方案.我们还添加了compose文件,以易于理解和重用的语法定义容器的运行方式.
虽然自我记录的图像有一个好处,但有很多缺点,我强烈建议不要在图像中为我的客户和任何发布图像以便一般重用的人定义一个卷:
最终用户强制卷,无法取消定义图像中的卷.
如果未在运行时定义卷(使用-v或撰写文件),则用户将看到docker volume ls其中与创建它们无关的匿名卷.这些几乎总是无用的磁盘空间浪费.
它们破坏了扩展图像的能力,因为VOLUME在行之后对图像中的卷的任何更改通常被docker忽略.这意味着用户永远不能添加他们自己的初始卷数据,这非常令人困惑,因为docker没有在图像构建期间忽略用户更改的警告.
如果您需要将卷作为用户运行时,您始终可以使用-v或撰写文件来定义它,即使该数据库未在Dockerfile中定义也是如此.许多用户误以为您必须在映像中定义它才能在运行时使其成为命名卷.
--volumes-from通过定义图像中的音量,使用能力不受影响,但我建议您避免使用此功能.它在swarm模式下不存在,并且您可以通过使用在两个容器中装入的命名卷来获得所有相同的功能以及更多粒度.
| 归档时间: |
|
| 查看次数: |
1027 次 |
| 最近记录: |