Merge pull request #718 from crazy-max/moved-examples
docs: examples moved to docs website
This commit is contained in:
		
						commit
						ffe65bfc27
					
				
							
								
								
									
										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