Introducción
Contenedorización ha cobrado un gran impulso en el espacio de la tecnología de software en los últimos años. Esto se puede atribuir a Docker que es una plataforma de contenedores que simplifica la gestión de procesos dentro de los contenedores.
Los contenedores son entornos estandarizados, ligeros, virtualizados, portátiles y definidos por software que permiten que el software se ejecute de forma aislada de otro software que se ejecuta en la máquina host física. Esta característica de portabilidad permite a los desarrolladores modularizar sus aplicaciones en servicios aislados. Además, se pueden servir de forma independiente, lo que da margen para el escalado.
Si bien dividir una aplicación en múltiples servicios es definitivamente excelente, conlleva la sobrecarga de administrar varios contenedores. Debe asegurarse de que se comuniquen, se inicien y se apaguen al mismo tiempo. Gracias a una herramienta llamada Docker Compose, esto se convierte en una tarea fácil. Docker Compose permite a los desarrolladores ejecutar aplicaciones Docker de múltiples contenedores utilizando reglas definidas en un YAML archivo. El archivo YAML contiene definiciones para los servicios de la aplicación y cómo pueden compartir volúmenes de datos y redes. Una vez que haya definido los servicios, puede iniciarlos todos con un solo comando. En este tutorial, le mostraremos cómo instalar, configurar y comenzar con Docker Compose en Ubuntu 20.04.
Requisitos previos
-
Dado que este es un tutorial práctico, debe tener una instalación de Ubuntu 20.04 como su entorno operativo inicial. También debe tener un usuario no raíz con privilegios sudo. Aquí tiene un tutorial paso a paso para ayudarle a configurar su servidor Ubuntu. Siga este tutorial para configurar su archivo sudoers.
-
También necesita instalar Docker. Consulte este tutorial sobre cómo instalar y operar Docker en Ubuntu 18.04.
Paso 1: Instalación de Docker Compose
Descargaremos la última versión estable de Docker Compose desde su repositorio oficial de GitHub. Puede averiguar la última versión en la página de lanzamientos, al momento de escribir este tutorial, la última versión es 1.28.5.
Primero, inicie sesión en su servidor Ubuntu con el usuario sudo no raíz e ingrese el siguiente comando. Descarga la última versión (1.28.5) y guarda el ejecutable en el directorio /usr/local/bin/docker-compose . Esto hace que sea accesible globalmente como docker-compose:
|
1 |
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
Una vez descargado, ingrese el siguiente comando para establecer los permisos adecuados para que el comando docker-compose sea ejecutable:
|
1 |
sudo chmod +x /usr/local/bin/docker-compose |
Ahora, verifique que la instalación sea exitosa y que el comando se pueda invocar ejecutando el siguiente comando:
|
1 |
docker-compose –version |
Debería obtener una salida como esta:

Esto confirma que Docker Compose se ha instalado correctamente en su sistema.
Paso 2: Creación del archivo docker-compose.yml
Para ayudarle a comprender cómo trabajar con docker-compose.yml, configuraremos un entorno de servidor web utilizando la imagen oficial de Nginx de Docker Hub. Una vez implementado, deberíamos poder servir una página HTML básica desde el contenedor.
Crearemos nuestro directorio de trabajo en la carpeta de inicio desde donde trabajaremos. Ingrese el siguiente comando para crear el directorio:
|
1 |
mkdir ~/compose-example |
A continuación, muévase al directorio:
|
1 |
cd ~/compose-example |
Una vez dentro del directorio, cree una carpeta de aplicación que será la raíz del documento para el entorno de Nginx. Podemos llamar a esta carpeta app:
|
1 |
mkdir app |
- Creación de una página HTML
Usemos el editor de texto nano para crear el archivo index.html dentro de la carpeta app:
|
1 |
nano app/index.html |
A continuación, agregue el siguiente código HTML al archivo:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<!DOCTYPE html> <html lang="es"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content=""> <meta name="generator" content="Hugo 0.80.0"> <title>Ejemplo de Docker Compose</title> <!-- CSS principal de Bootstrap --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous"> </head> <body> <main> <section class="py-5 text-center container"> <div class="row py-lg-5"> <div class="col-lg-6 col-md-8 mx-auto"> <h1 class="fw-light">Increíble ejemplo de Docker Compose con CloudSigma</h1> <p class="h4"> Esta es una página HTML estática básica. </p> <p class="lead text-muted"> Esta página se está sirviendo desde un contenedor Docker de Nginx creado con <b>docker-compose </b> </p> </div> </div> </section> </main> </body> </html> |
Para guardar el archivo, presione CTRL + O, ENTER. Luego, cierre con CTRL + X. A continuación, crearemos el docker-compose.yml archivo dentro de la raíz de nuestro proyecto.
- Alojar la página HTML usando docker-compose
A continuación, ingrese el siguiente comando para abrir el archivo con el editor nano :
|
1 |
nano docker-compose.yml |
Después de eso, agregue el siguiente fragmento de código dentro del archivo:
|
1 2 3 4 5 6 7 8 |
version: '3.7' services: webserver: image: nginx:alpine ports: - "8000:80" volumes: - ./app:/usr/share/nginx/html |
El docker-compose.yml el archivo comienza con el número de versión que le indica a Docker Compose qué versión de configuración estamos usando. Siga este enlace para obtener más información sobre versiones de Docker Compose.
Después del número de versión, tenemos el bloque de servicios que contiene los servicios que componen el entorno. En este tutorial, solo hemos especificado un único servicio llamado webserver. El webserver servicio utilizará la nginx:alpine imagen. También hemos definido la redirección de puertos 8000:80. Lo que esto significa es que todas las solicitudes desde el puerto 8000 en la máquina host se redirigirán al contenedor webserver en el puerto 80, donde se está ejecutando Nginx.
La directiva de volúmenes le permite crear un volumen compartido entre la máquina host y el contenedor que podemos usar para persistir datos. En nuestro fragmento de código yml, compartimos la carpeta local app con el contenedor. Dentro del contenedor, se ubicará en la ruta /usr/share/nginx/html. Por lo tanto, está sobrescribiendo la raíz de documentos predeterminada para Nginx. Puede guardar y cerrar el archivo ahora.
Hasta este punto, ha creado su página web HTML de ejemplo y el archivo docker-compose.yml con instrucciones para compilar un entorno de servidor web en contenedores. Veamos cómo podemos iniciar esta configuración en el siguiente paso.
Paso 3: Ejecución del comando Docker Compose
En este paso, ejecutaremos el comando para iniciar nuestro entorno en contenedores. A continuación se muestra el único comando que inicializará el proceso de descarga de las imágenes de Docker, creará un contenedor para el servicio webserver e iniciará el entorno en contenedores en segundo plano:
|
1 |
docker-compose up -d |
Docker está diseñado para ser rápido y eficiente, por lo que, al ejecutar el comando anterior, primero busca la imagen definida en su sistema local. Si no la encuentra, la obtendrá del repositorio de Docker Hub. Debería mostrar una salida similar a esta:

