我正在学习Docker,并且对何时何地使用ADDand 有疑问VOLUME。我认为这两个都是这样做的:
ADD
VOLUME
在构建时将文件复制到映像。该映像包含所有文件,因此您可以非常轻松地进行部署。另一方面,在开发中每次都需要构建似乎不是一个好主意,因为构建需要开发人员运行命令来重建容器。另外,建造容器可能很耗时。
我了解docker run -v您可以使用容器文件夹安装主机文件夹,这样您就可以轻松地修改文件并观察容器中的应用对更改的反应。在开发中看起来很棒,但是我不确定如何以这种方式部署文件。
docker run -v
两者之间的根本区别在于,ADD无论您要添加的内容是文件夹还是文件,它实际上 都是图像的一部分 。任何使用您之后构建的图像的人都可以访问您所拥有的任何内容ADD。即使后来删除它,也是如此,因为Docker在层中工作并且该ADD层仍将作为映像的一部分存在。需要明确的是,您只能ADD在构建时进行操作,而不能ADD在运行时进行操作。
您想使用的一些例子ADD:
ADD ./requirements.txt /requirements.txt
RUN pip install -r /requirements.txt
ADD ./ /usr/local/git/my_app
WORKDIR /usr/local/git/my_app
CMD python ./main.py
另一方面,Volume只允许从映像运行的容器可以访问在其上运行容器的任何本地计算机上的某些路径。您 不能VOLUME在Dockerfile中使用目录中的文件。任何在你的卷目录将 不会在编译时访问的 ,但 会在运行时可以访问 。
您想使用的一些例子VOLUME:
/var/log/my_app
VOLUME /var/log/my_app
docker run -v /host/log/dir/my_app:/var/log/my_app some_repo/some_image:some_tag
VOLUME /etc/settings/my_app_settings
docker run -v /host/settings/dir:/etc/settings/my_app_settings some_repo/some_image:some_tag