• Stars
    star
    3,892
  • Rank 10,707 (Top 0.3 %)
  • Language
    TypeScript
  • License
    Apache License 2.0
  • Created about 4 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

GitHub Action to build and push Docker images with Buildx

GitHub release GitHub marketplace CI workflow Test workflow Codecov

About

GitHub Action to build and push Docker images with Buildx with full support of the features provided by Moby BuildKit builder toolkit. This includes multi-platform build, secrets, remote cache, etc. and different builder deployment/namespacing options.

Screenshot


Usage

In the examples below we are also using 3 other actions:

  • setup-buildx action will create and boot a builder using by default the docker-container driver. This is not required but recommended using it to be able to build multi-platform images, export cache, etc.
  • setup-qemu action can be useful if you want to add emulation support with QEMU to be able to build against more platforms.
  • login action will take care to log in against a Docker registry.

Git context

By default, this action uses the Git context, so you don't need to use the actions/checkout action to check out the repository as this will be done directly by BuildKit.

The git reference will be based on the event that triggered your workflow and will result in the following context: https://github.com/<owner>/<repo>.git#<ref>.

name: ci

on:
  push:
    branches:
      - 'main'

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      -
        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@v4
        with:
          push: true
          tags: user/app:latest

Be careful because any file mutation in the steps that precede the build step will be ignored, including processing of the .dockerignore file since the context is based on the Git reference. However, you can use the Path context using the context input alongside the actions/checkout action to remove this restriction.

Default Git context can also be provided using the Handlebars template expression {{defaultContext}}. Here we can use it to provide a subdirectory to the default Git context:

      -
        # Setting up Docker Buildx with docker-container driver is required
        # at the moment to be able to use a subdirectory with Git context
        name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2
      -
        name: Build and push
        uses: docker/build-push-action@v4
        with:
          context: "{{defaultContext}}:mysubdir"
          push: true
          tags: user/app:latest

Warning

Subdirectory for Git context is available from BuildKit v0.9.0. If you're using the docker builder (default if setup-buildx-action not used), then BuildKit in Docker Engine will be used. As Docker Engine < v22.x.x embeds Buildkit 0.8.2 at the moment, it does not support this feature. It's therefore required to use the setup-buildx-action at the moment.

Building from the current repository automatically uses the GitHub Token, so it does not need to be passed. If you want to authenticate against another private repository, you have to use a secret named GIT_AUTH_TOKEN to be able to authenticate against it with Buildx:

      -
        name: Build and push
        uses: docker/build-push-action@v4
        with:
          push: true
          tags: user/app:latest
          secrets: |
            GIT_AUTH_TOKEN=${{ secrets.MYTOKEN }}

Path context

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@v4
        with:
          context: .
          push: true
          tags: user/app:latest

Examples

Customizing

inputs

Following inputs can be used as step.with keys

List type is a newline-delimited string

cache-from: |
  user/app:cache
  type=local,src=path/to/dir

CSV type is a comma-delimited string

tags: name/app:latest,name/app:1.0.0
Name Type Description
add-hosts List/CSV List of customs host-to-IP mapping (e.g., docker:10.180.0.1)
allow List/CSV List of extra privileged entitlement (e.g., network.host,security.insecure)
attests List List of attestation parameters (e.g., type=sbom,generator=image)
builder String Builder instance (see setup-buildx action)
build-args List List of build-time variables
build-contexts List List of additional build contexts (e.g., name=path)
cache-from List List of external cache sources (e.g., type=local,src=path/to/dir)
cache-to List List of cache export destinations (e.g., type=local,dest=path/to/dir)
cgroup-parent String Optional parent cgroup for the container used in the build
context String Build's context is the set of files located in the specified PATH or URL (default Git context)
file String Path to the Dockerfile. (default {context}/Dockerfile)
labels List List of metadata for an image
load Bool Load is a shorthand for --output=type=docker (default false)
network String Set the networking mode for the RUN instructions during build
no-cache Bool Do not use cache when building the image (default false)
no-cache-filters List/CSV Do not cache specified stages
outputsΒΉ List List of output destinations (format: type=local,dest=path)
platforms List/CSV List of target platforms for build
provenance Bool/String Generate provenance attestation for the build (shorthand for --attest=type=provenance)
pull Bool Always attempt to pull all referenced images (default false)
push Bool Push is a shorthand for --output=type=registry (default false)
sbom Bool/String Generate SBOM attestation for the build (shorthand for --attest=type=sbom)
secrets List List of secrets to expose to the build (e.g., key=string, GIT_AUTH_TOKEN=mytoken)
secret-files List List of secret files to expose to the build (e.g., key=filename, MY_SECRET=./secret.txt)
shm-size String Size of /dev/shm (e.g., 2g)
ssh List List of SSH agent socket or keys to expose to the build
tags List/CSV List of tags
target String Sets the target stage to build
ulimit List Ulimit options (e.g., nofile=1024:1024)
github-token String GitHub Token used to authenticate against a repository for Git context (default ${{ github.token }})

