Docker Compose ahora admite perfiles para el uso selectivo de servicios. Servicios en su docker-compose.yml
se puede vincular a uno o más perfiles con nombre. Pasar un nombre de perfil a docker-compose up
iniciará solo los servicios en ese perfil, permitiéndole crear variantes de su pila para configuraciones y entornos específicos.
Compose se ha centrado anteriormente en definir una sola pila que es una distribución canónica de su aplicación. Los perfiles agregan más espacio para personalizar qué partes de la pila usar, lo que hace que los conjuntos complejos de servicios sean más modulares y configurables.
¿Por qué usar perfiles?
El uso de perfiles es completamente opcional. Sus archivos existentes de Docker Compose seguirán funcionando y no es necesario adoptar perfiles de inmediato.
Los perfiles de servicio resuelven varias frustraciones comunes con los flujos de prueba y desarrollo de Docker Compose. Es posible que tenga servicios que solo quiera usar en el desarrollo, como un contenedor de depuración o un servicio de registro. Cuando está en producción, no necesita esos servicios y quiere evitar iniciarlos.
Anteriormente, lograr esto requería dividir las definiciones de servicio en varios archivos. Entonces necesitaría un up
difícil de manejar comando para iniciar todo en desarrollo:
# docker-compose.yml version: "3" services: app: image: my-app:latest # docker-compose-dev.yml version: "3" services: debug: image: my-app-debug:latest
# start in production docker-compose up -d # start in development docker-compose -f docker-compose.yml -f docker-compose-dev.yml up -d
Los perfiles le permiten combinar ambas definiciones de servicio en un solo archivo. Puede usar una bandera o una variable de entorno para seleccionar un perfil específico, sin tener que escribir manualmente las rutas de los archivos. Esto crea una experiencia más conveniente que es menos complicada de documentar, escribir y ejecutar.
Definiendo Perfiles
Los perfiles se crean configurando los profiles
campo de servicios en su docker-compose.yml
. Los perfiles se especifican como una lista. A cada servicio se le puede dar uno o varios perfiles.
version: "3" services: app: image: my-app:latest debug: image: my-app-debug:latest profiles: - dev
Las instancias de perfil se crean implícitamente a partir de los nombres dados a sus profiles
los campos. Los servicios que comparten un perfil se unen automáticamente.
Para iniciar los servicios incluidos en un perfil, agregue el --profile
marcar para docker-compose up
:
docker-compose up --profile dev
Este comando iniciaría tanto la app
y debug
servicios del archivo Compose anterior. Si ejecutó docker-compose up
, omitiendo el --profile
marca, solo la app
el servicio comenzaría.
Puede iniciar varios perfiles simultáneamente repitiendo --profile
bandera. Compose también es compatible con COMPOSE_PROFILES
variable de entorno como alternativa a --profile
. Esto acepta una lista de nombres de perfil separados por comas.
Servicios sin profiles
el campo siempre se iniciará, independientemente de cualquier perfil solicitado. Una vez que se le ha dado un perfil a un servicio, solo se iniciará si ese perfil ha sido solicitado. Para servicios con múltiples perfiles, solicitar cualquiera de ellos permitirá que se inicie el servicio.
Inicios de perfil implícito
Los perfiles siempre se ignorarán si inicia manualmente un servicio usando docker-compose run
. En este caso, Compose también iniciará cualquier servicio del que dependa el servicio solicitado, si comparten un perfil o no tienen un perfil asignado.
Aquí, ejecutando docker-compose run debug
iniciaría debug-utils
servicio, aunque el dev
el perfil no se ha seleccionado explícitamente:
version: "3" services: app: image: my-app:latest debug-utils: image: my-app-debug-utils:latest profiles: - dev debug: image: my-app-debug:latest depends_on: debug-utils profiles: - dev
Los inicios implícitos solo se aplican a los dependientes directos del servicio especificado. Si debug-utils
también tenía un depends_on
, y ese servicio no compartió el dev
perfil, no se iniciaría correctamente.
Para que la resolución de dependencia funcione correctamente con docker-compose run
, todos los servicios del árbol deben compartir un perfil del servicio superior o estar habilitados de forma permanente. Si ninguna de esas condiciones se cumple, deberá agregar el --profile
marcar para activar explícitamente cualquier perfil requerido adicional.
Resumen
Los perfiles de servicio son una característica conveniente de Redactar que facilita la administración de diferentes combinaciones de servicios. Al usar perfiles, puede evitar dividir los servicios en varios archivos de Compose. Agregando --profile
por lo general, se siente más natural que fusionar varios archivos YAML.
Los perfiles le permiten crear subpilas dentro de su aplicación Compose principal. Su introducción como parte de la especificación Compose es un reconocimiento de que las pilas en desarrollo a menudo incorporan servicios adicionales más allá de los que se usan en producción.
En términos más generales, los perfiles hacen que Compose sea más versátil al facilitar la personalización de la pila. Si bien se concibió como un enfoque para la gestión ambiental, los perfiles también podrían ayudar a la comunidad a crear diferentes variaciones de imágenes populares. Piense en un WordPress docker-compose.yml
con mysql
y mariadb
perfiles:ahora puede cambiar fácilmente entre los servicios de base de datos preconfigurados para seleccionar el motor que coincida con su preferencia.
Docker Compose 1.28 introdujo perfiles a principios de este año. Siempre que tenga una versión reciente del binario Compose o Docker Desktop para Windows y Mac, puede agregar profiles
a sus archivos Compose para comenzar a habilitar servicios de forma selectiva.