Cómo usar Docker Compose con configuración de red de host

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Este tutorial lo guía a través del uso de Docker Compose con una configuración de red de host en una máquina virtual (VM) en la nube de LabEx. Docker Compose es una herramienta que le ayuda a gestionar múltiples contenedores (piensa en los contenedores como entornos ligeros y aislados que ejecutan aplicaciones, como un servidor web). Normalmente, Docker aísla la red de un contenedor de la máquina host (la VM en la que está trabajando), pero la opción de red de host permite que el contenedor comparta directamente la red del host. Esto es útil cuando su aplicación necesita actuar como si estuviera ejecutándose directamente en el host, como acceder a los puertos del host sin configuración adicional. Al final, configurará Docker Compose, creará, desplegará y probará un servicio web simple utilizando la red de host. Docker está preinstalado en su entorno de LabEx, pero también nos aseguraremos de que Docker Compose esté listo.

Este laboratorio (Lab) requiere una conexión a Internet para el aprendizaje, por lo que solo los usuarios Pro pueden iniciar la VM. Actualice su cuenta a Pro.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/restart("Restart Container") docker/ContainerOperationsGroup -.-> docker/logs("View Container Logs") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/SystemManagementGroup -.-> docker/version("Show Docker Version") subgraph Lab Skills docker/run -.-> lab-394882{{"Cómo usar Docker Compose con configuración de red de host"}} docker/ps -.-> lab-394882{{"Cómo usar Docker Compose con configuración de red de host"}} docker/restart -.-> lab-394882{{"Cómo usar Docker Compose con configuración de red de host"}} docker/logs -.-> lab-394882{{"Cómo usar Docker Compose con configuración de red de host"}} docker/create -.-> lab-394882{{"Cómo usar Docker Compose con configuración de red de host"}} docker/version -.-> lab-394882{{"Cómo usar Docker Compose con configuración de red de host"}} end

Configurar Docker Compose

Antes de sumergirnos en la configuración, aseguremos que Docker Compose esté disponible en su máquina virtual (VM) en la nube de LabEx. Si bien Docker está preinstalado, Docker Compose (una herramienta independiente para gestionar configuraciones de múltiples contenedores) puede no estarlo. Lo instalaremos rápidamente utilizando la terminal.

Abra la terminal en su VM de LabEx. El indicador debe mostrar /home/labex/project, este es su directorio de trabajo predeterminado. Ejecute estos comandos uno por uno:

sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose-install

Esto es lo que hacen estos comandos:

  • curl: Descarga el binario de Docker Compose desde su lanzamiento oficial en GitHub. La URL utiliza $(uname -s)-$(uname -m) para coincidir con el sistema de su VM (por ejemplo, Linux-x86_64). La versión 2.20.2 es estable y ampliamente compatible.
  • -o /usr/local/bin/docker-compose: Lo guarda en /usr/local/bin, una ubicación estándar para herramientas ejecutables. sudo asegura que tenga permiso para escribir allí.
  • chmod +x: Hace que el archivo sea ejecutable, para que pueda ejecutarlo como un comando. Nuevamente, sudo otorga los derechos necesarios.

Para confirmar que funcionó, ejecute:

docker-compose --version

Debería ver una salida como Docker Compose version v2.20.2. Si recibe "command not found", vuelva a ejecutar los comandos con cuidado, verifique si hay errores tipográficos o problemas de conexión a Internet (la VM necesita acceso a la web para descargar). Este paso asegura que esté listo para usar docker-compose en los siguientes pasos.

Crea un archivo docker-compose.yml con red host

Ahora que Docker Compose está listo, creemos un archivo docker-compose.yml, que será tu plano para ejecutar un servicio web con red host. Usaremos nano, un editor de texto de terminal sencillo y amigable para principiantes.

Para crear y editar el archivo, sigue estos pasos:

  1. En tu terminal, asegúrate de estar en el directorio del proyecto:

    cd /home/labex/project
  2. Crea y abre el archivo con nano:

    nano docker-compose.yml
  3. Escribe o pega el siguiente contenido en nano:

version: "3"
services:
  web:
    image: nginx:latest
    network_mode: host

Aquí está lo que significa cada parte:

  • version: "3": Establece el formato del archivo de Docker Compose. La versión 3 es un estándar común, como elegir un modelo.
  • services: Lista los contenedores (o "servicios") que se van a ejecutar, como trabajadores para tu proyecto.
  • web: Nombra tu servicio; puedes llamarlo como quieras, pero "web" es adecuado para un servidor web.
  • image: nginx:latest: Especifica el software, Nginx, un popular servidor web, y latest extrae la última versión de Docker Hub (una biblioteca de imágenes de contenedores).
  • network_mode: host: La configuración clave. Normalmente, Docker le da a los contenedores su propia red privada, aislandolos del host. El modo host permite que el contenedor use directamente la red de la máquina virtual, de modo que Nginx puede acceder a los puertos del host (como el 80) sin pasos adicionales.
  1. Para guardar el archivo en nano:
    • Presiona Ctrl + X para salir
    • Presiona Y para confirmar guardar los cambios
    • Presiona Enter para confirmar el nombre del archivo

El archivo ahora está guardado en /home/labex/project, y estás listo para el siguiente paso.

Desplegar la aplicación de Docker Compose

Con su archivo docker-compose.yml configurado, despleguemos el contenedor de Nginx, es decir, le diremos a Docker que lo inicie según el plano que ha creado. Para esto, cambie a la terminal.

En la terminal, en el directorio /home/labex/project, ejecute:

