我很难理解VOLUME(https://docs.docker.com/engine/reference/builder/#volume)的附加优势。
在Dockerfile中,可以使用mkdir创建目录。创建目录后,我们可以处理它。为什么指定VOLUME(mount)并分配给该目录? VOLUME mount有什么优势?我试图在没有VOLUME的情况下理解我们会错过什么。
对我来说,它看起来像一个冗余的功能,但我可能是错的。答案 0 :(得分:3)
VOLUME 命令将在容器中指定一个挂载点。此挂载点将映射到主机上的某个位置,该位置在创建容器时指定,或者如果未指定,则从 /var/lib/docker/volumes 中创建的目录中自动选择。
如果选择作为挂载点的目录包含任何文件,那么这些文件将被复制到该卷中。与 mkdir 相比的优势在于,它会在容器终止后将文件持久化到主机上的某个位置。
似乎有些人质疑您为什么要使用 VOLUME 命令,因为它会创建一个匿名卷。匿名卷不再有太多用途,基本上是早期 Docker 在卷可以命名之前的产物。您通常会在创建容器时指定卷名:
docker container run -v my-volume:/data image_tag
在这个例子中,/data 是容器中的挂载点,my-volume 是本地主机上的卷。如果运行此命令时我的卷不存在,则在本地主机上创建它。
答案 1 :(得分:0)
Dockerfile中的mkdir
只会在该容器中创建一个目录。卷可以在主机或不同的容器上,因此在容器被杀死时仍然存在。
答案 2 :(得分:0)
如果我们不希望在删除容器后丢失数据,则卷非常有用。配置文件,数据库数据等。因此,您可以使用相同的卷与完整的新docker容器。如果您只在Dockefile中创建一个目录,则该文件夹中的数据将被删除,与容器一起删除。