小编典典

Docker添加与VOLUME

docker

我正在学习Docker,并且对何时何地使用ADDand 有疑问VOLUME。我认为这两个都是这样做的:

在构建时将文件复制到映像。该映像包含所有文件,因此您可以非常轻松地进行部署。另一方面,在开发中每次都需要构建似乎不是一个好主意,因为构建需要开发人员运行命令来重建容器。另外,建造容器可能很耗时。

体积

我了解docker run -v您可以使用容器文件夹安装主机文件夹,这样您就可以轻松地修改文件并观察容器中的应用对更改的反应。在开发中看起来很棒,但是我不确定如何以这种方式部署文件。


阅读 300

收藏
2020-06-17

共1个答案

小编典典

两者之间的根本区别在于,ADD无论您要添加的内容是文件夹还是文件,它实际上 都是图像的一部分
。任何使用您之后构建的图像的人都可以访问您所拥有的任何内容ADD。即使后来删除它,也是如此,因为Docker在层中工作并且该ADD层仍将作为映像的一部分存在。需要明确的是,您只能ADD在构建时进行操作,而不能ADD在运行时进行操作。

您想使用的一些例子ADD

  • 您有一个要引用并安装在Dockerfile中的requirements.txt文件中的一些需求。然后,您可以做:ADD ./requirements.txt /requirements.txt后面RUN pip install -r /requirements.txt
  • 您想将应用程序代码用作Dockerfile中的上下文,例如,如果要将应用程序目录设置为映像中的工作目录,并希望从映像中运行容器中的默认命令实际运行您的应用程序,可以做:

ADD ./ /usr/local/git/my_app

WORKDIR /usr/local/git/my_app

CMD python ./main.py

体积

另一方面,Volume只允许从映像运行的容器可以访问在其上运行容器的任何本地计算机上的某些路径。您
不能VOLUME在Dockerfile中使用目录中的文件。任何在你的卷目录将 不会在编译时访问的 ,但 会在运行时可以访问

您想使用的一些例子VOLUME

  • 在容器中运行的应用程序将登录/var/log/my_app。您希望这些日志在主机上可以访问,而在删除容器时不要删除。您可以通过以下方法创建挂载点:/var/log/my_app添加VOLUME /var/log/my_app到Dockerfile,然后使用docker run -v /host/log/dir/my_app:/var/log/my_app some_repo/some_image:some_tag
  • 您有一些本地设置文件,希望容器中的应用可以访问。也许这些设置文件在本地计算机,开发环境和生产环境上是不同的。特别是如果这些设置文件是秘密文件,则在这种情况下,您 绝对不希望它们出现在图像中 。在这种情况下,一个好的策略是添加VOLUME /etc/settings/my_app_settings到Dockerfile中,使用来运行您的容器docker run -v /host/settings/dir:/etc/settings/my_app_settings some_repo/some_image:some_tag,并确保/ host / settings / dir在您希望运行应用程序的所有环境中都存在。
2020-06-17