La VOLUMEinstrucción crea un volumen de datos en su contenedor Docker en tiempo de ejecución. El directorio proporcionado como argumento VOLUMEes un directorio que pasa por alto el sistema de archivos de la unión. y se usa principalmente para datos persistentes y compartidos.
Si ejecuta docker inspect <your-container>, verá en la Mountssección que hay un Sourceque representa la ubicación del directorio en el host y un Destinationque representa la ubicación del directorio montado en el contenedor. Por ejemplo,
"Mounts": [
{
"Name": "fac362...80535",
"Source": "/var/lib/docker/volumes/fac362...80535/_data",
"Destination": "/webapp",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
]
Aquí hay 3 casos de uso para docker run -v:
docker run -v /data: Esto es análogo a especificar la VOLUMEinstrucción en su Dockerfile.
docker run -v $host_path:$container_path: Esto le permite montar $host_pathdesde su host $container_pathen su contenedor durante el tiempo de ejecución. En desarrollo, esto es útil para compartir código fuente en su host con el contenedor. En producción, esto se puede usar para montar cosas como la información DNS del host (que se encuentra en /etc/resolv.conf) o secretos en el contenedor. Por el contrario, también puede utilizar esta técnica para escribir los registros del contenedor en carpetas específicas en el host. Ambos $host_pathy $container_pathdeben ser caminos absolutos.
docker run -v my_volume:$container_path: Esto crea un volumen de datos en su contenedor $container_pathy lo nombra my_volume. Es esencialmente lo mismo que crear y nombrar un volumen usando docker volume create my_volume. Nombrar un volumen como este es útil para un volumen de datos de contenedor y un volumen de almacenamiento compartido utilizando un controlador de almacenamiento de múltiples hosts como Flocker .
Tenga en cuenta que el enfoque de montar una carpeta de host como un volumen de datos no está disponible en Dockerfile. Para citar la documentación de Docker ,
Nota: Esto no está disponible en un Dockerfile debido a la portabilidad y el propósito de compartirlo. Como el directorio de host es, por su naturaleza, dependiente del host, un directorio de host especificado en un Dockerfile probablemente no funcionaría en todos los hosts.
Ahora, si desea copiar sus archivos a contenedores en entornos que no son de desarrollo, puede usar ADDoCOPY instrucciones en su Dockerfile. Estos son los que suelo utilizar para la implementación que no es de desarrollo.
COPYaADD. Son casi iguales, peroADDtienen algunas capacidades adicionales con URL y archivos de almacenamiento que pueden resultar sorprendentes.