Querido diario:
Día decimonoveno en las trincheras tecnológicas. La batalla continúa y los servidores nunca descansan. Ayer, los reclutas aprendieron a desplegar contenedores desde el arsenal de Docker Hub, ejecutándolos en segundo plano y configurándolos para resistir los reinicios. Pero aún hay una gran debilidad en nuestra estrategia: los datos efímeros.
Cada vez que un contenedor se elimina, su información desaparece sin dejar rastro. Como soldados que no pueden olvidar sus experiencias en combate, nuestros contenedores necesitan almacenamiento persistente. Además, si vamos a comunicar servicios entre contenedores o exponerlos al mundo, debemos abrir y gestionar sus puertos.
Hoy nos adentraremos en la gestión de volúmenes, la compartición de puertos y la conexión entre contenedores, asegurando que nuestros despliegues sean robustos y eficientes.
Almacenamiento Persistente: Memorias de Guerra
Por defecto, cuando un contenedor escribe datos, estos quedan almacenados dentro del mismo. Pero si el contenedor se elimina, toda la información desaparece. Para evitarlo, Docker nos ofrece dos métodos:
- Bind mounts: Montamos una carpeta del host dentro del contenedor.
- Volúmenes: Docker gestiona automáticamente un espacio de almacenamiento persistente.
Para crear un volumen administrado por Docker:
sudo docker volume create mi_volumen
Para ver los volúmenes existentes:
sudo docker volume ls
Para ver detalles de un volumen:
sudo docker volume inspect mi_volumen
Supongamos que queremos que un servidor Nginx guarde su contenido en un volumen persistente:
sudo docker run -d --name nginx_persistente -v mi_volumen:/usr/share/nginx/html -p 8080:80 nginx
Explicación:
- -v mi_volumen:/usr/share/nginx/html: Monta el volumen en la carpeta donde Nginx guarda sus archivos.
- -p 8080:80: Expone el puerto 80 del contenedor en el 8080 del host.
- nginx: Imagen de Nginx.
Ahora, incluso si eliminamos el contenedor, los datos en mi_volumen seguirán existiendo.
Si queremos acceder al contenido del volumen desde el host, usamos:
sudo docker run --rm -v mi_volumen:/data busybox ls /data
Esto lista el contenido del volumen usando un contenedor temporal.
Compartir Carpetas del Host (Bind Mounts)
Si queremos usar una carpeta del host en lugar de un volumen de Docker, lo hacemos con -v:
sudo docker run -d --name nginx_host -v /home/user/mis_webs:/usr/share/nginx/html -p 8081:80 nginx
Ahora, cualquier cambio en /home/user/mis_webs se reflejará en el servidor web dentro del contenedor.
Compartiendo Puertos: Abriendo las Puertas del Bunker
Para hacer accesibles los servicios de un contenedor desde el exterior, usamos -p:
sudo docker run -d -p 9090:80 --name servidor_web nginx
Esto hace que el puerto 80 del contenedor sea accesible desde el puerto 9090 del host.
Si queremos asignar un puerto de manera aleatoria:
sudo docker run -d -P --name servicio_random nginx
Esto asignará automáticamente un puerto del host a cada puerto expuesto del contenedor. Podemos verlo con:
sudo docker port servicio_random
Compartiendo Servicios entre Contenedores: Redes de Comunicación
Cuando varios contenedores necesitan comunicarse, Docker nos permite crear redes internas.
Crear una Red:
sudo docker network create mi_red
Conectar Contenedores a la Red:
sudo docker run -d --name servidor_web --network mi_red nginx
sudo docker run -d --name cliente_web --network mi_red busybox sleep 3600
Ahora cliente_web puede comunicarse con servidor_web usando su nombre:
sudo docker exec -it cliente_web wget -O- servidor_web
Esto nos permitirá organizar nuestros servicios como si fueran nodos de una base militar bien estructurada.
Conclusión: Infraestructura Resistente
- Hoy hemos reforzado nuestras posiciones en el campo de batalla digital:
- Nuestros datos ahora sobreviven a la muerte de los contenedores.
- Nuestros servicios pueden compartir información sin interferencias.
- Podemos exponer y gestionar puertos con seguridad.
Los reclutas han demostrado valor en el entrenamiento de hoy. Mañana aprenderemos a construir nuestras propias imágenes con Dockerfiles y a optimizar nuestros despliegues para el combate real.
¡Sigan en pie, soldados del código!
Comentarios
Publicar un comentario