Introducción
Docker es una gran herramienta para automatizar la implementación de aplicaciones de Linux dentro de contenedores de software, pero para aprovechar al máximo su potencial, cada componente de una aplicación debe ejecutarse en su propio contenedor individual. Para aplicaciones complejas con muchos componentes, organizar todos los contenedores para que se inicien, se comuniquen y se detengan juntos puede volverse engorroso rápidamente.
La comunidad de Docker ideó una solución popular llamada Fig, que le permitía usar un solo archivo YAML para organizar todos los contenedores y configuraciones de Docker. Esto se hizo tan popular que el equipo de Docker decidió construir Docker Compose basándose en la fuente Fig, que ahora está obsoleta. Docker Compose permite a los usuarios orquestar más fácilmente los procesos del contenedor de Docker, incluido el inicio, la detención y la configuración de enlaces y volúmenes dentro del contenedor.
En este tutorial, le mostraremos cómo instalar la última versión de Docker Compose para ayudarlo a administrar aplicaciones de contenedores múltiples en Ubuntu 18.04 LTS.
Prerrequisitos
Para seguir este artículo, necesitará un servidor Ubuntu 18.04 con lo siguiente:
- Un usuario no root con privilegios sudo.
- Docker instalado: Cómo instalar y usar Docker en Ubuntu 18.04.
Nota: A pesar de que los requisitos previos proporcionan instrucciones para la instalación del estibador en Ubuntu 18.04, la docker
comandos en este artículo deben trabajar en otros sistemas operativos, siempre y cuando se instala estibador.
Si su intención es instalar Docker Compose en un servidor remoto, continúe leyendo; de lo contrario, omita el primer párrafo "Conectarse al servidor" y lea el siguiente.
Conexión al servidor
Para acceder al servidor, necesita conocer la dirección IP. También necesitará su nombre de usuario y contraseña para la autenticación. Para conectarse al servidor como root, escriba el siguiente comando:
ssh root@IP_DEL_SERVER
A continuación, deberá ingresar la contraseña del usuario root.
Si no está utilizando el usuario root, puede iniciar sesión con otro nombre de usuario utilizando el mismo comando, luego cambie root a su nombre de usuario:
ssh nome_utente@IP_DEL_SERVER
Luego se le pedirá que ingrese su contraseña de usuario.
El puerto estándar para conectarse a través de ssh es 22, si su servidor usa un puerto diferente, deberá especificarlo usando el parámetro -p, luego escriba el siguiente comando:
ssh nome_utente@IP_DEL_SERVER -p PORTA
Instalar Docker Compose
Si bien podemos instalar Docker Compose desde el repositorio oficial de Ubuntu, estas son varias versiones menores detrás de la última versión, por lo que instalaremos Docker Compose desde el repositorio GitHub de Docker. El siguiente comando es ligeramente diferente de lo que encontrará en la página de lanzamiento. Al usar la -o
para especificar primero el archivo de salida en lugar de redirigir la salida, esta sintaxis evita encontrarse con un error de permiso denegado causado al usar sudo
.
Comprobaremos la versión actual y si es necesario la actualizaremos en el siguiente comando:
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
A continuación, configuraremos los permisos:
sudo chmod +x /usr/local/bin/docker-compose
Luego verificaremos que la instalación fue exitosa comprobando la versión:
docker-compose --version
Esto imprimirá la versión que instalamos:
Outputdocker-compose version 1.21.2, build a133471
Ahora que Docker Compose está instalado, estamos listos para ejecutar un ejemplo de "Hello World".
Ejecuta un contenedor con Docker Compose
El registro público de Docker, Docker Hub, incluye una imagen de Hello World para demostración y prueba. Demuestra la configuración mínima requerida para ejecutar un contenedor usando Docker Compose, un archivo YAML que llama a una sola imagen.
Primero, crearemos un directorio para el archivo YAML y nos moveremos a él:
mkdir hello-world
cd hello-world
A continuación, crearemos el archivo YAML:
nano docker-compose.yml
Coloque el siguiente contenido en el archivo, guarde el archivo y salga del editor de texto:
nano docker-compose.yml
my-test:
image: hello-world
La primera línea del archivo YAML se utiliza como parte del nombre del contenedor. La segunda línea especifica qué imagen usar para crear el contenedor. Al ejecutar el docker-compose up
, buscará una imagen local con el nombre que especificamos, hello-world
. Así que guardemos y salgamos del archivo.
Podemos ver manualmente las imágenes en nuestro sistema con el comando docker images
docker images
Cuando no hay imágenes locales, solo se muestran los encabezados de las columnas:
REPOSITORY TAG IMAGE ID CREATED SIZE
Ahora, mientras todavía estamos en el ~/hello-world
, ejecutaremos el siguiente comando:
docker-compose up
La primera vez que ejecutamos el comando, si no hay una imagen local llamada hello-world
, Docker Compose la extraerá del repositorio público de Docker Hub:
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...
Después de extraer la imagen, docker-compose
crea un contenedor, se conecta y ejecuta el programa Hello, que a su vez confirma que la instalación está funcionando:
...
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 imprima una explicación de lo que hizo:
Output of docker-compose up1. 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 Docker solo funcionan mientras el comando esté activo, por lo que una vez que hello
terminado de ejecutarse, el contenedor se detiene. Como resultado, cuando miramos los procesos activos, se mostrarán los encabezados de las columnas, pero el hello-world
no aparecerá en la lista porque no se está ejecutando.
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Podemos ver la información del contenedor, que necesitaremos en el siguiente paso, usando el -a
que muestra todos los contenedores, no solo los activos:
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
06069fd5ca23 hello-world "/hello" 22 minutes ago Exited (0) 22 minutes ago drunk_payne
Esto muestra la información necesaria para retirar el contenedor cuando haya terminado.
Eliminar imagen (opcional)
Para evitar usar espacio en disco innecesario, eliminaremos la imagen local. Para hacer esto, necesitaremos eliminar todos los contenedores que hacen referencia a la imagen usando el docker rm
, seguido del CONTAINER ID o NAME. A continuación, usamos el ID DE CONTENEDOR del docker ps -a
que acabamos de ejecutar. Asegúrese de reemplazar su ID de contenedor:
docker rm 06069fd5ca23
Una vez que hayamos eliminado todos los contenedores que hacen referencia a la imagen, podemos eliminar la imagen:
docker rmi hello-world
Conclusión
Instalamos Docker Compose en Ubuntu 18.04 LTS, probamos nuestra instalación ejecutando un ejemplo de Hello World y eliminamos la imagen de prueba y el contenedor.