About this project

Buildah is an open-source command-line tool for building Open Container Initiative (OCI) container images. It is part of the containers project ecosystem and is closely related to Podman. Core capabilities described in the README: - Create a working container from scratch or from an existing image as a starting point. - Create an image from a working container or from instructions in a Dockerfile/Containerfile. - Build images in either OCI image format or the traditional upstream Docker image format. - Mount and unmount a working container's root filesystem for direct manipulation. - Use the updated contents of a container's root filesystem as a filesystem layer to create a new image. - Delete a working container or an image, and rename a local container. Buildah is designed to work without requiring root privileges. Its commands replicate the operations found in a Dockerfile, allowing image builds both with and without Dockerfiles. The project states its goal is to provide a lower-level coreutils-style interface to build images, and that building without Dockerfiles enables integration of other scripting languages into the build process. Buildah follows a fork-exec model and does not run as a daemon; it is based on a Go API that can be vendored into other tools. The README explains the relationship with Podman: Podman specializes in maintaining and modifying OCI images (pulling, tagging) and in creating, running and maintaining containers from those images. For building images via Dockerfiles, Podman uses Buildah's Go API and can be installed independently. A key difference is the concept of a container: Podman containers are intended to be long-lived, while Buildah containers exist to allow content to be added back into an image. The README notes that `buildah run` emulates the RUN command in a Dockerfile, while `podman run` emulates `docker run`, and that due to underlying storage differences, Podman containers are not visible from within Buildah and vice versa. The README includes a shell example that creates a container from a base image, runs package updates and installs lighttpd, sets build-time annotations, configures the command and exposed port, and commits the container to an image name. Documented CLI commands include: add, build, commit, config, containers, copy, from, images, info, inspect, mount, pull, push, rename, rm, rmi, run, tag, umount, unshare, and version. The README also links to tutorials, installation notes, a troubleshooting guide, demos, a changelog, contributing guidelines, and a development plan. Future goals mentioned include more CI tests and possibly additional CLI commands.