5.1 Idea de los directorios vinculados (bind mounts)
Montar directorios del host en contenedores usando directorios vinculados (bind mounts) es una función poderosa de Docker que permite a los contenedores usar directamente archivos y directorios que están en el sistema host. Esto es especialmente útil para desarrollo, pruebas y configuración, cuando necesitas usar archivos locales sin copiarlos al contenedor. En esta lección veremos cómo usar los directorios vinculados, daremos ejemplos y compartiremos las mejores prácticas.
Los directorios vinculados permiten montar directorios o archivos específicos del sistema host en contenedores. Esto es diferente de los volúmenes, que son gestionados por Docker y almacenados en un directorio especial.
Ventajas de usar directorios vinculados
- Acceso directo a los archivos del host: Los contenedores pueden usar y modificar directamente los archivos que están en el host.
- Comodidad para el desarrollo: Los desarrolladores pueden modificar archivos en el host y ver estos cambios en los contenedores en tiempo real.
- Flexibilidad: Cualquier directorio en el host puede ser montado en un contenedor.
Comando para montar directorios vinculados
Los directorios vinculados se montan usando los parámetros -v
o --mount
al iniciar el contenedor.
5.2 Ejemplos de uso del parámetro -v
1. Montar un directorio del host en el contenedor
Un ejemplo simple de montar un directorio del host en el contenedor:
docker run -d --name my_container -v /path/on/host:/path/in/container nginx
En este ejemplo, el directorio /path/on/host
en el host se monta en el directorio /path/in/container
dentro del contenedor nginx.
2. Montar un archivo del host en el contenedor
También puedes montar archivos individuales:
docker run -d --name my_container -v /path/on/host/config.conf:/etc/nginx/nginx.conf nginx
En este ejemplo, el archivo de configuración config.conf
en el host se monta como el archivo de configuración nginx.conf
dentro del contenedor.
5.3 Ejemplos de uso del parámetro --mount
El parámetro --mount
proporciona una forma más detallada de montar directorios vinculados con la capacidad de especificar diferentes parámetros.
1. Montar un directorio usando --mount
docker run -d --name my_container --mount type=bind,source=/path/on/host,target=/path/in/container nginx
Este ejemplo es similar al ejemplo anterior con -v
, pero utiliza una sintaxis más detallada.
2. Montar en modo solo lectura
docker run -d --name my_container --mount
type=bind,source=/path/on/host,target=/path/in/container,readonly nginx
En este ejemplo, el directorio se monta en modo solo lectura, lo que previene cambios en los archivos dentro del contenedor.
5.4 Ejemplos prácticos
Para desarrollar una aplicación web puedes montar un directorio con el código fuente del host en un contenedor.
Creación de un directorio con el código fuente en el host:
mkdir -p ~/my_web_app
echo "¡Hola, Mundo!" > ~/my_web_app/index.html
Ejecutar un contenedor montando un directorio:
docker run -d --name web_dev -v ~/my_web_app:/usr/share/nginx/html nginx
Ahora cualquier cambio en el directorio ~/my_web_app en el host se reflejará inmediatamente en el contenedor.
Ejemplo 2: Uso de archivos de configuración
Puedes montar archivos de configuración desde un directorio en el host al contenedor.
Creación de un archivo de configuración en el host:
echo "user www-data;" > ~/nginx.conf
echo "worker_processes auto;" >> ~/nginx.conf
Ejecutar un contenedor montando un archivo de configuración:
docker run -d --name nginx_custom -v ~/nginx.conf:/etc/nginx/nginx.conf nginx
En este ejemplo, el archivo de configuración de Nginx en el host se utiliza dentro del contenedor.
5.5 Verificación de directorios y archivos montados
Puedes verificar el contenido de los directorios y archivos montados utilizando el comando docker exec para ejecutar comandos dentro del contenedor.
Ejemplo
Verificar el contenido de un directorio:
docker exec -it my_container ls /path/in/container
Verificar el contenido de un archivo:
docker exec -it my_container cat /path/in/container/config.conf
Eliminar directorios vinculados
Los directorios vinculados no son gestionados directamente por Docker, por lo que su eliminación ocurre a nivel del sistema de archivos del host.
Ejemplo
Eliminar un directorio vinculado en el host:
rm -r /path/on/host
GO TO FULL VERSION