run hub example compose docker dockerfile

hub - dockerfile example



Dockerfile: entendiendo la instrucción VOLUMEN (1)

Los volúmenes de un contenedor son solo directorios en el host, independientemente del método por el que fueron creados. Si no especifica un directorio en el host, Docker creará un nuevo directorio para el volumen, normalmente en /var/lib/docker/vfs .

Sin embargo, el volumen se creó, es fácil encontrar dónde está en el host mediante el comando de docker inspect la docker inspect por ejemplo:

$ ID=$(docker run -d -v /data debian echo "Data container") $ docker inspect -f {{.Mounts}} $ID [{0d7adb21591798357ac1e140735150192903daf3de775105c18149552a26f951 /var/lib/docker/volumes/0d7adb21591798357ac1e140735150192903daf3de775105c18149552a26f951/_data /data local true }]

Podemos ver que Docker ha creado un directorio para el volumen en /var/lib/docker/volumes/0d7adb21591798357ac1e140735150192903daf3de775105c18149552a26f951/_data .

Usted es libre de modificar / agregar / eliminar archivos en este directorio desde el host, pero tenga en cuenta que es posible que necesite usar sudo para los permisos.

Docker solo eliminará los directorios de volúmenes en dos circunstancias:

  • Si se da la opción --rm la --rm la --rm docker run , cualquier volumen se eliminará cuando salga el contenedor
  • Si un contenedor se elimina con el docker rm -v CONTAINER , se eliminarán todos los volúmenes.

En ambos casos, los volúmenes solo se eliminarán si ningún otro contenedor los refiere. Los volúmenes asignados a directorios de host específicos (la -v HOST_DIR:CON_DIR ) nunca son eliminados por Docker. Sin embargo, si elimina el contenedor de un volumen, el esquema de denominación significa que tendrá dificultades para averiguar qué directorio contiene el volumen.

Entonces, preguntas específicas:

  1. Sí y sí, con las advertencias anteriores.
  2. Cada volumen gestionado de Docker obtiene un nuevo directorio en el host
  3. La instrucción VOLUME es idéntica a -v sin especificar el directorio del host. Cuando se especifica el directorio de host, Docker no crea ningún directorio para el volumen, no se copiará en los archivos de la imagen y nunca eliminará el volumen ( docker rm -v CONTAINER no eliminará los volúmenes asignados a los directorios de host especificados por el usuario).

Más información aquí:

http://container-solutions.com/2014/12/understanding-volumes-docker/

Tomemos un ejemplo.

La siguiente es la instrucción de VOLUME para la imagen nginx :

VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]

Aquí están mis preguntas:

  1. Cuando inicie el contenedor, ¿aparecerán estos directorios en mi host? ¿Y cuando pare mi contenedor, los directorios se quedarán?

  2. Si algunos de estos directorios (o todos) ya existen en mi host, ¿qué pasará? Por ejemplo, digamos que la imagen viene con un archivo de configuración predeterminado dentro del directorio /etc/nginx del contenedor, y también tengo un archivo de configuración dentro de /etc/nginx en mi host. Cuando se inicie el contenedor, ¿cuál de estos archivos tendrá prioridad?

  3. ¿Cuál es la diferencia clave entre -v /host/dir:container/dir y VOLUME ?

Referencias: