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 increíblemente ú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 hacen lo siguiente:
- Crean un nuevo directorio
nginx-data dentro de la carpeta project en su directorio personal.
- Crean un archivo HTML simple llamado
index.html dentro de este nuevo directorio.
Ahora, ejecutemos un contenedor Nginx y montemos este directorio:
docker run -d --name nginx-volume -p 8081:80 -v ~/project/nginx-data:/usr/share/nginx/html nginx
Analicemos este comando:
docker run: El comando para ejecutar un nuevo contenedor.
-d: Ejecuta el contenedor en modo desatendido (en segundo plano).
--name nginx-volume: Asigna el nombre "nginx-volume" a nuestro contenedor.
-p 8081:80: Mapea el puerto 8081 del host al puerto 80 del contenedor.
-v ~/project/nginx-data:/usr/share/nginx/html: Monta el directorio nginx-data de nuestro host en el directorio /usr/share/nginx/html del contenedor. Aquí es donde Nginx busca el contenido para servir.
nginx: El nombre de la imagen que estamos utilizando.
Ahora, verifiquemos que se está sirviendo la página personalizada:
curl http://localhost:8081
Debería ver el contenido de su archivo HTML personalizado: "Hello from mounted volume!"
Si no ve su contenido personalizado, verifique lo siguiente:
- Asegúrese de que el archivo
~/project/nginx-data/index.html exista en su sistema host.
- Compruebe que el contenedor se esté ejecutando:
docker ps | grep nginx-volume
- Revise los registros de Nginx para ver si hay errores:
docker logs nginx-volume
Este método de montar un directorio del host en un contenedor se llama "bind mount". Es una forma directa de compartir archivos. 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 para ambos.
- Tenga cuidado con los permisos: el contenedor se ejecuta como root por defecto, lo que podría crear archivos que su usuario del host no pueda modificar.
Al usar este método, evitamos errores de tipo "no es un directorio" porque estamos montando una carpeta completa. Este enfoque le brinda más flexibilidad para agregar, eliminar o modificar archivos sin tener que recrear el contenedor.