Introducción
Docker simplifica el proceso de gestión de procesos de aplicaciones en contenedores. Si bien los contenedores son similares a las máquinas virtuales en ciertos aspectos, son más livianos y amigables con los recursos. Esto permite a los desarrolladores dividir un entorno de aplicación en múltiples servicios aislados.
Para las aplicaciones que dependen de varios servicios, organizar todos los contenedores para que se inicien, comuniquen y apaguen juntos puede volverse difícil de manejar rápidamente. Docker Compose es una herramienta que le permite ejecutar entornos de aplicaciones de varios contenedores en función de las definiciones establecidas en un archivo YAML. Utiliza definiciones de servicio para crear entornos totalmente personalizables con varios contenedores que pueden compartir redes y volúmenes de datos.
En esta guía, demostrará cómo instalar Docker Compose en un servidor Ubuntu 20.04 y cómo comenzar a usar esta herramienta.
Requisitos
Para seguir este artículo, necesitará:
- Acceso a una máquina local Ubuntu 20.04 o servidor de desarrollo como usuario no root con privilegios sudo. Si está utilizando un servidor remoto, es recomendable tener instalado un firewall activo. Para configurarlos, consulte nuestra Guía de configuración inicial del servidor para Ubuntu 20.04.
- Docker instalado en su servidor o máquina local, siguiendo los Pasos 1 y 2 de Cómo instalar y usar Docker en Ubuntu 20.04.
docker-compose
. A partir de Docker Compose v2, Docker ha migrado hacia el uso de compose
Comando de complemento CLI como se documenta en nuestra última versión de Ubuntu 22.04 de este tutorial, y lejos del docker-compose
original . Si bien la instalación difiere, en general, el uso real implica eliminar el guión de docker-compose
llamadas para convertirse en docker compose
. Para obtener detalles completos de compatibilidad, consulte la documentación oficial de Docker sobre la compatibilidad de comandos entre el nuevo compose
y el antiguo docker-compose
.
Paso 1:Instalación de Docker Compose
Para asegurarse de obtener la versión estable más actualizada de Docker Compose, debe descargar este software desde su repositorio oficial de Github.
Primero, confirme la última versión disponible en su página de lanzamientos. En el momento de escribir este artículo, la versión estable más actual es 1.29.2
.
El siguiente comando descargará el 1.29.2
libere y guarde el archivo ejecutable en /usr/local/bin/docker-compose
, lo que hará que este software sea accesible globalmente como docker-compose
:
- sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
A continuación, establezca los permisos correctos para que docker-compose
el comando es ejecutable:
- sudo chmod +x /usr/local/bin/docker-compose
Para verificar que la instalación fue exitosa, puede ejecutar:
- docker-compose --version
Verá un resultado similar a este:
Outputdocker-compose version 1.29.2, build 5becea4c
Docker Compose ahora está instalado con éxito en su sistema. En la siguiente sección, verá cómo configurar un docker-compose.yml
y obtenga un entorno en contenedores en funcionamiento con esta herramienta.
Paso 2:Configurar un docker-compose.yml
Archivo
Para demostrar cómo configurar un docker-compose.yml
y trabaja con Docker Compose, creará un entorno de servidor web utilizando la imagen oficial de Nginx de Docker Hub, el registro público de Docker. Este entorno en contenedores servirá un único archivo HTML estático.
Comience creando un nuevo directorio en su carpeta de inicio y luego muévase a él:
- mkdir ~/compose-demo
- cd ~/compose-demo
En este directorio, configure una carpeta de aplicación para que sirva como la raíz del documento para su entorno Nginx:
- mkdir app
Usando su editor de texto preferido, cree un nuevo index.html
archivo dentro de la app
carpeta:
- nano app/index.html
Coloque el siguiente contenido en este archivo:
~/compose-demo/app/index.html<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Docker Compose Demo</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css">
</head>
<body>
<h1>This is a Docker Compose Demo Page.</h1>
<p>This content is being served by an Nginx container.</p>
</body>
</html>
Guarde y cierre el archivo cuando haya terminado. Si está utilizando nano
, puedes hacerlo escribiendo CTRL+X
, luego Y
y ENTER
para confirmar.
A continuación, cree el docker-compose.yml
archivo:
- nano docker-compose.yml
Inserte el siguiente contenido en su docker-compose.yml
archivo:
version: '3.7'
services:
web:
image: nginx:alpine
ports:
- "8000:80"
volumes:
- ./app:/usr/share/nginx/html
docker-compose.yml
el archivo normalmente comienza con la version
definición. Esto le indicará a Docker Compose qué versión de configuración está utilizando.
Entonces tienes los services
bloque, donde se configuran los servicios que forman parte de este entorno. En tu caso, tienes un único servicio llamado web
. Este servicio utiliza el nginx:alpine
image y configura una redirección de puertos con ports
directiva. Todas las solicitudes en el puerto 8000
del anfitrión máquina (el sistema desde el que está ejecutando Docker Compose) será redirigido a la web
contenedor en el puerto 80
, donde se ejecutará Nginx.
Los volumes
directiva creará un volumen compartido entre la máquina host y el contenedor. Esto compartirá la app
local carpeta con el contenedor, y el volumen se ubicará en /usr/share/nginx/html
dentro del contenedor, que luego sobrescribirá la raíz del documento predeterminado para Nginx.
Guarde y cierre el archivo.
Ha configurado una página de demostración y un docker-compose.yml
archivo para crear un entorno de servidor web en contenedores que lo atenderá. En el siguiente paso, traerá este entorno con Docker Compose.
Paso 3:Ejecutar Docker Compose
Con docker-compose.yml
archivo en su lugar, ahora puede ejecutar Docker Compose para abrir su entorno. El siguiente comando descargará las imágenes Docker necesarias, creará un contenedor para la web
servicio y ejecute el entorno en contenedores en modo de fondo:
- docker-compose up -d
Docker Compose primero buscará la imagen definida en su sistema local y, si no puede localizar la imagen, la descargará de Docker Hub. Verá un resultado como este:
OutputCreating network "compose-demo_default" with the default driver
Pulling web (nginx:alpine)...
alpine: Pulling from library/nginx
cbdbe7a5bc2a: Pull complete
10c113fb0c77: Pull complete
9ba64393807b: Pull complete
c829a9c40ab2: Pull complete
61d685417b2f: Pull complete
Digest: sha256:57254039c6313fe8c53f1acbf15657ec9616a813397b74b063e32443427c5502
Status: Downloaded newer image for nginx:alpine
Creating compose-demo_web_1 ... done
sudo
.
Su entorno ya está funcionando en segundo plano. Para verificar que el contenedor está activo, puede ejecutar:
- docker-compose ps
Este comando le mostrará información sobre los contenedores en ejecución y su estado, así como cualquier redirección de puerto actualmente en su lugar:
Output Name Command State Ports
----------------------------------------------------------------------------------
compose-demo_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8000->80/tcp
Ahora puede acceder a la aplicación de demostración dirigiendo su navegador a localhost:8000
si está ejecutando esta demostración en su máquina local, o your_server_domain_or_IP:8000
si está ejecutando esta demostración en un servidor remoto.
Verás una página como esta:
El volumen compartido que configuró dentro de docker-compose.yml
El archivo guarda tu app
archivos de carpeta sincronizados con la raíz del documento del contenedor. Si realiza algún cambio en el index.html
archivo, el contenedor los recogerá automáticamente y, por lo tanto, se reflejarán en su navegador cuando vuelva a cargar la página.
En el siguiente paso, verá cómo administrar su entorno en contenedores con los comandos de Docker Compose.
Paso 4:familiarizarse con los comandos de Docker Compose
Has visto cómo configurar un docker-compose.yml
archivo y active su entorno con docker-compose up
. Ahora verá cómo usar los comandos de Docker Compose para administrar e interactuar con su entorno en contenedores.
Para verificar los registros producidos por su contenedor Nginx, puede usar los logs
comando:
- docker-compose logs
Verá un resultado similar a este:
OutputAttaching to compose-demo_web_1
web_1 | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
web_1 | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
web_1 | 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
web_1 | 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
web_1 | /docker-entrypoint.sh: Configuration complete; ready for start up
web_1 | 172.22.0.1 - - [02/Jun/2020:10:47:13 +0000] "GET / HTTP/1.1" 200 353 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" "-"
Si desea pausar la ejecución del entorno sin cambiar el estado actual de sus contenedores, puede usar:
- docker-compose pause
OutputPausing compose-demo_web_1 ... done
Para reanudar la ejecución después de emitir una pausa:
- docker-compose unpause
OutputUnpausing compose-demo_web_1 ... done
La stop
El comando finalizará la ejecución del contenedor, pero no destruirá ningún dato asociado con sus contenedores:
- docker-compose stop
OutputStopping compose-demo_web_1 ... done
Si desea eliminar los contenedores, las redes y los volúmenes asociados con este entorno en contenedores, use el botón down
comando:
- docker-compose down
OutputRemoving compose-demo_web_1 ... done
Removing network compose-demo_default
Tenga en cuenta que esto no eliminará la imagen base utilizada por Docker Compose para activar su entorno (en su caso, nginx:alpine
). De esta manera, cada vez que vuelva a abrir su entorno con un docker-compose up
, el proceso será mucho más rápido ya que la imagen ya está en su sistema.
En caso de que también desee eliminar la imagen base de su sistema, puede usar:
- docker image rm nginx:alpine
OutputUntagged: nginx:alpine
Untagged: nginx@sha256:b89a6ccbda39576ad23fd079978c967cecc6b170db6e7ff8a769bf2259a71912
Deleted: sha256:7d0cdcc60a96a5124763fddf5d534d058ad7d0d8d4c3b8be2aefedf4267d0270
Deleted: sha256:05a0eaca15d731e0029a7604ef54f0dda3b736d4e987e6ac87b91ac7aac03ab1
Deleted: sha256:c6bbc4bdac396583641cb44cd35126b2c195be8fe1ac5e6c577c14752bbe9157
Deleted: sha256:35789b1e1a362b0da8392ca7d5759ef08b9a6b7141cc1521570f984dc7905eb6
Deleted: sha256:a3efaa65ec344c882fe5d543a392a54c4ceacd1efd91662d06964211b1be4c08
Deleted: sha256:3e207b409db364b595ba862cdc12be96dcdad8e36c59a03b7b3b61c946a5741a
Nota :Consulte nuestra guía sobre cómo instalar y usar Docker para obtener una referencia más detallada sobre los comandos de Docker.
Conclusión
En esta guía, ha visto cómo instalar Docker Compose y configurar un entorno en contenedores basado en una imagen de servidor web Nginx. También ha visto cómo administrar este entorno mediante los comandos de redacción.
Para obtener una referencia completa de todos los docker-compose
disponibles comandos, consulte la documentación oficial.
Si está interesado en más usos de Docker Compose, consulte Cómo instalar WordPress con Docker Compose y también Cómo proteger una aplicación Node.js en contenedor con Nginx, Let's Encrypt y Docker Compose.