---
title: Building with Bake from a Compose file
description: Build your compose services with Bake
keywords: build, buildx, bake, buildkit, compose, yaml
aliases:
- /build/customize/bake/compose-file/
---
Bake supports the [Compose file format](/reference/compose-file/_index.md)
to parse a Compose file and translate each service to a [target](reference.md#target).
```yaml
# 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
```
```console
$ docker buildx bake --print
```
```json
{
"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"]
}
}
}
```
The compose format has some limitations compared to the HCL format:
- Specifying variables or global scope attributes is not yet supported
- `inherits` service field is not supported, but you can use [YAML anchors](/reference/compose-file/fragments.md)
to reference other services, as demonstrated in the previous example with `&build-dev`.
## `.env` file
You can declare default environment variables in an environment file named
`.env`. This file will be loaded from the current working directory,
where the command is executed and applied to compose definitions passed
with `-f`.
```yaml
# compose.yaml
services:
webapp:
image: docker.io/username/webapp:${TAG:-v1.0.0}
build:
dockerfile: Dockerfile
```
```sh
# .env
TAG=v1.1.0
```
```console
$ docker buildx bake --print