Construire avec Bake à partir d'un fichier Compose
Bake prend en charge le format de fichier Compose pour analyser un fichier Compose et traduire chaque service en une cible.
# compose.yaml
services:
webapp-dev:
build: &build-dev
dockerfile: Dockerfile.webapp
tags:
- docker.io/username/webapp:latest
cache_from:
- docker.io/username/webapp:cache
cache_to:
- docker.io/username/webapp:cache
webapp-release:
build:
<<: *build-dev
x-bake:
platforms:
- linux/amd64
- linux/arm64
db:
image: docker.io/username/db
build:
dockerfile: Dockerfile.db$ docker buildx bake --print
{
"group": {
"default": {
"targets": ["db", "webapp-dev", "webapp-release"]
}
},
"target": {
"db": {
"context": ".",
"dockerfile": "Dockerfile.db",
"tags": ["docker.io/username/db"]
},
"webapp-dev": {
"context": ".",
"dockerfile": "Dockerfile.webapp",
"tags": ["docker.io/username/webapp:latest"],
"cache-from": [
{
"ref": "docker.io/username/webapp:cache",
"type": "registry"
}
],
"cache-to": [
{
"ref": "docker.io/username/webapp:cache",
"type": "registry"
}
]
},
"webapp-release": {
"context": ".",
"dockerfile": "Dockerfile.webapp",
"tags": ["docker.io/username/webapp:latest"],
"cache-from": [
{
"ref": "docker.io/username/webapp:cache",
"type": "registry"
}
],
"cache-to": [
{
"ref": "docker.io/username/webapp:cache",
"type": "registry"
}
],
"platforms": ["linux/amd64", "linux/arm64"]
}
}
}Le format compose présente certaines limitations par rapport au format HCL :
- La spécification de variables ou d'attributs de portée globale n'est pas encore prise en charge
- Le champ de service
inheritsn'est pas pris en charge, mais vous pouvez utiliser les ancres YAML pour référencer d'autres services, comme démontré dans l'exemple précédent avec&build-dev.
Fichier .env
Vous pouvez déclarer des variables d'environnement par défaut dans un fichier d'environnement nommé
.env. Ce fichier sera chargé depuis le répertoire de travail courant,
où la commande est exécutée et appliquée aux définitions de compose passées
avec -f.
# compose.yaml
services:
webapp:
image: docker.io/username/webapp:${TAG:-v1.0.0}
build:
dockerfile: Dockerfile# .env
TAG=v1.1.0$ docker buildx bake --print
{
"group": {
"default": {
"targets": ["webapp"]
}
},
"target": {
"webapp": {
"context": ".",
"dockerfile": "Dockerfile",
"tags": ["docker.io/username/webapp:v1.1.0"]
}
}
}NoteLes variables d'environnement système prévalent sur les variables d'environnement du fichier
.env.
Champ d'extension avec x-bake
Lorsque certains champs ne sont pas disponibles dans la spécification compose, vous pouvez utiliser
le champ
d'extension spécial
x-bake dans votre fichier compose pour évaluer des champs supplémentaires :
# compose.yaml
services:
addon:
image: ct-addon:bar
build:
context: .
dockerfile: ./Dockerfile
args:
CT_ECR: foo
CT_TAG: bar
x-bake:
tags:
- ct-addon:foo
- ct-addon:alp
platforms:
- linux/amd64
- linux/arm64
cache-from:
- user/app:cache
- type=local,src=path/to/cache
cache-to:
- type=local,dest=path/to/cache
pull: true
aws:
image: ct-fake-aws:bar
build:
dockerfile: ./aws.Dockerfile
args:
CT_ECR: foo
CT_TAG: bar
x-bake:
secret:
- id=mysecret,src=./secret
- id=mysecret2,src=./secret2
platforms: linux/arm64
output: type=docker
no-cache: true$ docker buildx bake --print
{
"group": {
"default": {
"targets": ["addon", "aws"]
}
},
"target": {
"addon": {
"context": ".",
"dockerfile": "./Dockerfile",
"args": {
"CT_ECR": "foo",
"CT_TAG": "bar"
},
"tags": ["ct-addon:foo", "ct-addon:alp"],
"cache-from": [
{
"ref": "user/app:cache",
"type": "registry"
},
{
"src": "path/to/cache",
"type": "local"
}
],
"cache-to": [
{
"dest": "path/to/cache",
"type": "local"
}
],
"platforms": ["linux/amd64", "linux/arm64"],
"pull": true
},
"aws": {
"context": ".",
"dockerfile": "./aws.Dockerfile",
"args": {
"CT_ECR": "foo",
"CT_TAG": "bar"
},
"tags": ["ct-fake-aws:bar"],
"secret": [
{
"id": "mysecret",
"src": "./secret"
},
{
"id": "mysecret2",
"src": "./secret2"
}
],
"platforms": ["linux/arm64"],
"output": [
{
"type": "docker"
}
],
"no-cache": true
}
}
}Liste complète des champs valides pour x-bake:
cache-fromcache-tocontextsno-cacheno-cache-filteroutputplatformspullsecretsshtags