Gestión de aplicaciones de varios contenedores mediante docker-compose
- DESCRIPCIÓN
docker-compose permite definir y gestionar una aplicación de varios contenedores. La herramienta simplifica la distribución de una pila de aplicaciones de este tipo mediante un archivo de definición fácil de usar.
- INTENCIÓN
En este artículo se describe cómo crear una aplicación de varios contenedores mediante docker-compose.
- ESFUERZO
Se tardan aproximadamente 20 minutos en leer el artículo.
- OBJETIVO
Podrá crear su propia pila de aplicaciones basada en contenedores.
- REQUISITOS
Las imágenes del contenedor de aplicaciones o los archivos de origen asociados que se utilizan para crear la aplicación.
1 Herramientas implicadas en la gestión de aplicaciones de varios contenedores #
docker-compose es la herramienta responsable de crear la aplicación de varios contenedores. Por defecto, utiliza Docker, que no está presente en SLE Micro. Para omitir Docker y utilizar Podman en su lugar, se utiliza el guion podman-docker
. Por lo tanto, no es necesario cambiar los guiones existentes de Docker a Podman. Las siguientes secciones proporcionan descripciones detalladas de las herramientas.
1.1 Acerca de Podman #
Podman es la abreviatura de Pod Manager Tool (Herramienta de gestión de pods). Se trata de un motor de contenedor sin daemon que permite ejecutar y distribuir aplicaciones mediante contenedores e imágenes de contenedor. Podman proporciona una interfaz de línea de comandos para gestionar contenedores.
Como Podman no tiene un daemon, proporciona integración con systemd. Esto hace posible controlar los contenedores mediante unidades systemd. Puede crear estas unidades para contenedores existentes, así como generar unidades que puedan iniciar contenedores si no existen en el sistema. Podman puede ejecutar systemd dentro de contenedores.
Podman permite organizar los contenedores en pods. Los pods comparten la misma interfaz de red y los mismos recursos. Un caso de uso típico para organizar un grupo de contenedores en un pod es un contenedor que ejecuta una base de datos y un contenedor con un cliente que accede a la base de datos.
1.1.1 Instalación de Podman #
Podman se incluye en SLE Micro por defecto. Sin embargo, si falta Podman, puede instalarlo como se describe a continuación:
Ejecute el comando:
>
sudo
transactional-update pkg install podman*Reinicie el sistema para arrancar en la nueva instantánea.
1.2 Acerca de podman-docker
#
podman-docker
es un guion bash que cambia cualquier comando docker
que se ejecute en un comando podman
correspondiente con los mismos argumentos pasados. Por lo tanto, puede utilizar todos los guiones de Docker sin realizar ninguna modificación.
1.2.1 Instalación de podman-docker
#
podman-docker
no está instalado en SLE Micro por defecto. Para instalarlo, haga lo siguiente:
Instale el paquete
podman-docker
ejecutando:transactional-update pkg install podman-docker
Rearranque el sistema para cambiar a la última instantánea.
1.3 Acerca de docker-compose #
docker-compose es una herramienta para gestionar aplicaciones de varios contenedores. Permite tener varios entornos aislados en un solo host, y además admite el uso de variables entre entornos. Con docker-compose, puede volver a crear solo los contenedores que han cambiado sin destruir toda la aplicación de varios contenedores.
docker
se reemplaza con el comando podman
En SLE Micro, el guion podman-docker
se utiliza para llamar a Podman siempre que se ejecuta docker-compose, ya que Docker no está presente en SLE Micro.
1.3.1 Instalación de docker-compose #
Si docker-compose no está presente en el sistema, puede instalarlo siguiendo estos pasos:
Ejecute el comando:
>
sudo
transactional-update pkg install docker-composeCuando finalice la instalación, rearranque el sistema para arrancar en la nueva instantánea.
2 Creación de una aplicación de varios contenedores #
Para crear una aplicación de varios contenedores, haga lo siguiente:
Cree el archivo de configuración
compose.yml
. Para obtener información detallada, consulte la Sección 2.1, “Creación decompose.yml
”.Prepare la estructura de directorios necesaria. Se recomienda colocar el archivo
compose.yml
en la parte superior del directorio de trabajo.Si es necesario, escriba sus propios archivos de contenedor específicos para los servicios utilizados por la aplicación en contenedor. Por ejemplo, para distribuir una aplicación Go, cree un archivo de contenedor para la aplicación Go con la configuración y las dependencias necesarias.
Se recomienda crear un subdirectorio por servicio en el directorio de trabajo y colocar allí los archivos específicos del servicio.
Distribuya la aplicación de varios contenedores. Para obtener información detallada, consulte la Sección 2.2, “Distribución de aplicaciones de varios contenedores”.
2.1 Creación de compose.yml
#
Para crear la aplicación de varios contenedores, debe crear un archivo compose.yml
situado preferiblemente en el directorio de trabajo. Puede tratarse de un único archivo, o puede utilizar un enfoque más detallado mediante fragmentos y extensiones. También se pueden fusionar varios archivos de docker-compose para definir el modelo de aplicación completo.
El archivo compose.yml
define su aplicación. Puede incluir las siguientes partes.
- services
Un servicio es un componente informático de la aplicación. Para obtener más información sobre la definición, consulte la Sección 2.1.1, “Definición de servicios”.
- networks
Puede utilizar la instrucción
network
para definir redes personalizadas y asignar servicios concretos a redes personalizadas. Para obtener información detallada, consulte la Sección 2.1.2, “Definición de redes”.- volumes
Un volumen es un directorio gestionado por el motor del contenedor donde los servicios almacenan y comparten datos.
- environment variables
Es posible que también necesite utilizar una lista de variables de entorno que se pasarán a sus servicios. Para obtener información detallada, consulte environment variables reference.
- configs
Todos los archivos de configuración requeridos por los servicios deben declararse en la sección
configs
. Para obtener información detallada, consulteconfigs
definition.
2.1.1 Definición de servicios #
Al definir los servicios, debe especificar la imagen de contenedor que se debe utilizar o proporcionar archivos de origen para crear el servicio a partir de ellos.
Para crear el contenedor de servicios a partir de una imagen, utilice la instrucción image
:
services: db: image: database
Podman comprueba si el nombre de la imagen declarado en el archivo compose.yml
está disponible en el almacenamiento del contenedor local. Si no es así, Podman extrae la imagen de uno de los registros configurados.
Para crear un servicio a partir de archivos de origen, proporcione los archivos de origen y cree un archivo de contenedor, ambos en el mismo directorio. En el archivo compose.yml
, utilice la instrucción build
:
services: db: build: PATH_TO_SOURCE_FILES
Si un servicio concreto debe iniciarse después de otro, puede utilizar la instrucción depends_on
:
services: db: image: database depends_on: system: condition: SERVICE_CONDITION
SERVICE_CONDITION puede tener uno de estos valores: service_started
, service_healthy
o service_completed_successfully
.
Para obtener más información sobre la definición de services
, consulte services
specification.
2.1.2 Definición de redes #
Por defecto, docker-compose crea una red por defecto y cada contenedor de la pila de aplicaciones se incluye en la red. La red por defecto no tiene que estar declarada en el archivo compose.yml
, ya que docker-compose la crea automáticamente.
También puede definir redes personalizadas y asignarles servicios concretos. Por ejemplo, para crear dos redes network1
y network2
, añada el siguiente fragmento:
networks: network1: # Use a custom driver driver: custom-driver-1 network2: # Use a custom driver and name the network driver: custom-driver-2 name: custom_network
También puede utilizar una red existente. En este caso, marque la red como externa:
networks: network1: name: network1 external: true
Para obtener la especificación de networks
completa, consulte networks
specification.
2.1.3 Ejemplo de compose.yml
#
El siguiente ejemplo de compose.yml
define una pila de aplicaciones que utiliza el sistema de monitorización Prometheus y el sistema de análisis Grafana.
services: prometheus: image: prom/prometheus container_name: prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' ports: - 9090:9090 restart: unless-stopped volumes: - ./prometheus:/etc/prometheus - prom_data:/prometheus grafana: image: grafana/grafana container_name: grafana ports: - 3000:3000 restart: unless-stopped environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=grafana volumes: - ./grafana:/etc/grafana/provisioning/datasources volumes: prom_data:
La estructura del proyecto en este ejemplo debe tener el aspecto siguiente:
. ├── compose.yaml ├── grafana │ └── datasource.yml ├── prometheus │ └── prometheus.yml └── README.md
2.2 Distribución de aplicaciones de varios contenedores #
Después de crear la estructura de directorios adecuada y el archivo compose.yml
, puede distribuir la aplicación de varios contenedores:
Compruebe que el contenedor que desea ejecutar no exista:
>
podman ps --allSi es necesario, elimine el contenedor concreto:
>
podman rm -fCONTAINER_IDInicie la aplicación de varios contenedores ejecutando el siguiente comando desde el directorio donde se encuentra
compose.yml
:>
docker compose up -ddocker-compose crea una red independiente para la aplicación de varios contenedores.
Puede verificar que los contenedores se están ejecutando y los puertos están asignados mostrando los contenedores en ejecución:
>
podman ps
3 Gestión de una aplicación de varios contenedores #
Después de crear la aplicación de varios contenedores, puede utilizar el comando docker-compose
para realizar operaciones de gestión. La sintaxis del comando es la siguiente:
>
docker compose[OPTIONS]COMMAND
Ejecute el comando desde el mismo directorio donde se encuentra el archivo compose.yml
de la aplicación de varios contenedores que desea gestionar. También puede proporcionar una vía al archivo compose.yml
mediante la opción -f, --file
. Por ejemplo, para salir y eliminar la aplicación de varios contenedores:
>
docker compose -f ./test/compose.yml down
Otros comandos útiles:
- images
Muestra todas las imágenes utilizadas por los contenedores en la aplicación de varios contenedores.
>
docker compose images- pause
Pausa todos los contenedores.
>
docker compose pause[SERVICE]- ps
Muestra los contenedores de la aplicación de varios contenedores.
>
docker compose ps- rm
Elimina contenedores detenidos.
>
docker compose rm- start/stop
Inicia o detiene los contenedores.
>
docker compose stop[SERVICE]
Para obtener una lista completa de opciones y comandos, ejecute:
>
docker-compose --help
4 Información legal #
Copyright © 2006 –2024 SUSE LLC y colaboradores. Reservados todos los derechos.
Está permitido copiar, distribuir y modificar este documento según los términos de la licencia de documentación gratuita GNU, versión 1.2 o (según su criterio) versión 1.3. Este aviso de copyright y licencia deberán permanecer inalterados. En la sección titulada “GNU Free Documentation License” (Licencia de documentación gratuita GNU) se incluye una copia de la versión 1.2 de la licencia.
Para obtener información sobre las marcas comerciales de SUSE, consulte https://www.suse.com/company/legal/. Todas las marcas comerciales de otros fabricantes son propiedad de sus respectivas empresas. Los símbolos de marcas comerciales (®, ™, etc.) indican marcas comerciales de SUSE y sus filiales. Los asteriscos (*) indican marcas comerciales de otros fabricantes.
Toda la información recogida en esta publicación se ha compilado prestando toda la atención posible al más mínimo detalle. Sin embargo, esto no garantiza una precisión total. Ni SUSE LLC, ni sus filiales, ni los autores o traductores serán responsables de los posibles errores o las consecuencias que de ellos pudieran derivarse.