docs: examples moved to docs website
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									6e95f19fb8
								
							
						
					
					
						commit
						d4c14fd006
					
				
							
								
								
									
										35
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								README.md
									
									
									
									
									
								
							@ -18,20 +18,7 @@ ___
 | 
				
			|||||||
* [Usage](#usage)
 | 
					* [Usage](#usage)
 | 
				
			||||||
  * [Git context](#git-context)
 | 
					  * [Git context](#git-context)
 | 
				
			||||||
  * [Path context](#path-context)
 | 
					  * [Path context](#path-context)
 | 
				
			||||||
* [Advanced usage](#advanced-usage)
 | 
					* [Examples](#examples)
 | 
				
			||||||
  * [Multi-platform image](docs/advanced/multi-platform.md)
 | 
					 | 
				
			||||||
  * [Secrets](docs/advanced/secrets.md)
 | 
					 | 
				
			||||||
  * [Isolated builders](docs/advanced/isolated-builders.md)
 | 
					 | 
				
			||||||
  * [Push to multi-registries](docs/advanced/push-multi-registries.md)
 | 
					 | 
				
			||||||
  * [Copy between registries](docs/advanced/copy-between-registries.md)
 | 
					 | 
				
			||||||
  * [Cache](docs/advanced/cache.md)
 | 
					 | 
				
			||||||
  * [Local registry](docs/advanced/local-registry.md)
 | 
					 | 
				
			||||||
  * [Export image to Docker](docs/advanced/export-docker.md)
 | 
					 | 
				
			||||||
  * [Share built image between jobs](docs/advanced/share-image-jobs.md)
 | 
					 | 
				
			||||||
  * [Test your image before pushing it](docs/advanced/test-before-push.md)
 | 
					 | 
				
			||||||
  * [Named contexts](docs/advanced/named-contexts.md)
 | 
					 | 
				
			||||||
  * [Handle tags and labels](docs/advanced/tags-labels.md)
 | 
					 | 
				
			||||||
  * [Update Docker Hub repo description](docs/advanced/dockerhub-desc.md)
 | 
					 | 
				
			||||||
* [Customizing](#customizing)
 | 
					* [Customizing](#customizing)
 | 
				
			||||||
  * [inputs](#inputs)
 | 
					  * [inputs](#inputs)
 | 
				
			||||||
  * [outputs](#outputs)
 | 
					  * [outputs](#outputs)
 | 
				
			||||||
@ -129,8 +116,8 @@ to the default Git context:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Building from the current repository automatically uses the [GitHub Token](https://docs.github.com/en/actions/security-guides/automatic-token-authentication),
 | 
					Building from the current repository automatically uses the [GitHub Token](https://docs.github.com/en/actions/security-guides/automatic-token-authentication),
 | 
				
			||||||
so it does not need to be passed. If you want to authenticate against another
 | 
					so it does not need to be passed. If you want to authenticate against another
 | 
				
			||||||
private repository, you have to use a [secret](docs/advanced/secrets.md) named
 | 
					private repository, you have to use a [secret](https://docs.docker.com/build/ci/github-actions/examples/#secrets)
 | 
				
			||||||
`GIT_AUTH_TOKEN` to be able to authenticate against it with Buildx:
 | 
					named `GIT_AUTH_TOKEN` to be able to authenticate against it with Buildx:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```yaml
 | 
					```yaml
 | 
				
			||||||
      -
 | 
					      -
 | 
				
			||||||
@ -181,21 +168,9 @@ jobs:
 | 
				
			|||||||
          tags: user/app:latest
 | 
					          tags: user/app:latest
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Advanced usage
 | 
					## Examples
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* [Multi-platform image](docs/advanced/multi-platform.md)
 | 
					See https://docs.docker.com/build/ci/github-actions/examples/.
 | 
				
			||||||
* [Secrets](docs/advanced/secrets.md)
 | 
					 | 
				
			||||||
* [Isolated builders](docs/advanced/isolated-builders.md)
 | 
					 | 
				
			||||||
* [Push to multi-registries](docs/advanced/push-multi-registries.md)
 | 
					 | 
				
			||||||
* [Copy between registries](docs/advanced/copy-between-registries.md)
 | 
					 | 
				
			||||||
* [Cache](docs/advanced/cache.md)
 | 
					 | 
				
			||||||
* [Local registry](docs/advanced/local-registry.md)
 | 
					 | 
				
			||||||
* [Export image to Docker](docs/advanced/export-docker.md)
 | 
					 | 
				
			||||||
* [Share built image between jobs](docs/advanced/share-image-jobs.md)
 | 
					 | 
				
			||||||
* [Test your image before pushing it](docs/advanced/test-before-push.md)
 | 
					 | 
				
			||||||
* [Named contexts](docs/advanced/named-contexts.md)
 | 
					 | 
				
			||||||
* [Handle tags and labels](docs/advanced/tags-labels.md)
 | 
					 | 
				
			||||||
* [Update Docker Hub repo description](docs/advanced/dockerhub-desc.md)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Customizing
 | 
					## Customizing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,207 +1,3 @@
 | 
				
			|||||||
# Cache
 | 
					# Cache
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* [Inline cache](#inline-cache)
 | 
					This page has moved to [Docker Docs website](https://docs.docker.com/build/ci/github-actions/examples/#cache)
 | 
				
			||||||
* [Registry cache](#registry-cache)
 | 
					 | 
				
			||||||
* [GitHub cache](#github-cache)
 | 
					 | 
				
			||||||
  * [Cache backend API](#cache-backend-api)
 | 
					 | 
				
			||||||
  * [Local cache](#local-cache)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
> **Note**
 | 
					 | 
				
			||||||
>
 | 
					 | 
				
			||||||
> See [our guide](https://github.com/docker/buildx/blob/master/docs/guides/cache/index.md)
 | 
					 | 
				
			||||||
> for more details about cache storage backends.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Inline cache
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
In most cases you want to use the [`type=inline` cache exporter](https://github.com/docker/buildx/blob/master/docs/guides/cache/inline.md).
 | 
					 | 
				
			||||||
However, note that the `inline` cache exporter only supports `min` cache mode. To enable `max` cache mode, push the
 | 
					 | 
				
			||||||
image and the cache separately by using the `registry` cache exporter as shown in the [next example](#registry-cache).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```yaml
 | 
					 | 
				
			||||||
name: ci
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  push:
 | 
					 | 
				
			||||||
    branches:
 | 
					 | 
				
			||||||
      - 'main'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  docker:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Checkout
 | 
					 | 
				
			||||||
        uses: actions/checkout@v3
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Set up Docker Buildx
 | 
					 | 
				
			||||||
        uses: docker/setup-buildx-action@v2
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Login to Docker Hub
 | 
					 | 
				
			||||||
        uses: docker/login-action@v2
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          username: ${{ secrets.DOCKERHUB_USERNAME }}
 | 
					 | 
				
			||||||
          password: ${{ secrets.DOCKERHUB_TOKEN }}
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Build and push
 | 
					 | 
				
			||||||
        uses: docker/build-push-action@v3
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          context: .
 | 
					 | 
				
			||||||
          push: true
 | 
					 | 
				
			||||||
          tags: user/app:latest
 | 
					 | 
				
			||||||
          cache-from: type=registry,ref=user/app:latest
 | 
					 | 
				
			||||||
          cache-to: type=inline
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Registry cache
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
You can import/export cache from a cache manifest or (special) image configuration on the registry with the
 | 
					 | 
				
			||||||
[`type=registry` cache exporter](https://github.com/docker/buildx/blob/master/docs/guides/cache/registry.md).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```yaml
 | 
					 | 
				
			||||||
name: ci
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  push:
 | 
					 | 
				
			||||||
    branches:
 | 
					 | 
				
			||||||
      - 'main'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  docker:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Checkout
 | 
					 | 
				
			||||||
        uses: actions/checkout@v3
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Set up Docker Buildx
 | 
					 | 
				
			||||||
        uses: docker/setup-buildx-action@v2
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Login to Docker Hub
 | 
					 | 
				
			||||||
        uses: docker/login-action@v2
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          username: ${{ secrets.DOCKERHUB_USERNAME }}
 | 
					 | 
				
			||||||
          password: ${{ secrets.DOCKERHUB_TOKEN }}
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Build and push
 | 
					 | 
				
			||||||
        uses: docker/build-push-action@v3
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          context: .
 | 
					 | 
				
			||||||
          push: true
 | 
					 | 
				
			||||||
          tags: user/app:latest
 | 
					 | 
				
			||||||
          cache-from: type=registry,ref=user/app:buildcache
 | 
					 | 
				
			||||||
          cache-to: type=registry,ref=user/app:buildcache,mode=max
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## GitHub cache
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Cache backend API
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
> **Warning**
 | 
					 | 
				
			||||||
>
 | 
					 | 
				
			||||||
> This cache exporter is considered EXPERIMENTAL until further notice. Please
 | 
					 | 
				
			||||||
> provide feedback on [BuildKit repository](https://github.com/moby/buildkit)
 | 
					 | 
				
			||||||
> if you encounter any issues.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[GitHub Actions cache exporter](https://github.com/docker/buildx/blob/master/docs/guides/cache/gha.md)
 | 
					 | 
				
			||||||
backend uses the [GitHub Cache API](https://github.com/tonistiigi/go-actions-cache/blob/master/api.md)
 | 
					 | 
				
			||||||
to fetch and upload cache blobs. That's why this type of cache should be
 | 
					 | 
				
			||||||
exclusively used in a GitHub Action workflow as the `url` (`$ACTIONS_CACHE_URL`)
 | 
					 | 
				
			||||||
and `token` (`$ACTIONS_RUNTIME_TOKEN`) attributes are populated when a workflow
 | 
					 | 
				
			||||||
is started.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```yaml
 | 
					 | 
				
			||||||
name: ci
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  push:
 | 
					 | 
				
			||||||
    branches:
 | 
					 | 
				
			||||||
      - 'main'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  docker:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Checkout
 | 
					 | 
				
			||||||
        uses: actions/checkout@v3
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Set up Docker Buildx
 | 
					 | 
				
			||||||
        uses: docker/setup-buildx-action@v2
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Login to Docker Hub
 | 
					 | 
				
			||||||
        uses: docker/login-action@v2
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          username: ${{ secrets.DOCKERHUB_USERNAME }}
 | 
					 | 
				
			||||||
          password: ${{ secrets.DOCKERHUB_TOKEN }}
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Build and push
 | 
					 | 
				
			||||||
        uses: docker/build-push-action@v3
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          context: .
 | 
					 | 
				
			||||||
          push: true
 | 
					 | 
				
			||||||
          tags: user/app:latest
 | 
					 | 
				
			||||||
          cache-from: type=gha
 | 
					 | 
				
			||||||
          cache-to: type=gha,mode=max
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Local cache
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
> **Warning**
 | 
					 | 
				
			||||||
>
 | 
					 | 
				
			||||||
> At the moment caches are copied over the existing cache, so it [keeps growing](https://github.com/docker/build-push-action/issues/252).
 | 
					 | 
				
			||||||
> The `Move cache` step is used as a workaround (see [moby/buildkit#1896](https://github.com/moby/buildkit/issues/1896) for more info).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
You can also leverage [GitHub cache](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows)
 | 
					 | 
				
			||||||
using the [actions/cache](https://github.com/actions/cache) and [`type=local` cache exporter](https://github.com/docker/buildx/blob/master/docs/guides/cache/local.md)
 | 
					 | 
				
			||||||
with this action:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```yaml
 | 
					 | 
				
			||||||
name: ci
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  push:
 | 
					 | 
				
			||||||
    branches:
 | 
					 | 
				
			||||||
      - 'main'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  docker:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Checkout
 | 
					 | 
				
			||||||
        uses: actions/checkout@v3
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Set up Docker Buildx
 | 
					 | 
				
			||||||
        uses: docker/setup-buildx-action@v2
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Cache Docker layers
 | 
					 | 
				
			||||||
        uses: actions/cache@v3
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          path: /tmp/.buildx-cache
 | 
					 | 
				
			||||||
          key: ${{ runner.os }}-buildx-${{ github.sha }}
 | 
					 | 
				
			||||||
          restore-keys: |
 | 
					 | 
				
			||||||
            ${{ runner.os }}-buildx-
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Login to Docker Hub
 | 
					 | 
				
			||||||
        uses: docker/login-action@v2
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          username: ${{ secrets.DOCKERHUB_USERNAME }}
 | 
					 | 
				
			||||||
          password: ${{ secrets.DOCKERHUB_TOKEN }}
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Build and push
 | 
					 | 
				
			||||||
        uses: docker/build-push-action@v3
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          context: .
 | 
					 | 
				
			||||||
          push: true
 | 
					 | 
				
			||||||
          tags: user/app:latest
 | 
					 | 
				
			||||||
          cache-from: type=local,src=/tmp/.buildx-cache
 | 
					 | 
				
			||||||
          cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        # Temp fix
 | 
					 | 
				
			||||||
        # https://github.com/docker/build-push-action/issues/252
 | 
					 | 
				
			||||||
        # https://github.com/moby/buildkit/issues/1896
 | 
					 | 
				
			||||||
        name: Move cache
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          rm -rf /tmp/.buildx-cache
 | 
					 | 
				
			||||||
          mv /tmp/.buildx-cache-new /tmp/.buildx-cache
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -1,58 +1,3 @@
 | 
				
			|||||||
# Copy images between registries
 | 
					# Copy images between registries
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[Multi-platform images](https://docs.docker.com/build/building/multi-platform/)
 | 
					This page has moved to [Docker Docs website](https://docs.docker.com/build/ci/github-actions/examples/#copy-images-between-registries)
 | 
				
			||||||
built using Buildx can be copied from one registry to another using the
 | 
					 | 
				
			||||||
[`imagetools create` command](https://docs.docker.com/engine/reference/commandline/buildx_imagetools_create/):
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```yaml
 | 
					 | 
				
			||||||
name: ci
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  push:
 | 
					 | 
				
			||||||
    branches:
 | 
					 | 
				
			||||||
      - 'main'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  docker:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      - 
 | 
					 | 
				
			||||||
        name: Checkout
 | 
					 | 
				
			||||||
        uses: actions/checkout@v3
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Set up QEMU
 | 
					 | 
				
			||||||
        uses: docker/setup-qemu-action@v2
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Set up Docker Buildx
 | 
					 | 
				
			||||||
        uses: docker/setup-buildx-action@v2
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Login to Docker Hub
 | 
					 | 
				
			||||||
        uses: docker/login-action@v2
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          username: ${{ secrets.DOCKERHUB_USERNAME }}
 | 
					 | 
				
			||||||
          password: ${{ secrets.DOCKERHUB_TOKEN }}
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Login to GitHub Container Registry
 | 
					 | 
				
			||||||
        uses: docker/login-action@v2
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          registry: ghcr.io
 | 
					 | 
				
			||||||
          username: ${{ github.repository_owner }}
 | 
					 | 
				
			||||||
          password: ${{ secrets.GITHUB_TOKEN }}
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Build and push
 | 
					 | 
				
			||||||
        uses: docker/build-push-action@v3
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          context: .
 | 
					 | 
				
			||||||
          platforms: linux/amd64,linux/arm64
 | 
					 | 
				
			||||||
          push: true
 | 
					 | 
				
			||||||
          tags: |
 | 
					 | 
				
			||||||
            user/app:latest
 | 
					 | 
				
			||||||
            user/app:1.0.0
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Push image to GHCR
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          docker buildx imagetools create \
 | 
					 | 
				
			||||||
            --tag ghcr.io/user/app:latest \
 | 
					 | 
				
			||||||
            --tag ghcr.io/user/app:1.0.0 \
 | 
					 | 
				
			||||||
            user/app:latest
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -1,48 +1,3 @@
 | 
				
			|||||||
# Update Docker Hub repo description
 | 
					# Update Docker Hub repo description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
You can update the [Docker Hub repository description](https://docs.docker.com/docker-hub/repos/)
 | 
					This page has moved to [Docker Docs website](https://docs.docker.com/build/ci/github-actions/examples/#update-docker-hub-repository-description)
 | 
				
			||||||
using a third party action called [Docker Hub Description](https://github.com/peter-evans/dockerhub-description)
 | 
					 | 
				
			||||||
with this action:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```yaml
 | 
					 | 
				
			||||||
name: ci
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  push:
 | 
					 | 
				
			||||||
    branches:
 | 
					 | 
				
			||||||
      - 'main'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  docker:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Checkout
 | 
					 | 
				
			||||||
        uses: actions/checkout@v3
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Set up QEMU
 | 
					 | 
				
			||||||
        uses: docker/setup-qemu-action@v2
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Set up Docker Buildx
 | 
					 | 
				
			||||||
        uses: docker/setup-buildx-action@v2
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Login to Docker Hub
 | 
					 | 
				
			||||||
        uses: docker/login-action@v2
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          username: ${{ secrets.DOCKERHUB_USERNAME }}
 | 
					 | 
				
			||||||
          password: ${{ secrets.DOCKERHUB_TOKEN }}
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Build and push
 | 
					 | 
				
			||||||
        uses: docker/build-push-action@v3
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          context: .
 | 
					 | 
				
			||||||
          push: true
 | 
					 | 
				
			||||||
          tags: user/app:latest
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Update repo description
 | 
					 | 
				
			||||||
        uses: peter-evans/dockerhub-description@v2
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          username: ${{ secrets.DOCKERHUB_USERNAME }}
 | 
					 | 
				
			||||||
          password: ${{ secrets.DOCKERHUB_PASSWORD }}
 | 
					 | 
				
			||||||
          repository: user/app
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -1,35 +1,3 @@
 | 
				
			|||||||
# Export image to Docker
 | 
					# Export image to Docker
 | 
				
			||||||
 | 
					
 | 
				
			||||||
You may want your build result to be available in the Docker client through
 | 
					This page has moved to [Docker Docs website](https://docs.docker.com/build/ci/github-actions/examples/#export-image-to-docker)
 | 
				
			||||||
`docker images` to be able to use it in another step of your workflow:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```yaml
 | 
					 | 
				
			||||||
name: ci
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  push:
 | 
					 | 
				
			||||||
    branches:
 | 
					 | 
				
			||||||
      - 'main'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  docker:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Checkout
 | 
					 | 
				
			||||||
        uses: actions/checkout@v3
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Set up Docker Buildx
 | 
					 | 
				
			||||||
        uses: docker/setup-buildx-action@v2
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Build
 | 
					 | 
				
			||||||
        uses: docker/build-push-action@v3
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          context: .
 | 
					 | 
				
			||||||
          load: true
 | 
					 | 
				
			||||||
          tags: myimage:latest
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Inspect
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          docker image inspect myimage:latest
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -1,44 +1,3 @@
 | 
				
			|||||||
# Isolated builders
 | 
					# Isolated builders
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```yaml
 | 
					This page has moved to [Docker Docs website](https://docs.docker.com/build/ci/github-actions/examples/#isolated-builders)
 | 
				
			||||||
name: ci
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  push:
 | 
					 | 
				
			||||||
    branches:
 | 
					 | 
				
			||||||
      - 'main'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  docker:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Checkout
 | 
					 | 
				
			||||||
        uses: actions/checkout@v3
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        uses: docker/setup-buildx-action@v2
 | 
					 | 
				
			||||||
        id: builder1
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        uses: docker/setup-buildx-action@v2
 | 
					 | 
				
			||||||
        id: builder2
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Builder 1 name
 | 
					 | 
				
			||||||
        run: echo ${{ steps.builder1.outputs.name }}
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Builder 2 name
 | 
					 | 
				
			||||||
        run: echo ${{ steps.builder2.outputs.name }}
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Build against builder1
 | 
					 | 
				
			||||||
        uses: docker/build-push-action@v3
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          builder: ${{ steps.builder1.outputs.name }}
 | 
					 | 
				
			||||||
          context: .
 | 
					 | 
				
			||||||
          target: mytarget1
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Build against builder2
 | 
					 | 
				
			||||||
        uses: docker/build-push-action@v3
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          builder: ${{ steps.builder2.outputs.name }}
 | 
					 | 
				
			||||||
          context: .
 | 
					 | 
				
			||||||
          target: mytarget2
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -1,45 +1,3 @@
 | 
				
			|||||||
# Local registry
 | 
					# Local registry
 | 
				
			||||||
 | 
					
 | 
				
			||||||
For testing purposes you may need to create a [local registry](https://hub.docker.com/_/registry)
 | 
					This page has moved to [Docker Docs website](https://docs.docker.com/build/ci/github-actions/examples/#local-registry)
 | 
				
			||||||
to push images into:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```yaml
 | 
					 | 
				
			||||||
name: ci
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  push:
 | 
					 | 
				
			||||||
    branches:
 | 
					 | 
				
			||||||
      - 'main'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  docker:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    services:
 | 
					 | 
				
			||||||
      registry:
 | 
					 | 
				
			||||||
        image: registry:2
 | 
					 | 
				
			||||||
        ports:
 | 
					 | 
				
			||||||
          - 5000:5000
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Checkout
 | 
					 | 
				
			||||||
        uses: actions/checkout@v3
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Set up QEMU
 | 
					 | 
				
			||||||
        uses: docker/setup-qemu-action@v2
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Set up Docker Buildx
 | 
					 | 
				
			||||||
        uses: docker/setup-buildx-action@v2
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          driver-opts: network=host
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Build and push to local registry
 | 
					 | 
				
			||||||
        uses: docker/build-push-action@v3
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          context: .
 | 
					 | 
				
			||||||
          push: true
 | 
					 | 
				
			||||||
          tags: localhost:5000/name/app:latest
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Inspect
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          docker buildx imagetools inspect localhost:5000/name/app:latest
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -1,48 +1,3 @@
 | 
				
			|||||||
# Multi-platform image
 | 
					# Multi-platform image
 | 
				
			||||||
 | 
					
 | 
				
			||||||
You can build [multi-platform images](https://docs.docker.com/build/building/multi-platform/)
 | 
					This page has moved to [Docker Docs website](https://docs.docker.com/build/ci/github-actions/examples/#multi-platform-images)
 | 
				
			||||||
using the [`platforms` input](../../README.md#inputs) as described below.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
> **Note**
 | 
					 | 
				
			||||||
>
 | 
					 | 
				
			||||||
> * List of available platforms will be displayed and available through our
 | 
					 | 
				
			||||||
>   [setup-buildx](https://github.com/docker/setup-buildx-action#about) action.
 | 
					 | 
				
			||||||
> * If you want support for more platforms, you can use QEMU with our
 | 
					 | 
				
			||||||
>   [setup-qemu](https://github.com/docker/setup-qemu-action) action.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```yaml
 | 
					 | 
				
			||||||
name: ci
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  push:
 | 
					 | 
				
			||||||
    branches:
 | 
					 | 
				
			||||||
      - 'main'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  docker:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Checkout
 | 
					 | 
				
			||||||
        uses: actions/checkout@v3
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Set up QEMU
 | 
					 | 
				
			||||||
        uses: docker/setup-qemu-action@v2
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Set up Docker Buildx
 | 
					 | 
				
			||||||
        uses: docker/setup-buildx-action@v2
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Login to Docker Hub
 | 
					 | 
				
			||||||
        uses: docker/login-action@v2
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          username: ${{ secrets.DOCKERHUB_USERNAME }}
 | 
					 | 
				
			||||||
          password: ${{ secrets.DOCKERHUB_TOKEN }}
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Build and push
 | 
					 | 
				
			||||||
        uses: docker/build-push-action@v3
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          context: .
 | 
					 | 
				
			||||||
          platforms: linux/amd64,linux/arm64
 | 
					 | 
				
			||||||
          push: true
 | 
					 | 
				
			||||||
          tags: user/app:latest
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -1,98 +1,3 @@
 | 
				
			|||||||
# Named contexts
 | 
					# Named contexts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
You can define [additional build contexts](https://docs.docker.com/engine/reference/commandline/buildx_build/#build-context)
 | 
					This page has moved to [Docker Docs website](https://docs.docker.com/build/ci/github-actions/examples/#named-contexts)
 | 
				
			||||||
that can be accessed in your Dockerfile with `FROM name` or `--from=name`. When
 | 
					 | 
				
			||||||
Dockerfile defines a stage with the same name it is overwritten.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
This can be useful with GitHub Actions to reuse results from other builds or
 | 
					 | 
				
			||||||
pin an image to a spcific tag in your workflow.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* [Pin image to a specific tag](#pin-image-to-a-specific-tag)
 | 
					 | 
				
			||||||
* [Usage of the built image in other build steps](#usage-of-the-built-image-in-other-build-steps)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Pin image to a specific tag
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Replace `alpine:latest` with a pinned one:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```dockerfile
 | 
					 | 
				
			||||||
# syntax=docker/dockerfile:1
 | 
					 | 
				
			||||||
FROM alpine
 | 
					 | 
				
			||||||
RUN echo "Hello World"
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```yaml
 | 
					 | 
				
			||||||
name: ci
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  push:
 | 
					 | 
				
			||||||
    branches:
 | 
					 | 
				
			||||||
      - 'main'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  docker:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Checkout
 | 
					 | 
				
			||||||
        uses: actions/checkout@v3
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Set up Docker Buildx
 | 
					 | 
				
			||||||
        uses: docker/setup-buildx-action@v2
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Build
 | 
					 | 
				
			||||||
        uses: docker/build-push-action@v3
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          context: .
 | 
					 | 
				
			||||||
          build-contexts: |
 | 
					 | 
				
			||||||
            alpine=docker-image://alpine:3.16
 | 
					 | 
				
			||||||
          tags: myimage:latest
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Usage of the built image in other build steps
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
By default, the [`setup-buildx` action](https://github.com/docker/setup-buildx-action#about)
 | 
					 | 
				
			||||||
uses `docker-container` as a build driver, so built Docker images are not
 | 
					 | 
				
			||||||
available in the builder container.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
With named contexts you can reuse the built image:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```dockerfile
 | 
					 | 
				
			||||||
# syntax=docker/dockerfile:1
 | 
					 | 
				
			||||||
FROM alpine
 | 
					 | 
				
			||||||
RUN echo "Hello World"
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```yaml
 | 
					 | 
				
			||||||
name: ci
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  push:
 | 
					 | 
				
			||||||
    branches:
 | 
					 | 
				
			||||||
      - 'main'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  docker:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Checkout
 | 
					 | 
				
			||||||
        uses: actions/checkout@v3
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Set up Docker Buildx
 | 
					 | 
				
			||||||
        uses: docker/setup-buildx-action@v2
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Build base image
 | 
					 | 
				
			||||||
        uses: docker/build-push-action@v3
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          context: base
 | 
					 | 
				
			||||||
          load: true
 | 
					 | 
				
			||||||
          tags: my-base-image:latest
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Build
 | 
					 | 
				
			||||||
        uses: docker/build-push-action@v3
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          context: .
 | 
					 | 
				
			||||||
          build-contexts: |
 | 
					 | 
				
			||||||
            alpine=docker-image://my-base-image:latest
 | 
					 | 
				
			||||||
          tags: myimage:latest
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -1,53 +1,3 @@
 | 
				
			|||||||
# Push to multi-registries
 | 
					# Push to multi-registries
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The following workflow will connect you to [Docker Hub](https://github.com/docker/login-action#dockerhub)
 | 
					This page has moved to [Docker Docs website](https://docs.docker.com/build/ci/github-actions/examples/#push-to-multi-registries)
 | 
				
			||||||
and [GitHub Container Registry](https://github.com/docker/login-action#github-container-registry)
 | 
					 | 
				
			||||||
and push the image to these registries:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```yaml
 | 
					 | 
				
			||||||
name: ci
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  push:
 | 
					 | 
				
			||||||
    branches:
 | 
					 | 
				
			||||||
      - 'main'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  docker:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Checkout
 | 
					 | 
				
			||||||
        uses: actions/checkout@v3
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Set up QEMU
 | 
					 | 
				
			||||||
        uses: docker/setup-qemu-action@v2
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Set up Docker Buildx
 | 
					 | 
				
			||||||
        uses: docker/setup-buildx-action@v2
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Login to Docker Hub
 | 
					 | 
				
			||||||
        uses: docker/login-action@v2
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          username: ${{ secrets.DOCKERHUB_USERNAME }}
 | 
					 | 
				
			||||||
          password: ${{ secrets.DOCKERHUB_TOKEN }}
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Login to GitHub Container Registry
 | 
					 | 
				
			||||||
        uses: docker/login-action@v2
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          registry: ghcr.io
 | 
					 | 
				
			||||||
          username: ${{ github.repository_owner }}
 | 
					 | 
				
			||||||
          password: ${{ secrets.GITHUB_TOKEN }}
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Build and push
 | 
					 | 
				
			||||||
        uses: docker/build-push-action@v3
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          context: .
 | 
					 | 
				
			||||||
          platforms: linux/amd64,linux/arm64
 | 
					 | 
				
			||||||
          push: true
 | 
					 | 
				
			||||||
          tags: |
 | 
					 | 
				
			||||||
            user/app:latest
 | 
					 | 
				
			||||||
            user/app:1.0.0
 | 
					 | 
				
			||||||
            ghcr.io/user/app:latest
 | 
					 | 
				
			||||||
            ghcr.io/user/app:1.0.0
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -1,88 +1,3 @@
 | 
				
			|||||||
# Secrets
 | 
					# Secrets
 | 
				
			||||||
 | 
					
 | 
				
			||||||
In the following example we will expose and use the [GITHUB_TOKEN secret](https://docs.github.com/en/actions/security-guides/automatic-token-authentication#about-the-github_token-secret)
 | 
					This page has moved to [Docker Docs website](https://docs.docker.com/build/ci/github-actions/examples/#secrets)
 | 
				
			||||||
as provided by GitHub in your workflow.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
First let's create our `Dockerfile` to use our secret:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```dockerfile
 | 
					 | 
				
			||||||
# syntax=docker/dockerfile:1
 | 
					 | 
				
			||||||
FROM alpine
 | 
					 | 
				
			||||||
RUN --mount=type=secret,id=github_token \
 | 
					 | 
				
			||||||
  cat /run/secrets/github_token
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
As you can see we have named our secret `github_token`. Here is the workflow
 | 
					 | 
				
			||||||
you can use to expose this secret using the [`secrets` input](../../README.md#inputs):
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```yaml
 | 
					 | 
				
			||||||
name: ci
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  push:
 | 
					 | 
				
			||||||
    branches:
 | 
					 | 
				
			||||||
      - 'main'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  docker:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Checkout
 | 
					 | 
				
			||||||
        uses: actions/checkout@v3
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Set up QEMU
 | 
					 | 
				
			||||||
        uses: docker/setup-qemu-action@v2
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Set up Docker Buildx
 | 
					 | 
				
			||||||
        uses: docker/setup-buildx-action@v2
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Build
 | 
					 | 
				
			||||||
        uses: docker/build-push-action@v3
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          context: .
 | 
					 | 
				
			||||||
          platforms: linux/amd64,linux/arm64
 | 
					 | 
				
			||||||
          tags: user/app:latest
 | 
					 | 
				
			||||||
          secrets: |
 | 
					 | 
				
			||||||
            "github_token=${{ secrets.GITHUB_TOKEN }}"
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
> **Note**
 | 
					 | 
				
			||||||
>
 | 
					 | 
				
			||||||
> You can also expose a secret file to the build with the [`secret-files`](../../README.md#inputs) input:
 | 
					 | 
				
			||||||
> ```yaml
 | 
					 | 
				
			||||||
> secret-files: |
 | 
					 | 
				
			||||||
>   "MY_SECRET=./secret.txt"
 | 
					 | 
				
			||||||
> ```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
If you're using [GitHub secrets](https://docs.github.com/en/actions/security-guides/encrypted-secrets)
 | 
					 | 
				
			||||||
and need to handle multi-line value, you will need to place the key-value pair
 | 
					 | 
				
			||||||
between quotes:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```yaml
 | 
					 | 
				
			||||||
secrets: |
 | 
					 | 
				
			||||||
  "MYSECRET=${{ secrets.GPG_KEY }}"
 | 
					 | 
				
			||||||
  GIT_AUTH_TOKEN=abcdefghi,jklmno=0123456789
 | 
					 | 
				
			||||||
  "MYSECRET=aaaaaaaa
 | 
					 | 
				
			||||||
  bbbbbbb
 | 
					 | 
				
			||||||
  ccccccccc"
 | 
					 | 
				
			||||||
  FOO=bar
 | 
					 | 
				
			||||||
  "EMPTYLINE=aaaa
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  bbbb
 | 
					 | 
				
			||||||
  ccc"
 | 
					 | 
				
			||||||
  "JSON_SECRET={""key1"":""value1"",""key2"":""value2""}"
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
| Key                | Value                               |
 | 
					 | 
				
			||||||
|--------------------|-------------------------------------|
 | 
					 | 
				
			||||||
| `MYSECRET`         | `***********************`           |
 | 
					 | 
				
			||||||
| `GIT_AUTH_TOKEN`   | `abcdefghi,jklmno=0123456789`       |
 | 
					 | 
				
			||||||
| `MYSECRET`         | `aaaaaaaa\nbbbbbbb\nccccccccc`      |
 | 
					 | 
				
			||||||
| `FOO`              | `bar`                               |
 | 
					 | 
				
			||||||
| `EMPTYLINE`        | `aaaa\n\nbbbb\nccc`                 |
 | 
					 | 
				
			||||||
| `JSON_SECRET`      | `{"key1":"value1","key2":"value2"}` |
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
> **Note**
 | 
					 | 
				
			||||||
>
 | 
					 | 
				
			||||||
> All quote signs need to be doubled for escaping.
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -1,60 +1,3 @@
 | 
				
			|||||||
# Share built image between jobs
 | 
					# Share built image between jobs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
As each job is isolated in its own runner you cannot use your built image
 | 
					This page has moved to [Docker Docs website](https://docs.docker.com/build/ci/github-actions/examples/#share-built-image-between-jobs)
 | 
				
			||||||
between jobs (except for [self-hosted runners](https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners)).
 | 
					 | 
				
			||||||
However, you can [pass data between jobs in a workflow](https://docs.github.com/en/actions/using-workflows/storing-workflow-data-as-artifacts#passing-data-between-jobs-in-a-workflow)
 | 
					 | 
				
			||||||
using the [actions/upload-artifact](https://github.com/actions/upload-artifact)
 | 
					 | 
				
			||||||
and [actions/download-artifact](https://github.com/actions/download-artifact)
 | 
					 | 
				
			||||||
actions:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```yaml
 | 
					 | 
				
			||||||
name: ci
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  push:
 | 
					 | 
				
			||||||
    branches:
 | 
					 | 
				
			||||||
      - 'main'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  build:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Checkout
 | 
					 | 
				
			||||||
        uses: actions/checkout@v3
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Set up Docker Buildx
 | 
					 | 
				
			||||||
        uses: docker/setup-buildx-action@v2
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Build and export
 | 
					 | 
				
			||||||
        uses: docker/build-push-action@v3
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          context: .
 | 
					 | 
				
			||||||
          tags: myimage:latest
 | 
					 | 
				
			||||||
          outputs: type=docker,dest=/tmp/myimage.tar
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Upload artifact
 | 
					 | 
				
			||||||
        uses: actions/upload-artifact@v3
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          name: myimage
 | 
					 | 
				
			||||||
          path: /tmp/myimage.tar
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  use:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    needs: build
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Set up Docker Buildx
 | 
					 | 
				
			||||||
        uses: docker/setup-buildx-action@v2
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Download artifact
 | 
					 | 
				
			||||||
        uses: actions/download-artifact@v3
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          name: myimage
 | 
					 | 
				
			||||||
          path: /tmp
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Load image
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          docker load --input /tmp/myimage.tar
 | 
					 | 
				
			||||||
          docker image ls -a
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -1,77 +1,3 @@
 | 
				
			|||||||
# Handle tags and labels
 | 
					# Handle tags and labels
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If you want an "automatic" tag management and [OCI Image Format Specification](https://github.com/opencontainers/image-spec/blob/master/annotations.md)
 | 
					This page has moved to [Docker Docs website](https://docs.docker.com/build/ci/github-actions/examples/#manage-tags-and-labels)
 | 
				
			||||||
for labels, you can do it in a dedicated step. The following workflow will use
 | 
					 | 
				
			||||||
the [Docker metadata action](https://github.com/docker/metadata-action) to
 | 
					 | 
				
			||||||
handle tags and labels based on GitHub actions events and Git metadata:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```yaml
 | 
					 | 
				
			||||||
name: ci
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  schedule:
 | 
					 | 
				
			||||||
    - cron: '0 10 * * *'
 | 
					 | 
				
			||||||
  push:
 | 
					 | 
				
			||||||
    branches:
 | 
					 | 
				
			||||||
      - '**'
 | 
					 | 
				
			||||||
    tags:
 | 
					 | 
				
			||||||
      - 'v*.*.*'
 | 
					 | 
				
			||||||
  pull_request:
 | 
					 | 
				
			||||||
    branches:
 | 
					 | 
				
			||||||
      - 'main'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  docker:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Checkout
 | 
					 | 
				
			||||||
        uses: actions/checkout@v3
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Docker meta
 | 
					 | 
				
			||||||
        id: meta
 | 
					 | 
				
			||||||
        uses: docker/metadata-action@v4
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          # list of Docker images to use as base name for tags
 | 
					 | 
				
			||||||
          images: |
 | 
					 | 
				
			||||||
            name/app
 | 
					 | 
				
			||||||
            ghcr.io/username/app
 | 
					 | 
				
			||||||
          # generate Docker tags based on the following events/attributes
 | 
					 | 
				
			||||||
          tags: |
 | 
					 | 
				
			||||||
            type=schedule
 | 
					 | 
				
			||||||
            type=ref,event=branch
 | 
					 | 
				
			||||||
            type=ref,event=pr
 | 
					 | 
				
			||||||
            type=semver,pattern={{version}}
 | 
					 | 
				
			||||||
            type=semver,pattern={{major}}.{{minor}}
 | 
					 | 
				
			||||||
            type=semver,pattern={{major}}
 | 
					 | 
				
			||||||
            type=sha
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Set up QEMU
 | 
					 | 
				
			||||||
        uses: docker/setup-qemu-action@v2
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Set up Docker Buildx
 | 
					 | 
				
			||||||
        uses: docker/setup-buildx-action@v2
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Login to Docker Hub
 | 
					 | 
				
			||||||
        if: github.event_name != 'pull_request'
 | 
					 | 
				
			||||||
        uses: docker/login-action@v2
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          username: ${{ secrets.DOCKERHUB_USERNAME }}
 | 
					 | 
				
			||||||
          password: ${{ secrets.DOCKERHUB_TOKEN }}
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Login to GHCR
 | 
					 | 
				
			||||||
        if: github.event_name != 'pull_request'
 | 
					 | 
				
			||||||
        uses: docker/login-action@v2
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          registry: ghcr.io
 | 
					 | 
				
			||||||
          username: ${{ github.repository_owner }}
 | 
					 | 
				
			||||||
          password: ${{ secrets.GITHUB_TOKEN }}
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Build and push
 | 
					 | 
				
			||||||
        uses: docker/build-push-action@v3
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          context: .
 | 
					 | 
				
			||||||
          push: ${{ github.event_name != 'pull_request' }}
 | 
					 | 
				
			||||||
          tags: ${{ steps.meta.outputs.tags }}
 | 
					 | 
				
			||||||
          labels: ${{ steps.meta.outputs.labels }}
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -1,67 +1,3 @@
 | 
				
			|||||||
# Test your image before pushing it
 | 
					# Test your image before pushing it
 | 
				
			||||||
 | 
					
 | 
				
			||||||
In some cases, you might want to validate that the image works as expected
 | 
					This page has moved to [Docker Docs website](https://docs.docker.com/build/ci/github-actions/examples/#test-your-image-before-pushing-it)
 | 
				
			||||||
before pushing it.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The workflow below will be composed of several steps to achieve this:
 | 
					 | 
				
			||||||
* Build and export the image to Docker
 | 
					 | 
				
			||||||
* Test your image
 | 
					 | 
				
			||||||
* Multi-platform build and push the image
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```yaml
 | 
					 | 
				
			||||||
name: ci
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  push:
 | 
					 | 
				
			||||||
    branches:
 | 
					 | 
				
			||||||
      - 'main'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
env:
 | 
					 | 
				
			||||||
  TEST_TAG: user/app:test
 | 
					 | 
				
			||||||
  LATEST_TAG: user/app:latest
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  docker:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Checkout
 | 
					 | 
				
			||||||
        uses: actions/checkout@v3
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Set up QEMU
 | 
					 | 
				
			||||||
        uses: docker/setup-qemu-action@v2
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Set up Docker Buildx
 | 
					 | 
				
			||||||
        uses: docker/setup-buildx-action@v2
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Login to Docker Hub
 | 
					 | 
				
			||||||
        uses: docker/login-action@v2
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          username: ${{ secrets.DOCKERHUB_USERNAME }}
 | 
					 | 
				
			||||||
          password: ${{ secrets.DOCKERHUB_TOKEN }}
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Build and export to Docker
 | 
					 | 
				
			||||||
        uses: docker/build-push-action@v3
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          context: .
 | 
					 | 
				
			||||||
          load: true
 | 
					 | 
				
			||||||
          tags: ${{ env.TEST_TAG }}
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Test
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          docker run --rm ${{ env.TEST_TAG }}
 | 
					 | 
				
			||||||
      -
 | 
					 | 
				
			||||||
        name: Build and push
 | 
					 | 
				
			||||||
        uses: docker/build-push-action@v3
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          context: .
 | 
					 | 
				
			||||||
          platforms: linux/amd64,linux/arm64
 | 
					 | 
				
			||||||
          push: true
 | 
					 | 
				
			||||||
          tags: ${{ env.LATEST_TAG }}
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
> **Note**
 | 
					 | 
				
			||||||
>
 | 
					 | 
				
			||||||
> Build time will not be increased with this workflow because internal cache
 | 
					 | 
				
			||||||
> for `linux/amd64` will be used from previous step on `Build and push` step
 | 
					 | 
				
			||||||
> so only `linux/arm64` will be actually built.
 | 
					 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user