Cómo instalar y utilizar Docker Compose en Ubuntu 20.04

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 consumen menos 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, se comuniquen y se apaguen juntos puede volverse difícil de manejar rápidamente. Docker Compose es una herramienta que le permite ejecutar entornos de aplicaciones de múltiples contenedores basados en definiciones establecidas en un archivo YAML. Utiliza definiciones de servicios para crear entornos totalmente personalizables con múltiples 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 utilizar esta herramienta.
Simplifique la implementación de aplicaciones en servidores con la plataforma de aplicaciones DigitalOcean . Implemente directamente desde GitHub en minutos.
Prerrequisitos
Para seguir este artículo, necesitarás:
- Acceso a una máquina local o servidor de desarrollo Ubuntu 20.04 como usuario no root con privilegios sudo. Si está utilizando un servidor remoto, es recomendable tener instalado un firewall activo. Para configurarlo, 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 .
Nota: Este tutorial lo guiará en la instalación de Docker Compose v1, que utiliza docker-compose
. A partir de Docker Compose v2, Docker ha migrado hacia el uso del compose
comando CLI plugin como se documenta en nuestra última versión Ubuntu 22.04 de este tutorial , y se ha alejado del original docker-compose
. Si bien la instalación difiere, en general, el uso real implica eliminar el guion de docker-compose
las llamadas para convertirse en docker compose
. Para obtener detalles completos sobre la 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, descargará este software desde su repositorio oficial de Github .
En primer lugar, confirma la última versión disponible en su página de lanzamientos . Al momento de escribir este artículo, la versión estable más actual es 1.29.2
.
El siguiente comando descargará la 1.29.2
versión y guardará 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, configure los permisos correctos para que el docker-compose
comando sea ejecutable:
- sudo chmod +x /usr/local/bin/docker-compose
Para verificar que la instalación fue exitosa, puede ejecutar:
- docker-compose --version
Verás un resultado similar a este:
Outputdocker-compose version 1.29.2, build 5becea4c
Docker Compose ya está instalado correctamente en tu sistema. En la siguiente sección, verás cómo configurar un docker-compose.yml
archivo y poner en funcionamiento un entorno en contenedores con esta herramienta.
Paso 2: Configuración de un docker-compose.ymlarchivo
Para demostrar cómo configurar un docker-compose.yml
archivo y trabajar 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 contenedorizado 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 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 htmlhtmlhead meta charset="utf-8" titleDocker Compose Demo/title link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css"/headbody h1This is a Docker Compose Demo Page./h1 pThis content is being served by an Nginx container./p/body/html
Guarde y cierre el archivo cuando haya terminado. Si está utilizando nano
, puede hacerlo escribiendo CTRL+X
, luego Y
y ENTER
para confirmar.
A continuación, crea el docker-compose.yml
archivo:
- nano docker-compose.yml
Inserte el siguiente contenido en su docker-compose.yml
archivo:
docker-compose.yml
version: '3.7'services: web: image: nginx:alpine ports: - "8000:80" volumes: - ./app:/usr/share/nginx/html
El docker-compose.yml
archivo suele comenzar con la version
definición. Esto le indicará a Docker Compose qué versión de configuración estás usando.
Luego tienes el services
bloque, donde configuras los servicios que forman parte de este entorno. En tu caso, tienes un solo servicio llamado web
. Este servicio usa la nginx:alpine
imagen y configura una redirección de puerto con la ports
directiva. Todas las solicitudes en el puerto 8000
de la máquina host (el sistema desde donde estás ejecutando Docker Compose) se redirigirán al web
contenedor en el puerto 80
, donde se ejecutará Nginx.
La volumes
directiva creará un volumen compartido entre la máquina host y el contenedor. Esto compartirá la app
carpeta local con el contenedor y el volumen se ubicará /usr/share/nginx/html
dentro del contenedor, que luego sobrescribirá la raíz del documento predeterminada 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 servirá. En el siguiente paso, activará este entorno con Docker Compose.
Paso 3: Ejecutar Docker Compose
Una vez que el docker-compose.yml
archivo esté listo, puede ejecutar Docker Compose para activar su entorno. El siguiente comando descargará las imágenes de Docker necesarias, creará un contenedor para el web
servicio y ejecutará el entorno contenedorizado en modo de segundo plano:
- docker-compose up -d
Docker Compose primero buscará la imagen definida en su sistema local y, si no puede encontrarla, la descargará desde Docker Hub. Verá un resultado como este:
OutputCreating network "compose-demo_default" with the default driverPulling web (nginx:alpine)...alpine: Pulling from library/nginxcbdbe7a5bc2a: Pull complete10c113fb0c77: Pull complete9ba64393807b: Pull completec829a9c40ab2: Pull complete61d685417b2f: Pull completeDigest: sha256:57254039c6313fe8c53f1acbf15657ec9616a813397b74b063e32443427c5502Status: Downloaded newer image for nginx:alpineCreating compose-demo_web_1 ... done
Nota: Si te encuentras con un error de permiso relacionado con el socket de Docker, esto significa que te saltaste el Paso 2 de Cómo instalar y usar Docker en Ubuntu 20.04 . Si regresas y completas ese paso, habilitarás los permisos para ejecutar comandos de Docker sin sudo
.
Su entorno ya está activo y funcionando en segundo plano. Para verificar que el contenedor esté activo, puede ejecutar lo siguiente:
- docker-compose ps
Este comando le mostrará información sobre los contenedores en ejecución y su estado, así como también 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 apuntando su navegador 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 ésta:
El volumen compartido que ha configurado dentro del docker-compose.yml
archivo mantiene app
los archivos de su carpeta sincronizados con la raíz de documentos del contenedor. Si realiza algún cambio en el index.html
archivo, el contenedor lo detectará automáticamente y, por lo tanto, se reflejará en su navegador cuando vuelva a cargar la página.
En el siguiente paso, verá cómo administrar su entorno en contenedores con comandos de Docker Compose.
Paso 4: familiarizarse con los comandos de Docker Compose
Ya viste cómo configurar un docker-compose.yml
archivo y poner en marcha tu entorno con docker-compose up
. Ahora verás cómo usar los comandos de Docker Compose para administrar e interactuar con tu entorno en contenedores.
Para comprobar los registros producidos por su contenedor Nginx, puede utilizar el logs
comando:
- docker-compose logs
Verás un resultado similar a este:
OutputAttaching to compose-demo_web_1web_1 | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configurationweb_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.shweb_1 | 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.confweb_1 | 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.confweb_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.shweb_1 | /docker-entrypoint.sh: Configuration complete; ready for start upweb_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
El stop
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, redes y volúmenes asociados con este entorno en contenedores, utilice el down
comando:
- docker-compose down
OutputRemoving compose-demo_web_1 ... doneRemoving network compose-demo_default
Tenga en cuenta que esto no eliminará la imagen base que utiliza Docker Compose para poner en marcha su entorno (en su caso, nginx:alpine
). De esta manera, cada vez que vuelva a poner en marcha 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 quieras eliminar la imagen base de tu sistema, puedes utilizar:
- docker image rm nginx:alpine
OutputUntagged: nginx:alpineUntagged: nginx@sha256:b89a6ccbda39576ad23fd079978c967cecc6b170db6e7ff8a769bf2259a71912Deleted: sha256:7d0cdcc60a96a5124763fddf5d534d058ad7d0d8d4c3b8be2aefedf4267d0270Deleted: sha256:05a0eaca15d731e0029a7604ef54f0dda3b736d4e987e6ac87b91ac7aac03ab1Deleted: sha256:c6bbc4bdac396583641cb44cd35126b2c195be8fe1ac5e6c577c14752bbe9157Deleted: sha256:35789b1e1a362b0da8392ca7d5759ef08b9a6b7141cc1521570f984dc7905eb6Deleted: sha256:a3efaa65ec344c882fe5d543a392a54c4ceacd1efd91662d06964211b1be4c08Deleted: 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, has visto cómo instalar Docker Compose y configurar un entorno en contenedores basado en una imagen de servidor web Nginx. También has visto cómo administrar este entorno mediante comandos de Compose.
Para obtener una referencia completa de todos docker-compose
los comandos disponibles, 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 contenedores con Nginx, Let’s Encrypt y Docker Compose .
Deja una respuesta