99 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# Named contexts
 | 
						|
 | 
						|
You can define [additional build contexts](https://docs.docker.com/engine/reference/commandline/buildx_build/#build-context)
 | 
						|
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
 | 
						|
```
 |