加
两者之间的根本区别在于,
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在您希望运行应用程序的所有环境中都存在。



