Tutorial

Cómo instalar Docker Compose en Ubuntu 18.04

Published on November 7, 2019
Español
Cómo instalar Docker Compose en Ubuntu 18.04

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 de forma más sencilla los procesos de los contenedores de Docker, incluidos los de inicio, cierre y configuración de enlaces y volúmenes dentro de los contenedores.

En este tutorial, le mostraremos la forma de instalar la versión más reciente de Docker Compose para ayudarlo a administrar aplicaciones en varios contenedores.

Requisitos previos

Para seguir los pasos de este artículo, necesitará un servidor Ubuntu 18.04. con lo siguiente:

Una vez implementado esto, estará listo para seguir adelante.

Nota: Aunque en los requisitos previos se brindan instrucciones para instalar Docker en Ubuntu 18.04, los comandos de docker de este artículo deben funcionar en otros sistemas operativos mientras Docker esté instalado.

Paso 1: Instalar Docker Compose

Si bien se puede instalar Docker Compose desde los repositorios oficiales de Ubuntu, la versión está considerablemente atrasada respecto de la más reciente. Por lo tanto, instalaremos Docker Compose desde el repositorio de GitHub. El comando que se muestra a continuación difiere ligeramente respecto del que encontrará en la página Versiones. Al usar el indicador -o para especificar primero el archivo de salida en lugar de redirigirla, esta sintaxis evita que se produzca un error de denegación de permiso al usar sudo.

Revisaremos la versión actual y, si es necesario, la actualizaremos en el comando que se muestra a continuación:

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

Luego, configuraremos los permisos:

  1. 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:

  1. docker-compose --version

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

Output
docker-compose version 1.21.2, build a133471

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 llama a una única imagen:

Primero, crearemos un directorio para el archivo YAML y nos ubicaremos en él:

  1. mkdir hello-world
  2. cd hello-world

Luego, crearemos el archivo YAML:

  1. 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 ejecutamos el comando docker-compose se buscará una imagen local con el nombre que precisamos: hello-world. Una vez implementado esto, guardaremos el archivo y lo cerraremos.

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

  1. docker images

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

Output
REPOSITORY TAG IMAGE ID CREATED SIZE

Ahora, aunque aún nos encontremos en el directorio ~/hello-world, ejecutaremos el siguiente comando:

  1. docker-compose up

La primera vez que ejecutemos el comando, si no aparece 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)... latest: Pulling from library/hello-world c04b14da8d14: Downloading [==================================================>] c04b14da8d14: Extracting [==================================================>] c04b14da8d14: Extracting [==================================================>] c04b14da8d14: Pull complete Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9 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 of docker-compose up
1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it 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 examinamos procesos activos los encabezados de columna aparecerán, pero el contenedor de hello-world no figurará por no estar en ejecución.

  1. docker ps
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Podemos ver la información del contenedor, la cual necesitaremos en el siguiente paso, usando el indicador -a que muestra todos los contenedores, no solo los activos:

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

Esto muestra la información que deberemos eliminar del contenedor cuando terminemos con él.

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 ID DEL CONTENEDOR o del NOMBRE. A continuación, usaremos el ID del CONTENEDOR del comando docker ps -a que acabamos de ejecutar. Asegúrese de sustituir el ID de su contenedor:

  1. docker rm 06069fd5ca23

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

  1. docker rmi hello-world

Conclusión

De esta manera, instalamos Docker Compose, probamos nuestra instalación ejecutando un ejemplo de Hello World y eliminamos la imagen de prueba y el contenedor.

Aunque el ejemplo de Hello World confirmó nuestra instalación, la configuración sencilla no muestra uno de los principales beneficios de Docker Compose: crear y eliminar un grupo de contenedores de Docker al mismo tiempo. Para ver el poder de Docker Compose en acción, tal vez desee revisar el ejemplo práctico Cómo configurar un entorno de integración continua de prueba con Docker y Docker Compose en Ubuntu 16.04 (nota: este artículo es para Ubuntu 16.04 y no responde a la versión 18.04).

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about us


About the authors
Default avatar
Tony Tran

author



Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Featured on Community

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel