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.
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.
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:
Outputdocker-compose version 1.25.3, build d4d1b42b
Ahora que instalamos Docker Compose, estamos listos para ejecutar un ejemplo “Hello World”.
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:
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:
OutputREPOSITORY 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:
OutputPulling 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
OutputCONTAINER 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
OutputCONTAINER 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.
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
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.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
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!