El archivo de composición es un YAML servicios, redes y volúmenes de definición de archivos para una aplicación Docker.

Los formatos de archivo Compose ahora se describen en estas referencias, específicas para cada versión.

Archivo de referencia Qué cambió en esta versión
Versión 3 (más actual y recomendada) Actualizaciones de la versión 3
Versión 2 Actualizaciones de la versión 2
Versión 1 Actualizaciones de la versión 1

Los temas siguientes explican las diferencias entre las versiones, la compatibilidad de Docker Engine y cómo actualizar.

Matriz de compatibilidad

Hay varias versiones del formato de archivo Compose: 1, 2, 2.xy 3.x

Esta tabla muestra qué versiones de archivos de Compose son compatibles con versiones específicas de Docker.

Redactar formato de archivo Lanzamiento de Docker Engine
3,7 18.06.0+
3.6 18.02.0+
3,5 17.12.0+
3.4 17.09.0+
3.3 17.06.0+
3.2 17.04.0+
3.1 1.13.1+
3,0 1.13.0+
2.4 17.12.0+
2.3 17.06.0+
2.2 1.13.0+
2.1 1.12.0+
2.0 1.10.0+
1.0 1.9.1. +

Además de las versiones de formato de archivo de Compose que se muestran en la tabla, Compose en sí tiene un programa de lanzamiento, como se muestra en Redactar comunicados, pero las versiones de formato de archivo no necesariamente aumentan con cada lanzamiento. Por ejemplo, el formato de archivo Compose 3.0 se introdujo por primera vez en Redactar versión 1.10.0y versionado gradualmente en versiones posteriores.

¿Busca más detalles sobre la compatibilidad de Docker y Compose?