docker-compose up -d

Desglosemos este comando:

  • docker-compose: La herramienta que lee el archivo docker-compose.yml y gestiona sus servicios.
  • up: Inicia el servicio web (Nginx) definido en el archivo.
  • -d: Lo ejecuta en segundo plano (modo "desacoplado"), para que su terminal esté disponible.

Docker Compose descargará la imagen nginx:latest de Docker Hub si no está ya en la VM (es posible que vea mensajes de descarga), y luego lanzará el contenedor. Verifique que está en ejecución con:

docker ps

Este comando lista los contenedores activos. Busque nginx:latest en la columna "IMAGE" y "Up" en la columna "STATUS" (por ejemplo, "Up 5 seconds"). No verá mapeos de puertos (como 0.0.0.0:80->80/tcp) porque network_mode: host utiliza directamente los puertos del host. Si no se muestra nada, asegúrese de que está en /home/labex/project (pwd para comprobar) y vuelva a ejecutar docker-compose up -d.

Probar el servicio de Nginx en la red de host

Ahora que el contenedor está en ejecución con la configuración de red de host, probemos si Nginx sirve páginas web en el puerto 80 del host, que es el puerto estándar para la web.

En la terminal, en el directorio /home/labex/project, ejecute:

curl localhost:80

Esto es lo que está sucediendo:

  • curl: Obtiene datos de una dirección web, como un navegador basado en terminal.
  • localhost:80: Se conecta a la propia VM (localhost) en el puerto 80. Con network_mode: host, el Nginx del contenedor utiliza la red del host, por lo que su puerto 80 es el puerto 80 del host.

Debería ver HTML que comience con <!DOCTYPE html>, que es la página de bienvenida predeterminada de Nginx. Normalmente, Docker aísla las redes de los contenedores, lo que requiere el mapeo de puertos (por ejemplo, el puerto 80 del host al puerto 80 del contenedor). El modo de host omite este paso, permitiendo que Nginx se enlace directamente al puerto 80 de la VM.

Si recibe "connection refused", revise el Paso 3. Ejecute docker ps para confirmar que el contenedor está "Up". Reinícielo con docker-compose up -d si es necesario, o verifique Docker con sudo service docker status. No se utiliza un navegador aquí, por lo que curl es su herramienta de prueba.

Explorar los registros y realizar la limpieza

Vamos a revisar los registros del contenedor para ver lo que está sucediendo dentro, una habilidad clave para la resolución de problemas, y luego lo eliminaremos para realizar la limpieza.

Revisar los registros

Ejecute:

docker-compose logs web
  • docker-compose logs: Muestra la salida de sus servicios.
  • web: Se dirige al servicio web del archivo docker-compose.yml.

Busque líneas como "nginx starting" o "listening on 0.0.0.0:80". Si ha utilizado curl, es posible que vea registrado "GET /". También se mostrarán aquí los errores (por ejemplo, "port 80 failed"), lo cual es útil si Nginx se detiene.

Realizar la limpieza

Ejecute:

docker-compose down
  • docker-compose down: Detiene y elimina el contenedor, liberando el puerto 80 y realizando la limpieza.

Verifique con:

docker ps

Si no hay una línea de nginx, significa que se ha eliminado. Si sigue apareciendo, vuelva a ejecutar docker-compose down. El archivo docker-compose.yml permanece, por lo que puede reiniciar el contenedor más tarde con docker-compose up -d. Esto concluye el ciclo de vida: configuración, despliegue, prueba y eliminación.

Resolución de problemas y mejores prácticas

A continuación, se explica cómo manejar los problemas y utilizar Docker Compose de manera inteligente.

Consejos para la resolución de problemas

  • El contenedor no se inicia: Si docker ps no muestra ningún resultado, revise docker-compose logs web en busca de errores como "port in use" (puerto en uso). Libere el puerto 80 con sudo lsof -i :80 y sudo kill <PID>, y luego ejecute docker-compose up -d.
  • No hay respuesta de curl: Confirme que el contenedor está en ejecución (docker ps) y que Docker está funcionando (sudo service docker status). Reinicie el contenedor con docker-compose up -d o Docker con sudo service docker restart.
  • Problemas con el archivo: Si docker-compose up no puede encontrar el archivo, verifique que se encuentra en /home/labex/project (pwd) y que el archivo docker-compose.yml existe (ls).

Mejores prácticas

  • Limite el uso de la red de host: Es sencillo, pero omite el aislamiento, lo que puede suponer un riesgo de seguridad si se ejecutan otros servicios. Úselo en entornos de laboratorio, no en producción, a menos que sea necesario.
  • Verifique los puertos previamente: Realice una prueba con sudo netstat -tuln | grep :80 y libere el puerto 80 primero.
  • Guarde los archivos: Guarde el archivo docker-compose.yml en /home/labex/project para poder reutilizarlo.
  • Supervise los registros: Compruebe los registros regularmente para detectar problemas de forma temprana.

Estos hábitos harán que su trabajo con Docker sea más fiable y le enseñarán habilidades fundamentales.

Resumen

Ha instalado Docker Compose, creado un archivo docker-compose.yml con configuración de red de host, desplegado un contenedor de Nginx, lo ha probado, revisado los registros y realizado la limpieza. La configuración de red de host permite que los contenedores utilicen directamente la red del host, omitiendo el aislamiento de Docker, lo cual es una técnica muy útil. Estos pasos le proporcionan una base para gestionar aplicaciones de Docker Compose y resolver problemas, lo que le prepara para proyectos más grandes.