mirror of https://github.com/docker/buildx.git
				
				
				
			docs: rework bake compose file definition
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									ff9517cbf0
								
							
						
					
					
						commit
						f40c2dbb86
					
				| 
						 | 
					@ -0,0 +1,222 @@
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					title: "Building from Compose file"
 | 
				
			||||||
 | 
					keywords: build, buildx, bake, buildkit, compose
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Specification
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Bake uses the [compose-spec](https://docs.docker.com/compose/compose-file/) to
 | 
				
			||||||
 | 
					parse a compose file and translate each service to a [target](file-definition.md#target).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```yaml
 | 
				
			||||||
 | 
					# docker-compose.yml
 | 
				
			||||||
 | 
					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": [
 | 
				
			||||||
 | 
					        "docker.io/username/webapp:cache"
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					      "cache-to": [
 | 
				
			||||||
 | 
					        "docker.io/username/webapp:cache"
 | 
				
			||||||
 | 
					      ]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "webapp-release": {
 | 
				
			||||||
 | 
					      "context": ".",
 | 
				
			||||||
 | 
					      "dockerfile": "Dockerfile.webapp",
 | 
				
			||||||
 | 
					      "tags": [
 | 
				
			||||||
 | 
					        "docker.io/username/webapp:latest"
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					      "cache-from": [
 | 
				
			||||||
 | 
					        "docker.io/username/webapp:cache"
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					      "cache-to": [
 | 
				
			||||||
 | 
					        "docker.io/username/webapp:cache"
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					      "platforms": [
 | 
				
			||||||
 | 
					        "linux/amd64",
 | 
				
			||||||
 | 
					        "linux/arm64"
 | 
				
			||||||
 | 
					      ]
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Unlike the [HCL format](file-definition.md#hcl-definition), there are some
 | 
				
			||||||
 | 
					limitations with the compose format:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Specifying variables or global scope attributes is not yet supported
 | 
				
			||||||
 | 
					* `inherits` service field is not supported, but you can use [YAML anchors](https://docs.docker.com/compose/compose-file/#fragments) to reference other services like the example above
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Extension field with `x-bake`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Even if some fields are not (yet) available in the compose specification, you
 | 
				
			||||||
 | 
					can use the [special extension](https://docs.docker.com/compose/compose-file/#extension)
 | 
				
			||||||
 | 
					field `x-bake` in your compose file to evaluate extra fields:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```yaml
 | 
				
			||||||
 | 
					# docker-compose.yml
 | 
				
			||||||
 | 
					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
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```console
 | 
				
			||||||
 | 
					$ docker buildx bake --print
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					```json
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  "group": {
 | 
				
			||||||
 | 
					    "default": {
 | 
				
			||||||
 | 
					      "targets": [
 | 
				
			||||||
 | 
					        "aws",
 | 
				
			||||||
 | 
					        "addon"
 | 
				
			||||||
 | 
					      ]
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "target": {
 | 
				
			||||||
 | 
					    "addon": {
 | 
				
			||||||
 | 
					      "context": ".",
 | 
				
			||||||
 | 
					      "dockerfile": "./Dockerfile",
 | 
				
			||||||
 | 
					      "args": {
 | 
				
			||||||
 | 
					        "CT_ECR": "foo",
 | 
				
			||||||
 | 
					        "CT_TAG": "bar"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "tags": [
 | 
				
			||||||
 | 
					        "ct-addon:foo",
 | 
				
			||||||
 | 
					        "ct-addon:alp"
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					      "cache-from": [
 | 
				
			||||||
 | 
					        "user/app:cache",
 | 
				
			||||||
 | 
					        "type=local,src=path/to/cache"
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					      "cache-to": [
 | 
				
			||||||
 | 
					        "type=local,dest=path/to/cache"
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					      "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
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Complete list of valid fields for `x-bake`:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* `cache-from`
 | 
				
			||||||
 | 
					* `cache-to`
 | 
				
			||||||
 | 
					* `no-cache`
 | 
				
			||||||
 | 
					* `no-cache-filter`
 | 
				
			||||||
 | 
					* `output`
 | 
				
			||||||
 | 
					* `platforms`
 | 
				
			||||||
 | 
					* `pull`
 | 
				
			||||||
 | 
					* `secret`
 | 
				
			||||||
 | 
					* `ssh`
 | 
				
			||||||
 | 
					* `tags`
 | 
				
			||||||
| 
						 | 
					@ -1,125 +0,0 @@
 | 
				
			||||||
---
 | 
					 | 
				
			||||||
title: "Extension field with Compose"
 | 
					 | 
				
			||||||
keywords: build, buildx, bake, buildkit, compose
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[Special extension](https://docs.docker.com/compose/compose-file/#extension)
 | 
					 | 
				
			||||||
field `x-bake` can be used in your compose file to evaluate fields that are not
 | 
					 | 
				
			||||||
(yet) available in the [build definition](https://docs.docker.com/compose/compose-file/build/#build-definition).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```yaml
 | 
					 | 
				
			||||||
# docker-compose.yml
 | 
					 | 
				
			||||||
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
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```console
 | 
					 | 
				
			||||||
$ docker buildx bake --print
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
```json
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  "group": {
 | 
					 | 
				
			||||||
    "default": {
 | 
					 | 
				
			||||||
      "targets": [
 | 
					 | 
				
			||||||
        "aws",
 | 
					 | 
				
			||||||
        "addon"
 | 
					 | 
				
			||||||
      ]
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "target": {
 | 
					 | 
				
			||||||
    "addon": {
 | 
					 | 
				
			||||||
      "context": ".",
 | 
					 | 
				
			||||||
      "dockerfile": "./Dockerfile",
 | 
					 | 
				
			||||||
      "args": {
 | 
					 | 
				
			||||||
        "CT_ECR": "foo",
 | 
					 | 
				
			||||||
        "CT_TAG": "bar"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "tags": [
 | 
					 | 
				
			||||||
        "ct-addon:foo",
 | 
					 | 
				
			||||||
        "ct-addon:alp"
 | 
					 | 
				
			||||||
      ],
 | 
					 | 
				
			||||||
      "cache-from": [
 | 
					 | 
				
			||||||
        "user/app:cache",
 | 
					 | 
				
			||||||
        "type=local,src=path/to/cache"
 | 
					 | 
				
			||||||
      ],
 | 
					 | 
				
			||||||
      "cache-to": [
 | 
					 | 
				
			||||||
        "type=local,dest=path/to/cache"
 | 
					 | 
				
			||||||
      ],
 | 
					 | 
				
			||||||
      "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
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Complete list of valid fields for `x-bake`:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* `cache-from`
 | 
					 | 
				
			||||||
* `cache-to`
 | 
					 | 
				
			||||||
* `no-cache`
 | 
					 | 
				
			||||||
* `no-cache-filter`
 | 
					 | 
				
			||||||
* `output`
 | 
					 | 
				
			||||||
* `platforms`
 | 
					 | 
				
			||||||
* `pull`
 | 
					 | 
				
			||||||
* `secret`
 | 
					 | 
				
			||||||
* `ssh`
 | 
					 | 
				
			||||||
* `tags`
 | 
					 | 
				
			||||||
| 
						 | 
					@ -295,19 +295,10 @@ target "db" {
 | 
				
			||||||
```yaml
 | 
					```yaml
 | 
				
			||||||
# docker-compose.yml
 | 
					# docker-compose.yml
 | 
				
			||||||
services:
 | 
					services:
 | 
				
			||||||
  webapp-dev: &dev
 | 
					  webapp:
 | 
				
			||||||
 | 
					    image: docker.io/username/webapp:latest
 | 
				
			||||||
    build:
 | 
					    build:
 | 
				
			||||||
      dockerfile: Dockerfile.webapp
 | 
					      dockerfile: Dockerfile.webapp
 | 
				
			||||||
      tags:
 | 
					 | 
				
			||||||
        - docker.io/username/webapp:latest
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  webapp-release:
 | 
					 | 
				
			||||||
    <<: *dev
 | 
					 | 
				
			||||||
    build:
 | 
					 | 
				
			||||||
      x-bake:
 | 
					 | 
				
			||||||
        platforms:
 | 
					 | 
				
			||||||
          - linux/amd64
 | 
					 | 
				
			||||||
          - linux/arm64
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  db:
 | 
					  db:
 | 
				
			||||||
    image: docker.io/username/db
 | 
					    image: docker.io/username/db
 | 
				
			||||||
| 
						 | 
					@ -315,18 +306,9 @@ services:
 | 
				
			||||||
      dockerfile: Dockerfile.db
 | 
					      dockerfile: Dockerfile.db
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
> **Limitations**
 | 
					> **Note**
 | 
				
			||||||
>
 | 
					>
 | 
				
			||||||
> Bake uses the [compose-spec](https://docs.docker.com/compose/compose-file/) to
 | 
					> See [Building from Compose file](compose-file.md) page for more details.
 | 
				
			||||||
> parse a compose file. Some fields are not (yet) available, but you can use
 | 
					 | 
				
			||||||
> the [special extension field `x-bake`](compose-xbake.md).
 | 
					 | 
				
			||||||
>
 | 
					 | 
				
			||||||
> `inherits` service field is also not supported. Use [YAML anchors](https://docs.docker.com/compose/compose-file/#fragments)
 | 
					 | 
				
			||||||
> to reference other services.
 | 
					 | 
				
			||||||
>
 | 
					 | 
				
			||||||
> Specifying variables or global scope attributes is not yet supported for
 | 
					 | 
				
			||||||
> compose files.
 | 
					 | 
				
			||||||
{: .warning }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Remote definition
 | 
					## Remote definition
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -36,4 +36,4 @@ and also allows better code reuse, different target groups and extended features
 | 
				
			||||||
* [Configuring builds](configuring-build.md)
 | 
					* [Configuring builds](configuring-build.md)
 | 
				
			||||||
* [User defined HCL functions](hcl-funcs.md)
 | 
					* [User defined HCL functions](hcl-funcs.md)
 | 
				
			||||||
* [Defining additional build contexts and linking targets](build-contexts.md)
 | 
					* [Defining additional build contexts and linking targets](build-contexts.md)
 | 
				
			||||||
* [Extension field with Compose](compose-xbake.md)
 | 
					* [Building from Compose file](compose-file.md)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue