Nuestro equipo de expertos despúes de varios días de investigación y recopilar de datos, dimos con la solución, deseamos que resulte útil para ti para tu proyecto.
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'
oversion: '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'
oversion: '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 servicioslabels
para volúmenes y redesname
para volúmenesuserns_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
ycpu_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
yshm_size
para configuraciones de construcciónstart_period
porhealthchecks
- “Sintaxis larga” para volúmenes
runtime
para definiciones de serviciosdevice_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 sobreextends
, 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
ynetwork
en configuraciones de construcciónstart_period
porhealthchecks
order
para actualizar configuracionesname
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 serviciosname
para redes, secretos y configuracionesshm_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 paratmpfs
-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 serviciosrollback_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 superiorvolumes
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 superiorvolumes
opción y hacer referencia a ella desde cada servicio que la comparte utilizando el nivel de serviciovolumes
opción. -
cpu_shares
,cpu_quota
,cpuset
,mem_limit
,memswap_limit
: Estos han sido reemplazados por la clave de recursos endeploy
.deploy
La configuración solo tiene efecto cuando se usadocker stack deploy
, y es ignorado pordocker-compose
. extends
: Esta opción ha sido eliminada paraversion: "3.x"
Redactar archivos. (Para obtener más información, consulte Ampliación de servicios).group_add
: Esta opción ha sido eliminada paraversion: "3.x"
Redactar archivos.pids_limit
: Esta opción no se ha introducido enversion: "3.x"
Redactar archivos.link_local_ips
ennetworks
: Esta opción no se ha introducido enversion: "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:
- Sangra todo el archivo en un nivel y coloca un
services:
clave en la parte superior. - 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 elbuild
llave:build: context: . dockerfile: Dockerfile-alternate
-
log_driver
,log_opt
: Estos ahora viven bajo ellogging
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 usarnetwork_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 superiorvolumes
sección de su archivo Redactar. Si un servicio monta un volumen con nombre llamadodata
, debes declarar undata
volumen en su nivel superiorvolumes
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ítica
condition
ymax_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
Tienes la opción de sustentar nuestra labor dejando un comentario o dejando una valoración te damos la bienvenida.