Recomendamos mantenerse actualizado con las versiones más recientes tanto como sea posible. Sin embargo, si está utilizando una versión anterior de Docker y desea determinar qué versión de Compose es compatible, consulte la Redactar notas de la versión. Cada conjunto de notas de la versión proporciona detalles sobre qué versiones de Docker Engine son compatibles, junto con las versiones de formato de archivo de Compose compatibles. (Ver también, la discusión en edición # 3404.)

Para obtener detalles sobre las versiones y cómo actualizar, consulte Control de versiones y actualización.

Control de versiones

Actualmente existen tres versiones del formato de archivo Compose:

  • Versión 1, el formato heredado. Esto se especifica omitiendo un version clave en la raíz del YAML.

  • Versión 2.x. Esto se especifica con un version: '2' o version: '2.1', etc., entrada en la raíz del YAML.

  • Versión 3.x, la versión más reciente y recomendada, diseñada para ser compatible con Compose y el modo de enjambre de Docker Engine. Esto se especifica con un version: '3' o version: '3.1', etc., entrada en la raíz del YAML.

Declaración v2 y v3

Nota: Al especificar la versión de archivo de Redacción que se utilizará, asegúrese de especificar tanto importante y menor números. Si no se da una versión menor, 0 se utiliza de forma predeterminada y no la última versión secundaria.

La Matriz de compatibilidad muestra las versiones de archivo de Compose asignadas a las versiones de Docker Engine.

Para mover su proyecto a una versión posterior, consulte la sección Actualización.

Nota: Si está utilizando varios archivos Compose o ampliando servicios, cada archivo debe ser de la misma versión; por ejemplo, no puede mezclar la versión 1 y 2 en un solo proyecto.

Varias cosas difieren según la versión que use:

  • La estructura y las claves de configuración permitidas
  • La versión mínima de Docker Engine que debe ejecutar
  • Comportamiento de Compose con respecto a la creación de redes

Estas diferencias se explican a continuación.

Versión 1

Los archivos de redacción que no declaran una versión se consideran “versión 1”. En esos archivos, todos los servicios se declaran en la raíz del documento.

La versión 1 es compatible con Redactar hasta 1.6.x. Quedará obsoleto en una futura versión de Compose.

Los archivos de la versión 1 no pueden declarar volúmenes con nombre, redes o argumentos de compilación.

Compose no aprovecha las redes cuando usa la versión 1: cada contenedor se coloca en el valor predeterminado bridge red y es accesible desde cualquier otro contenedor en su dirección IP. Debe utilizar enlaces para habilitar el descubrimiento entre contenedores.

Ejemplo:

web:
  build: .
  ports:
   - "5000:5000"
  volumes:
   - .:/code
  links:
   - redis
redis:
  image: redis

Versión 2

Redactar archivos usando la sintaxis de la versión 2 debe indicar el número de versión en la raíz del documento. Todos los servicios deben declararse bajo el services llave.

Los archivos de la versión 2 son compatibles con Redactar 1.6.0+ y requieren una versión Docker Engine 1.10.0+.

Los volúmenes con nombre se pueden declarar bajo el volumes clave, y las redes se pueden declarar bajo la networks llave.

De forma predeterminada, cada contenedor se une a una red predeterminada de toda la aplicación y es detectable en un nombre de host que es el mismo que el nombre del servicio. Esto significa que los enlaces son en gran medida innecesarios. Para obtener más detalles, consulte Redes en Redactar.

Nota: Al especificar la versión de archivo de Redacción que se utilizará, asegúrese de especificar tanto importante y menor números. Si no se da una versión menor, 0 se utiliza de forma predeterminada y no la última versión secundaria. Como resultado, las funciones agregadas en versiones posteriores no serán compatibles. Por ejemplo:

version: "2"

es equivalente a:

version: "2.0"

Ejemplo simple:

version: "2.4"
services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
     - .:/code
  redis:
    image: redis

Un ejemplo más extenso, definiendo volúmenes y redes:

version: "2.4"
services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
     - .:/code
    networks:
      - front-tier
      - back-tier
  redis:
    image: redis
    volumes:
      - redis-data:/var/lib/redis
    networks:
      - back-tier
volumes:
  redis-data:
    driver: local
networks:
  front-tier:
    driver: bridge
  back-tier:
    driver: bridge

Se agregaron varias otras opciones para admitir la creación de redes, como:

  • aliases

  • los depends_on La opción se puede utilizar en lugar de enlaces para indicar las dependencias entre los servicios y el orden de inicio.

    version: "2.4"
    services:
      web:
        build: .
        depends_on:
          - db
          - redis
      redis:
        image: redis
      db:
        image: postgres
    
  • ipv4_address, ipv6_address

La sustitución de variables también se agregó en la Versión 2.

Versión 2.1

Una actualización de la versión 2 que introduce nuevos parámetros solo disponible con la versión de Docker Engine 1.12.0+. Los archivos de la versión 2.1 son compatibles con Redactar 1.9.0+.

Introduce los siguientes parámetros adicionales:

  • link_local_ips
  • isolation en configuraciones de compilación y definiciones de servicios
  • labels para volúmenes y redes
  • name para volúmenes
  • userns_mode
  • healthcheck
  • sysctls
  • pids_limit
  • oom_kill_disable
  • cpu_period

Versión 2.2

Una actualización de la versión 2.1 que introduce nuevos parámetros solo disponible con la versión de Docker Engine 1.13.0+. Los archivos de la versión 2.2 son compatibles con Redactar 1.13.0+. Esta versión también le permite especificar números de báscula predeterminados dentro de la configuración del servicio.

Introduce los siguientes parámetros adicionales:

  • init
  • scale
  • cpu_rt_runtime y cpu_rt_period

Versión 2.3

Una actualización de la versión 2.2 que introduce nuevos parámetros solo disponible con la versión de Docker Engine 17.06.0+. Los archivos de la versión 2.3 son compatibles con Redactar 1.16.0+.

Introduce los siguientes parámetros adicionales:

  • target, extra_hosts y shm_size para configuraciones de construcción
  • start_period por healthchecks
  • “Sintaxis larga” para volúmenes
  • runtime para definiciones de servicios
  • device_cgroup_rules

Versión 2.4

Una actualización de la versión 2.3 que introduce nuevos parámetros solo disponible con la versión de Docker Engine 17.12.0+. Los archivos de la versión 2.4 son compatibles con Redactar 1.21.0+.

Introduce los siguientes parámetros adicionales:

  • platform para definiciones de servicios
  • Soporte para campos de extensión en la raíz de las definiciones de servicio, red y volumen

Versión 3

Diseñada para ser compatible con Compose y el modo de enjambre de Docker Engine, la versión 3 elimina varias opciones y agrega varias más.

  • Remoto: volume_driver, volumes_from, cpu_shares, cpu_quota, cpuset, mem_limit, memswap_limit, extends, group_add. Consulte la guía de actualización para saber cómo migrar desde estos. (Para obtener más información sobre extends, consulte Ampliación de servicios).

  • Agregado: implementar

Nota: Al especificar la versión de archivo de Redacción que se utilizará, asegúrese de especificar tanto importante y menor números. Si no se da una versión menor, 0 se utiliza de forma predeterminada y no la última versión secundaria. Como resultado, las funciones agregadas en versiones posteriores no serán compatibles. Por ejemplo:

version: "3"

es equivalente a:

version: "3.0"

Versión 3.3

Una actualización de la versión 3 que introduce nuevos parámetros solo disponible con la versión de Docker Engine 17.06.0+, y más alto.

Introduce los siguientes parámetros adicionales:

  • construir labels
  • credential_spec
  • configs
  • desplegar endpoint_mode

Versión 3.4

Una actualización de la versión 3 que introduce nuevos parámetros. Solo está disponible con la versión Docker Engine 17.09.0 y más alto.

Introduce los siguientes parámetros adicionales:

  • target y network en configuraciones de construcción
  • start_period por healthchecks
  • order para actualizar configuraciones
  • name para volúmenes

Versión 3.5

Una actualización de la versión 3 que introduce nuevos parámetros. Solo está disponible con la versión Docker Engine 17.12.0 y más alto.

Introduce los siguientes parámetros adicionales:

  • isolation en definiciones de servicios
  • name para redes, secretos y configuraciones
  • shm_size en configuraciones de construcción

Versión 3.6

Una actualización de la versión 3 que introduce nuevos parámetros. Solo está disponible con la versión Docker Engine 18.02.0 y más alto.

Introduce los siguientes parámetros adicionales:

  • tmpfs tamaño para tmpfs-tipo montajes

Versión 3.7

Una actualización de la versión 3 que introduce nuevos parámetros. Solo está disponible con la versión Docker Engine 18.06.0 y más alto.

Introduce los siguientes parámetros adicionales:

  • init en definiciones de servicios
  • rollback_config en configuraciones de implementación
  • Soporte para campos de extensión en la raíz de las definiciones de servicio, red, volumen, secreto y configuración

Actualización

Versión 2.xa 3.x

Entre las versiones 2.xy 3.x, la estructura del archivo Compose es la misma, pero se han eliminado varias opciones:

  • volume_driver: En lugar de configurar el controlador de volumen en el servicio, defina un volumen utilizando el nivel superior volumes opción y especifique el controlador allí.

    version: "3.7"
    services:
      db:
        image: postgres
        volumes:
          - data:/var/lib/postgresql/data
    volumes:
      data:
        driver: mydriver
    
  • volumes_from: Para compartir un volumen entre servicios, defínalo utilizando el nivel superior volumes opción y hacer referencia a ella desde cada servicio que la comparte utilizando el nivel de servicio volumes opción.

  • cpu_shares, cpu_quota, cpuset, mem_limit, memswap_limit: Estos han sido reemplazados por la clave de recursos en deploy. deploy La configuración solo tiene efecto cuando se usa docker stack deploy, y es ignorado por docker-compose.

  • extends: Esta opción ha sido eliminada para version: "3.x" Redactar archivos. (Para obtener más información, consulte Ampliación de servicios).
  • group_add: Esta opción ha sido eliminada para version: "3.x" Redactar archivos.
  • pids_limit: Esta opción no se ha introducido en version: "3.x" Redactar archivos.
  • link_local_ips en networks: Esta opción no se ha introducido en version: "3.x" Redactar archivos.

Versión 1 a 2.x

En la mayoría de los casos, pasar de la versión 1 a la 2 es un proceso muy simple:

  1. Sangra todo el archivo en un nivel y coloca un services: clave en la parte superior.
  2. Agrega un version: '2' línea en la parte superior del archivo.

Es más complicado si usa características de configuración particulares:

  • dockerfile: Esto ahora vive bajo el build llave:

    build:
      context: .
      dockerfile: Dockerfile-alternate
    
  • log_driver, log_opt: Estos ahora viven bajo el logging llave:

    logging:
      driver: syslog
      options:
        syslog-address: "tcp://192.168.0.42:123"
    
  • links con variables de entorno: como se documenta en la referencia de variables de entorno, las variables de entorno creadas por enlaces han quedado obsoletas durante algún tiempo. En el nuevo sistema de red de Docker, se han eliminado. Debe conectarse directamente al nombre de host adecuado o establecer la variable de entorno relevante usted mismo, utilizando el enlace nombre de host:

    web:
      links:
        - db
      environment:
        - DB_PORT=tcp://db:5432
    
  • external_links: Compose usa redes Docker cuando se ejecutan proyectos de la versión 2, por lo que los enlaces se comportan de manera ligeramente diferente. En particular, dos contenedores deben estar conectados a al menos una red en común para poder comunicarse, incluso si están explícitamente vinculados entre sí.

    Conecte el contenedor externo a la red predeterminada de su aplicación o conecte tanto el contenedor externo como los contenedores de su servicio a una red externa.

  • net: Esto ahora se reemplaza por network_mode:

    net: host    ->  network_mode: host
    net: bridge  ->  network_mode: bridge
    net: none    ->  network_mode: none
    

    Si estas usando net: "container:[service name]", ahora debes usar network_mode: "service:[service name]" en lugar de.

    net: "container:web"  ->  network_mode: "service:web"
    

    Si estas usando net: "container:[container name/id]", el valor no necesita cambiar.

    net: "container:cont-name"  ->  network_mode: "container:cont-name"
    net: "container:abc12345"   ->  network_mode: "container:abc12345"
    
  • volumes con volúmenes con nombre: estos ahora deben declararse explícitamente en un nivel superior volumes sección de su archivo Redactar. Si un servicio monta un volumen con nombre llamado data, debes declarar un data volumen en su nivel superior volumes sección. El archivo completo podría verse así:

    version: "2.4"
    services:
      db:
        image: postgres
        volumes:
          - data:/var/lib/postgresql/data
    volumes:
      data: 
    

    De forma predeterminada, Compose crea un volumen cuyo nombre tiene como prefijo el nombre de su proyecto. Si quieres que solo se llame data, declararlo como externo:

    volumes:
      data:
        external: true
    

Modo de compatibilidad

docker-compose 1.20.0 introduce un nuevo --compatibility bandera diseñada para ayudar a los desarrolladores a realizar la transición a la versión 3 más fácilmente. Cuando está habilitado, docker-compose lee el deploy sección de la definición de cada servicio e intenta traducirlo al parámetro equivalente de la versión 2. Actualmente, se traducen las siguientes claves de implementación:

  • límites de recursos y reservas de memoria
  • réplicas
  • reiniciar_políticacondition y max_attempts

Todas las demás claves se ignoran y producen una advertencia si están presentes. Puede revisar la configuración que se utilizará para implementar utilizando el --compatibility bandera con el config mando.

¡No use esto en producción!

Recomendamos no usar --compatibility modo en producción. Debido a que la configuración resultante es solo una aproximación utilizando propiedades del modo que no es Swarm, puede producir resultados inesperados.

Redactar referencias de formato de archivo

  • Redactar versión de archivo 3
  • Redactar archivo versión 2
  • Redactar versión de archivo 1

higo, composición, componer, versiones, mejorando, estibador