Note

outputs

Following outputs are available

Name Type Description
imageid String Image ID
digest String Image digest
metadata JSON Build result metadata

Troubleshooting

See TROUBLESHOOTING.md

Contributing

Want to contribute? Awesome! You can find information about contributing to this project in the CONTRIBUTING.md

More Repositories

1

compose

Define and run multi-container applications with Docker
Go
32,049
star
2

awesome-compose

Awesome Docker Compose samples
HTML
29,388
star
3

kitematic

Visual Docker Container Management on Mac & Windows
JavaScript
12,254
star
4

labs

This is a collection of tutorials for learning how to use Docker with various tools. Contributions welcome.
PHP
11,433
star
5

docker-bench-security

The Docker Bench for Security is a script that checks for dozens of common best-practices around deploying Docker containers in production.
Shell
8,831
star
6

dockercraft

Docker + Minecraft = Dockercraft
Lua
7,057
star
7

docker-py

A Python library for the Docker Engine API
Python
6,638
star
8

machine

Machine management for a container-centric world
Go
6,617
star
9

docker-ce

⚠️ This repository is deprecated and will be archived (Docker CE itself is NOT deprecated) see the https://github.com/docker/docker-ce/blob/master/README.md ⚠️
Go
5,697
star
10

cli

The Docker CLI
Go
4,582
star
11

docs

Source repo for Docker's Documentation
Markdown
4,026
star
12

buildx

Docker CLI plugin for extended build capabilities with BuildKit
Go
3,220
star
13

genai-stack

Langchain + Docker + Neo4j + Ollama
Python
2,880
star
14

getting-started

Getting started with Docker
JavaScript
2,820
star
15

libchan

Like Go channels over the network
Go
2,471
star
16

for-mac

Bug reports for Docker Desktop for Mac
2,393
star
17

docker-install

Docker installation script
Shell
2,034
star
18

for-win

Bug reports for Docker Desktop for Windows
1,818
star
19

app

Make your Docker Compose applications reusable, and share them on Docker Hub
Go
1,571
star
20

roadmap

Welcome to the Public Roadmap for All Things Docker! We welcome your ideas.
1,445
star
21

compose-on-kubernetes

Deploy applications described in Compose onto Kubernetes clusters
Go
1,420
star
22

docker-credential-helpers

Programs to keep Docker login credentials safe by storing in platform keystores
Go
1,000
star
23

compose-cli

Easily run your Compose application to the cloud with compose-cli
Go
954
star
24

login-action

GitHub Action to login against a Docker registry
TypeScript
909
star
25

libkv

Distributed key/value store abstraction library
Go
850
star
26

setup-buildx-action

GitHub Action to set up Docker Buildx
TypeScript
839
star
27

metadata-action

GitHub Action to extract metadata (tags, labels) from Git reference and GitHub events for Docker
TypeScript
799
star
28

for-linux

Docker Engine for Linux
745
star
29

libcompose

*Unmaintained/Deprecated* An experimental go library providing Compose-like functionality
Go
584
star
30

setup-qemu-action

GitHub Action to install QEMU static binaries
TypeScript
377
star
31

community

327
star
32

go-plugins-helpers

Go helper packages to extend the Docker Engine
Go
320
star
33

hub-tool

πŸ§ͺ Docker Hub experimental CLI tool
Go
311
star
34

welcome-to-docker

JavaScript
267
star
35

engine-api

DEPRECATED: Please see https://github.com/docker/docker/tree/master/client
Go
266
star
36

hub-feedback

Feedback and bug reports for the Docker Hub
231
star
37

doodle

A Home for Docker Doodles
Go
221
star
38

go-connections

Utility package to work with network connections
Go
204
star
39

scout-cli

Docker Scout CLI
Shell
203
star
40

go-units

Parse and print size and time units in human-readable format
Go
198
star
41

compose-switch

Go
196
star
42

go-docker

(Still WIP) Official Go SDK for Docker
Go
186
star
43

scan-cli-plugin

Docker Scan is a Command Line Interface to run vulnerability detection on your Dockerfiles and Docker images
Go
177
star
44

