Python wrapper to run Buildah from the shell, driven by the build manifest in a docker-compose.yml file.
- You have a Docker project that contains:
docker-compose.yml— as the build manifest- one or more
Dockerfiles in the project
- You want to automate builds with the
buildahbuild system. buildahdoes not natively consumedocker-compose.ymlfor builds.
- Linux with the
buildahbinary onPATH(invoked as a native host binary — there is no executor image to pull). - Python
>= 3.9.
pip install buildah-wrapper
cd <...>/directory/containing/docker-and-docker-compose-file/
buildah-wrapper --build # build into the local store
buildah-wrapper --build --deploy # build, then push to the registry and mirrors
buildah-wrapper --deploy # push already-built images
buildah-wrapper --clean # remove all buildah containers and images
Running with no action prints the help screen.
Actions are combinable (e.g. --build --deploy):
--build,-b— build images into the local store--deploy,-d— push built images to the registry and allx-mirrors--clean— remove all buildah containers and images
Options:
--compose-file FILE— path to thedocker-compose.ymlfile (default:docker-compose.yml)--squash/--no-squash— single-layer output for all services (default: off; per-servicex-squashoverrides it)--verbose,-V— verbose output (shortcut for--log-level DEBUG)--log-level LEVEL— override log level:DEBUG,INFO,WARNING,ERROR,CRITICAL--version,-v— show script, Python and buildah versions--help,-h— show the help message and exit
services:
app:
image: "epicmorg/buildah-wrapper:image"
build:
context: .
dockerfile: ./Dockerfileservices:
app:
image: "epicmorg/buildah-wrapper:image-jdk11"
build:
context: .
app-develop:
image: "epicmorg/buildah-wrapper:image-develop-jdk11"
build:
context: .
dockerfile: ./Dockerfile.develop
app-develop-17:
image: "epicmorg/astralinux:image-develop-jdk17"
build:
context: .
dockerfile: ./Dockerfile.develop-17Add an x-mirrors list to a service to push the built image to additional
registries during --deploy. A failed push to any mirror fails the service.
services:
app:
image: docker.io/epicmorg/app:latest
build:
context: .
x-mirrors:
- quay.io/epicmorg/app:latest
- ghcr.io/epicmorg/app:latestAdd an x-squash field to a service to control single-layer output per service.
Default is false. A per-service x-squash overrides the --squash / --no-squash
CLI default for that service.
services:
app:
image: docker.io/epicmorg/app:latest
build:
context: .
x-squash: truebuildah buildruns with--format docker(OCI format does not carryHEALTHCHECK).- Builds run sequentially, so
FROMchains (base -> runtime -> app) resolve in order. - Pushes use the default registry auth (
~/.config/containers/auth.jsonorREGISTRY_AUTH_FILE).