¿Hay alguna diferencia entre:
docker run -v /host/directory:/container/directory my_image command_to_run
Dockerfile
of my_image
no incluye VOLUME ["/container/directory"]
docker run -v /host/directory:/container/directory my_image command_to_run
Dockerfile
of my_image
incluye VOLUME ["/container/directory"]
Sé que los datos del volumen persisten independientemente del ciclo de vida del contenedor. Sin embargo, dado que quiero trabajar con mis datos locales desde un contenedor, ¿hace alguna diferencia si el punto de assembly dentro del contenedor es un volumen?
No hay diferencia si monta la ruta desde el host al contenedor. El sistema de files del host se montará en la parte superior de ese directory dentro del contenedor.
La diferencia entre enumerar el volumen y no includelo dentro de la image es el comportamiento de Docker cuando crea una image sin especificar un volumen. Cuando el volumen esté definido en la image, la window acoplable creará un volumen "anónimo" que se puede ver con el docker volume ls
como una cadena larga de uuid. Estos volúmenes rara vez son útiles, por lo que recomiendo no definir un volumen en la image y, en su lugar, definirlos únicamente en el command de docker run
docker-compose.yml
o docker-compose.yml
definición de docker-compose.yml
.
Las desventajas de definir un volumen en la image incluyen:
Es posible que las líneas posteriores en Dockerfile o en Dockerfile descendiente no puedan cambiar el contenido en esta location. El comportamiento de Docker con esto varía según el escenario y la versión, por lo que, para pnetworkingecir, una vez que se define un volumen en una image, considero ese directory fuera de los límites.
La creación de volúmenes anónimos es difícil de usar y es probable que desordere el sistema de files.
Publiqué un blog sobre este tema hace un time si está interesado en get más información.