gordon

Cli application to manage github pull requests
Go
177
star
45

docker-ce-packaging

Packaging scripts for Docker CE
Makefile
171
star
46

github-actions

⚠️ This repository is deprecated and has been replaced by docker/build-push-action@v2
Go
163
star
47

bake-action

GitHub Action to use Docker Buildx Bake as a high-level build command
TypeScript
158
star
48

sbom-cli-plugin

Plugin for Docker CLI to support SBOM creation using Syft
Go
143
star
49

hacktoberfest-2022

Docker Hacktoberfest 2022
140
star
50

extensions-sdk

Desktop Extensions SDK
133
star
51

go-events

Composable event distribution for Go
Go
131
star
52

libtrust

Primitives for identity and authorization
Go
107
star
53

node-sdk

Docker CLI gRPC JavaScript SDK
JavaScript
106
star
54

compose-ecs

Deploy compose application on ECS
Go
99
star
55

golang-cross

Dockerfile
98
star
56

go-metrics

Package for metrics collection in Docker projects
Go
86
star
57

volumes-backup-extension

Back up, clone, restore, and share Docker volumes effortlessly.
PLpgSQL
77
star
58

desktop-linux

Bug reports for Docker Desktop for Linux
71
star
59

containerd-packaging

Linux distro packaging for containerd
Shell
64
star
60

opensource

Contains documentation and scripts related to the management of Open Source at Docker
Go
62
star
61

getting-started-app

A simple application for the getting started guide in Docker's documentation
JavaScript
62
star
62

dev-environments

59
star
63

multi-container-app

EJS
58
star
64

scout-action

Docker Scout GitHub Action
JavaScript
57
star
65

actions-toolkit

Toolkit for Docker (GitHub) Actions
TypeScript
46
star
66

extension-ideas

A place to suggest new ideas for Docker Extensions and get new ideas of what to build for the larger Docker community
45
star
67

binfmt

Please use https://github.com/linuxkit/linuxkit/tree/master/pkg/binfmt instead of this repo
Go
43
star
68

index-cli-plugin

Go
40
star
69

whalesay

A repository in support of the Docker's official whalesay image
Perl
38
star
70

dev-envs-extension

TypeScript
36
star
71

code-of-conduct

35
star
72

HttpOverStream

.NET library for using HTTP 1.1 over streams, especially Windows Named Pipes
C#
33
star
73

scout-demo-service

Dockerfile
26
star
74

get-involved

Get Involved with Docker
CSS
24
star
75

buildkit-syft-scanner

BuildKit Syft scanner
Go
21
star
76

packaging

Docker Packaging (apk, deb, rpm, static)
Dockerfile
19
star
77

go

Go packages with small patches autogenerated (used for canonical/json)
Go
18
star
78

cli-docs-tool

Utilities to generate (reference) documentation for the docker CLI
Go
18
star
79

base-cli-plugin

Experimental Docker CLI plugin to detect base images
Go
16
star
80

notary-official-images

Shell
16
star
81

go-imageinspect

Go
13
star
82

docker-ai

Docker AI is an extension for VSCode which provides runnable terminals inside of notebooks. Docker AI integrates AI recommendations to assist with debugging and improving your Docker projects.
13
star
83

python-docker

A simple Python app for the Python Language Guide in Docker's Docs
Python
11
star
84

babashka-pod-docker

Go
11
star
85

dc23-secure-workshop

DockerCon 2023 Secure Development with Docker hands-on exercises code
Dockerfile
10
star
86

import-restrictions

Restrict imports in your go project
Go
9
star
87

extensions-submissions

Submit your Docker Extension here
Shell
9
star
88

engine-sync

Sync moby/moby with docker/engine
Shell
8
star
89

docker-nodejs-sample

A simple Node.js application for the guide in Docker's documentation
JavaScript
7
star
90

docker-dotnet-sample

A simple .NET web application
HTML
7
star
91

python-docker-dev

A simple Python app for the Python Language Guide in Docker's Docs
Python
7
star
92

database-extension

TypeScript
6
star
93

buildx-desktop

6
star
94

github-actions-runner

Docker's containerized github-actions runner
Shell
6
star
95

desktop-action

Docker Desktop action
6
star
96

docker-php-sample

A simple PHP application
PHP
5
star
97

compose-desktop

3
star
98

cli-scan-feedback

Bug report for CLI Scanning
3
star
99

docker-spcs-demo

2
star
100

getting-started-todo-app

Sample application to get started with Docker
JavaScript
2
star