VOLUME
是设置指令,非必需。
VOLUME
指令用于指定挂载点
。
为什么要设置挂载点
呢?
因为容器
使用的是AUFS
文件系统,这种文件系统不能持久化数据, 当容器被关闭(stop
)后,所有的更改都会丢失。 当容器中的应用有持久化数据的需求时,我们需要将宿主机的某个目录挂载(mount
)到容器的某个挂载点挂载点
上,这样, 当容器被关闭(stop
)后,数据不会丢失,因为数据存放在宿主机上的硬盘中,硬盘就是用来持久化数据的。
既然是要把宿主机的某个文件夹挂载(mount
)到容器的某个挂载点
上, 我们在Dockerfile
中只使用VOLUME
指令指定了挂载点
, 没有指定被挂载的目录,那么被挂载的目录是哪个呢?我想你也能想到,一定是创建容器的时候,自动创建了一个文件夹,然后挂载(mount
)到这个容器中的。 我们可以通过docker inspect <containerId | containerName>
命令查看这个容器的信息看到。
我们知道,docker run
命令有个-v
参数,用于指定挂载点
。 这两种方式,官方推荐使用VOLUME
指令的方式指定,因为这种方式便于使用docker volume
统一管理, 省的你在创建容器的时候使用一堆参数,而且便于备份和迁移这些volume
。
VOLUME
指令格式:
VOLUME ["mountpoint1" "mountpoint2" ...]
VOLUME
指令可以一次设置多个挂载点。
示例:
VOLUME ["/opt/share" "/etc/nginx"]
VOLUME ["/opt/share"]
当,你的VOLUME
指令指定的挂载点与docker run
命令的-v
参数指定的挂载点相同的时候, 使用-v
参数指定的挂载点。也就是永远是命令的参数的优先级最高。