Especificar -v
na execução ou volumes na instrução VOLUME
monta um volume que ultrapassa o UFS para armazenar dados persistentes. Consulte o link . É uma montagem real no contêiner:
$ docker run --rm ubuntu mount | grep mnt
Nada montado no contêiner. Vamos tentar novamente com -v /mnt
:
$ docker run --name mount -v /mnt ubuntu mount | grep mnt
/dev/sda1 on /mnt type ext4 (rw,relatime,data=ordered)
Legal, temos uma montagem persistente. Mas nós não especificamos um lugar no host para armazená-lo ... onde ele realmente mora?
$ docker inspect --format '{{ .Volumes }}' mount
map[/mnt:/mnt/sda1/var/lib/docker/vfs/dir/3d0eff68f9db4821821812f9e363c1e6058105de8a7a04ecfda113e8def9848a]
Como você já apontou, é possível mapear essa montagem para um diretório no host prefixando-a com algo:
$ docker run --rm -v /folder/on/host:/mnt
Portanto, para responder às suas duas perguntas, não, as instruções de VOLUME no Dockerfile
não são necessárias. Você deve removê-los? Eu suponho que você nunca terá dados persistentes nos containers sem especificar -v
.