Montaje de volúmenes
El parámetro -v
en docker run
nos permite montar volúmenes, compartiendo datos entre el host y el contenedor. Esto es extremadamente útil para persistir datos o para proporcionar archivos de configuración al contenedor.
Comencemos creando una estructura de directorios simple en nuestro host:
mkdir -p ~/project/nginx-data
echo "<html><body><h1>Hello from mounted volume</h1></body></html>" > ~/project/nginx-data/index.html
Estos comandos realizan lo siguiente:
- Crean un nuevo directorio
nginx-data
dentro de la carpeta project
en tu directorio de usuario.
- Crean un archivo HTML simple llamado
index.html
dentro de este nuevo directorio.
Ahora, ejecutemos un contenedor de Nginx y montemos este directorio:
docker run -d --name nginx-volume -p 8081:80 -v ~/project/nginx-data:/usr/share/nginx/html nginx
Desglosemos este comando:
docker run
: Este es el comando para ejecutar un nuevo contenedor.
-d
: Esto ejecuta el contenedor en modo desatendido (en segundo plano).
--name nginx-volume
: Esto asigna el nombre "nginx-volume" a nuestro contenedor.
-p 8081:80
: Esto mapea el puerto 8081 en el host al puerto 80 en el contenedor.
-v ~/project/nginx-data:/usr/share/nginx/html
: Esto monta el directorio nginx-data
de nuestro host al directorio /usr/share/nginx/html
en el contenedor. Aquí es donde Nginx busca el contenido para servir.
nginx
: Este es el nombre de la imagen que estamos utilizando para crear el contenedor.
Ahora, verifiquemos que se esté sirviendo la página personalizada:
curl http://localhost:8081
Deberías ver el contenido de tu archivo HTML personalizado: "Hello from mounted volume!"
Si no ves tu contenido personalizado, aquí hay algunas cosas para verificar:
- Asegúrate de que el archivo
~/project/nginx-data/index.html
exista en tu sistema host.
- Verifica que el contenedor esté en ejecución:
docker ps | grep nginx-volume
- Verifica los registros de Nginx en busca de errores:
docker logs nginx-volume
Este método de montar un directorio del host en un contenedor se llama montaje enlazado (bind mount). Es una forma sencilla de compartir archivos entre el host y el contenedor. Aquí hay algunos puntos clave a recordar:
- La ruta del directorio del host debe ser una ruta absoluta.
- Si el directorio del host no existe, Docker lo creará automáticamente.
- Cualquier cambio realizado en los archivos de este directorio (ya sea en el host o en el contenedor) será visible inmediatamente tanto para el host como para el contenedor.
- Ten cuidado con los permisos: el contenedor se ejecuta como root por defecto, lo que podría crear archivos que tu usuario del host no puede modificar.
Al utilizar este método, evitamos el error "not a directory" porque estamos montando un directorio, no un solo archivo. Este enfoque te da más flexibilidad para agregar, eliminar o modificar archivos sin tener que recrear el contenedor.