In this post, we're going to talk about how to use buildah to build container images on CentOS.

buildah is a command line tool that facilitates building OCI compliant images. There's a plethora of information available around what buildah is on its GitHub landing page so we won't dive more into what it is. However, it's worth mentioning that buildah helps you build container images without having to run any daemon in the background, unlike the docker CLI tool which requires the Docker daemon to be running in the background.

Installing buildah

buildah is already available in the CentOS repos. All we need to do is:

$ yum install -y buildah $ buildah -v buildah version 1.5-dev (image-spec 1.0.0, runtime-spec 1.0.0)

buildah offers a number of features and options. To know about these, simply execute buildah on the command line or refer to its manual page ( man buildah ).

Building the container image

buildah can build a container image by referring the same Dockerfile that docker build refers to. Let's consider this simple Dockerfile for example. All it does is install the wget package:

$ cat Dockerfile FROM registry.centos.org/centos/centos RUN yum install -y wget && yum clean all

Now, build the container image named wget :

$ buildah bud -t wget . $ buildah images IMAGE ID IMAGE NAME CREATED AT SIZE 2f254a4fff8d registry.centos.org/centos/centos:latest Dec 17, 2018 05:07 210 MB 9b6563cfaff2 localhost/wget:latest Jan 16, 2019 11:01 234 MB

You can use this container image with podman by doing:

$ podman run -it --rm wget bash

podman is a tool for managing pods, containers, and container images. Its website contains extensive detail about its capabilities and uses.

Use the container image with Docker

buildah also makes it possible to use the image thus built via the local Docker daemon. It's as simple as doing a buildah push :

$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE $ buildah images IMAGE ID IMAGE NAME CREATED AT SIZE 2f254a4fff8d registry.centos.org/centos/centos:latest Dec 17, 2018 05:07 210 MB 9b6563cfaff2 localhost/wget:latest Jan 16, 2019 11:01 234 MB $ buildah push wget:latest docker-daemon:registry.centos.org/centos/wget:latest Getting image source signatures Copying blob sha256:b05580fca2f9aabb2d8fa975b29146c9147c8418e559f197c54a4fac04babb95 200.47 MiB / 200.47 MiB [==================================================] 4s Copying blob sha256:fa5e7b9f8f4d8f07f7af27cd06269ba16ba0f06cbacacc7c7e96a616da885cab 22.82 MiB / 22.82 MiB [====================================================] 0s Copying config sha256:9b6563cfaff28baa1075e86b60c502f85fc31b56bdb641d314a7c61d2e91fae8 1.33 KiB / 1.33 KiB [======================================================] 0s Writing manifest to image destination Storing signatures Successfully pushed registry.centos.org/centos/wget:latest@sha256:66f4c1c8378c7d9e22a0d3c9a0943739082dfeae3344e5f2b069e9c9ddf08271 $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE registry.centos.org/centos/wget latest 9b6563cfaff2 6 minutes ago 226 MB

Initially, the local Docker daemon storage had no container images. We did buildah push wget:latest docker-daemon:registry.centos.org/wget:latest to push the image to local Docker daemon's storage. Now doing docker images shows the image and can then be used with docker run

That's it

In this blog, we saw simple steps that need to be performed to install and use buildah to build OCI images which can then be pushed to local Docker daemon's storage. buildah can also push container images to the remote registry. It is highly recommended to read the documentation to know about more features and capabilities of buildah .