Volumes e VOLUME: Existe um caminho em ambos os lugares?

1

Se eu vou rodar o nginx assim:

docker run -i -t -p 80:80 \
-v /docker/dev:/dev \
-v /docker/var/www:/var/www \
-v /docker/var/log/nginx:/var/log/nginx \
-v /docker/etc/nginx:/etc/nginx \
--name clmnginxbash quasaur/nginximage /bin/bash

... e estou usando o sistema de arquivos do Docker HOST para armazenar as configurações de nginx e o próprio site, eu não deveria ter que incluir uma instrução VOLUME para esses compartilhamentos, ou deveria?

VOLUME ["/etc/nginx", "/var/www","/var/log/nginx"]

Na verdade, eu não seria capaz de remover esses diretórios da imagem no Dockerfile, já que eles não serão usados?

RUN rm -rf /usr/share/nginx/www /etc/nginx /var/log/nginx

Obrigado pelo seu feedback!

    
por Quasaur 08.09.2014 / 20:30

1 resposta

0

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 .

    
por 08.09.2014 / 21:00