Cuando el comando termine de ejecutarse, iniciará el entorno del contenedor en segundo plano. Puede verificar que se está ejecutando usando el comando:
|
1 |
docker-compose ps |
Debería obtener una salida similar:

Si navega a la dirección IP o al nombre de dominio de su servidor y agrega el puerto 8000, es decir, server_domain_or_IP:8000 debería poder ver la página HTML de ejemplo que creamos:

Si recuerda, configuramos un volumen compartido entre el contenedor y el sistema host. Esto mantiene los archivos del contenedor sincronizados con los archivos del sistema host. Por lo tanto, si realiza un cambio en el archivo index.html, este se sincroniza con el contenedor automáticamente y se refleja al recargar la página en el navegador. Puede probar con el editor nano. Aprendamos algunos comandos más en el siguiente paso.
Paso 4: Comandos adicionales de Docker Compose para administrar entornos de contenedores
Ahora que ha implementado con éxito una página web utilizando el único comando docker-compose-up, veamos algunos comandos adicionales que pueden ser útiles para administrar entornos en contenedores.
Comenzaremos con el comando logs. Los registros (logs) pueden ser cruciales cuando está solucionando fallas en su aplicación. Primero, ejecute el siguiente comando para ver los registros producidos por el contenedor Nginx:
|
1 |
docker-compose logs |
Aquí hay una salida de ejemplo de los registros:

Puede pausar la ejecución del entorno sin cambiar el estado de los contenedores usando el comando:
|
1 |
docker-compose pause |
![]()
A continuación, para reanudar las ejecuciones use el comando:
|
1 |
docker-compose unpause |
![]()
Es posible que desee detener los contenedores sin destruir sus datos. Para hacer eso, use el siguiente comando:
|
1 |
docker-compose stop |
![]()
Para destruir los contenedores, redes y volúmenes asociados con el entorno en contenedores, use el comando:
|
1 |
docker-compose down |
![]()
Ten en cuenta que el comando anterior no elimina las imágenes base utilizadas por Docker Compose para iniciar el entorno. Esto garantiza compilaciones más rápidas cuando inicias tu entorno, ya que busca imágenes coincidentes en la máquina local. Si deseas eliminar por completo la imagen base, debes especificarlo en el comando. Para nuestro ejemplo, podemos eliminar la imagen nginx:alpine utilizando el comando:
|
1 |
docker image rm nginx:alpine |

Finalmente, puedes encontrar más comandos en la documentación oficial de Referencia de la línea de comandos de Docker Compose.
Conclusión
En este tutorial, instalaste Docker Compose en Ubuntu 20.04, creaste un entorno contenedorizado basado en una imagen de servidor web Nginx y aprendiste a administrar los diversos servicios utilizando comandos de Docker Compose.
Si deseas aprender a implementar una aplicación dinámica del mundo real que depende de varios contenedores, lee nuestro tutorial sobre Cómo implementar Laravel, Nginx y MySQL con Docker Compose. También puedes encontrar una lista completa de comandos de docker-compose en la documentación oficial de Docker Compose.
¡Feliz computación!
Comentarios
Aún no hay comentarios. Sea el primero.