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
.
In a future blog, we will share how the CentOS Container Pipeline team managed to build container images on OpenShift using buildah
.
Neat! Looking forward to mentioned blog post.