Tutorial

Cómo instalar Docker Compose en Debian 10

DebianDockerDebian 10

Introducción

Docker es una excelente herramienta para automatizar la implementación de aplicaciones de Linux dentro de contenedores de software, pero para aprovechar plenamente su potencial cada componente de una aplicación debería ejecutarse en su propio contenedor individual. En el caso de aplicaciones complejas con muchos componentes, la estrategia de organizar todos los contenedores para que se inicien, se comuniquen y se desconecten juntos puede volverse poco productiva en poco tiempo.

La comunidad de Docker propuso una solución popular llamada Fig, que permitió el uso de un archivo YAML único para organizar la totalidad de sus contenedores y configuraciones de Docker. La popularidad de esto fue tal que el equipo de Docker decidió crear Docker Compose en base a la fuente de Fig, que ahora es obsoleta. Docker Compose permite que los usuarios organicen los procesos de los contenedores de Docker, incluidos los de inicio, cierre y configuración de enlaces y volúmenes dentro de los contenedores.

A través de este tutorial, instalará la versión más reciente de Docker Compose para poder administrar aplicaciones en varios contenedores en un servidor de Debian 10.

Requisitos previos

Para seguir los pasos de este artículo, necesitará lo siguiente:

Nota: Aunque en los requisitos previos se brindan instrucciones para instalar Docker en Debian 10, los comandos de docker de este artículo deberían funcionar en otros sistemas operativos en tanto Docker esté instalado.

Paso 1: Instalar Docker Compose

Aunque puede instalar Docker Compose desde los repositorios oficiales de Debian, esta copia está atrasada varias versiones respecto de la más reciente, por lo que en este tutorial se instalará desde el repositorio de GitHub de Docker. El comando que se muestra a continuación difiere ligeramente respecto del que encontrará en la página de versiones. Usando el indicador -o para especificar primero el archivo de salida en lugar de redirigirla, en esta sintaxis se evita que se produzca un error de “denegación de permiso” al utilizar sudo.

Compruebe la versión actual y, si es necesario, actualícela en el comando que se muestra a continuación:

  • sudo curl -L https://github.com/docker/compose/releases/download/1.25.3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

Luego, configuraremos los permisos:

  • sudo chmod +x /usr/local/bin/docker-compose

A continuación, comprobaremos que la instalación se haya realizado de forma correcta revisando la versión:

  • docker-compose --version

Con esto se imprimirá la versión que instalamos:

Output
docker-compose version 1.25.3, build d4d1b42b

Ahora que instalamos Docker Compose, estamos listos para ejecutar un ejemplo “Hello World”.

Paso 2: Ejecución de un contenedor con Docker Compose

En Docker Hub, el registro público de Docker, se incluye una imagen de Hello World para demostración y pruebas. En ella se muestra la configuración mínima requerida para ejecutar un contenedor usando Docker Compose: un archivo YAML que invoca a una sola imagen. Crearemos esta configuración mínima para ejecutar nuestro contenedor hello-world.

Primero, cree un directorio para el archivo YAML y posiciónese en él:

  • mkdir hello-world
  • cd hello-world

Luego cree el archivo YAML:

  • nano docker-compose.yml

Introduzca el siguiente contenido en el archivo, guárdelo y cierre el editor de texto:

docker-compose.yml
my-test:
 image: hello-world

La primera línea del archivo YAML se utiliza como parte del nombre del contenedor. En la segunda línea se especifica la imagen que se debe usar para crear el contenedor. Cuando ejecutemos el comando docker-compose up, se buscará una imagen local con el nombre que especificamos: hello-world. Una vez implementado esto, guardaremos el archivo y lo cerraremos.

Puede ver de forma manual imágenes de nuestro sistema con el comando docker images:

  • docker images

Cuando no hay imágenes locales, solo se muestran los encabezados de columnas:

Output
REPOSITORY TAG IMAGE ID CREATED SIZE

Ahora, desde el directorio ~/hello-world, ejecute el siguiente comando:

  • docker-compose up

La primera vez que ejecute el comando, si no existe una imagen local con el nombre hello-world Docker Compose la extraerá del repositorio público de Docker Hub:

Output
Pulling my-test (hello-world:)... latest: Pulling from library/hello-world 9db2ca6ccae0: Pull complete Digest: sha256:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdc Status: Downloaded newer image for hello-world:latest . . .

Tras extraer la imagen, docker-compose crea un contenedor, adjunta y ejecuta el programa hello, lo que a su vez confirma que la instalación parece funcionar:

Output
. . . Creating helloworld_my-test_1... Attaching to helloworld_my-test_1 my-test_1 | my-test_1 | Hello from Docker. my-test_1 | This message shows that your installation appears to be working correctly. my-test_1 | . . .

Luego imprime una explicación de lo que hizo:

Output
To generate this message, Docker took the following steps: my-test_1 | 1. The Docker client contacted the Docker daemon. my-test_1 | 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. my-test_1 | (amd64) my-test_1 | 3. The Docker daemon created a new container from that image which runs the my-test_1 | executable that produces the output you are currently reading. my-test_1 | 4. The Docker daemon streamed that output to the Docker client, which sent it my-test_1 | to your terminal.

Los contenedores de Docker solo se ejecutan mientras el comando está activo, de modo que cuando hello termina de ejecutarse, el contenedor se detiene. Por consiguiente, cuando examinemos procesos activos los encabezados de columna aparecerán, pero el contenedor de hello-world no figurará por no estar en ejecución:

  • docker ps
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Puede ver la información del contenedor que necesitará en el siguiente paso usando el indicador -a. Con esto se muestran todos los contenedores, no solo los activos:

  • docker ps -a
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 06069fd5ca23 hello-world "/hello" 35 minutes ago Exited (0) 35 minutes ago hello-world_my-test_1

Con esto muestra la información que requiere para eliminar el contenedor cuando termine de usarlo.

Paso 3: Eliminación de la imagen (opcional)

Para evitar ocupar espacio innecesario en el disco, eliminaremos la imagen local. Para hacerlo, tendremos que eliminar todos los contenedores que hagan referencia a la imagen usando el comando docker rm, seguido del CONTAINER ID o del NAME. En el siguiente ejemplo, usaremos el CONTAINER ID del comando docker ps -a que acabamos de ejecutar. Asegúrese de sustituir el ID de su contenedor:

  • docker rm 06069fd5ca23

Una vez eliminados todos los contenedores que hagan referencia a la imagen, podemos eliminar la imagen:

  • docker rmi hello-world

Conclusión

Instaló Docker Compose en Debian 10, probó su instalación ejecutando un ejemplo de Hello World y eliminó la imagen de prueba y el contenedor.

Aunque a través del ejemplo de Hello World se confirmó su instalación, la configuración básica no muestra una de las principales ventajas de Docker Compose: la capacidad de crear y eliminar un grupo de contenedores de Docker al mismo tiempo. Para saber usar Docker Compose de forma más detallada, consulte Cómo instalar WordPress con Docker Compose.

Creative Commons License