CentOS Stream 9
Sponsored Link

Buildah : Install2022/03/15

 
Install Buildah that supports to create Container images.
It's possible to create OCI (Open Container Initiative) format image without specific Service Daemon.
[1] Install Buildah.
[root@dlp ~]#
dnf -y install buildah
[2] This is the basic usage for Buildah.
Create a working container from an image.
# create a working container from [centos] image

[root@dlp ~]#
buildah from centos:stream9

Resolved "centos" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull quay.io/centos/centos:stream9...
Getting image source signatures
...
...
Writing manifest to image destination
Storing signatures
centos-working-container

# show container list

[root@dlp ~]#
buildah containers

CONTAINER ID  BUILDER  IMAGE ID     IMAGE NAME                       CONTAINER NAME
516422a4010b     *     44ffcc4acee8 quay.io/centos/centos:stream9    centos-working-container

# show container image list

[root@dlp ~]#
buildah images

REPOSITORY              TAG       IMAGE ID       CREATED      SIZE
quay.io/centos/centos   stream9   44ffcc4acee8   4 days ago   152 MB

# possible to use images on podman

[root@dlp ~]#
podman images

REPOSITORY             TAG         IMAGE ID      CREATED     SIZE
quay.io/centos/centos  stream9     44ffcc4acee8  4 days ago  152 MB
[3] Operate Working Container.
# set shell variable

[root@dlp ~]#
container=$(buildah from centos:stream9)

[root@dlp ~]#
echo $container

centos-working-container-1
# possible to run commands

[root@dlp ~]#
buildah run $container echo "Hello Buildah World"

Hello Buildah World
[root@dlp ~]#
buildah run $container bash

[root@cfad55e0d3b5 /]#
dnf -y install python3

[root@cfad55e0d3b5 /]#
[root@dlp ~]#
buildah run $container python3 -V

Python 3.9.10
[4] Copy files into Working Container.
[root@dlp ~]#
echo "buildah test" > buildah.txt

[root@dlp ~]#
buildah copy $container buildah.txt /tmp/buildah.txt

7553c62d21edda64a3067fa9805a5cd8e5781c6058be12eb9792d7e0e9781ed4
[root@dlp ~]#
buildah run $container cat /tmp/buildah.txt

buildah test
[5] Mount filesystem of Working Container.
[root@dlp ~]#
buildah mount $container

/var/lib/containers/storage/overlay/1b67afef1b0ab8b7f527f0c5a748d7656fc80f4b70bc0346e9fe0ef5c13117ac/merged
[root@dlp ~]#
ll /var/lib/containers/storage/overlay/1b67afef1b0ab8b7f527f0c5a748d7656fc80f4b70bc0346e9fe0ef5c13117ac/merged

total 4
dr-xr-xr-x.  2 root root    6 Aug 10  2021 afs
lrwxrwxrwx.  1 root root    7 Aug 10  2021 bin -> usr/bin
dr-xr-xr-x.  2 root root    6 Aug 10  2021 boot
drwxr-xr-x.  2 root root    6 Mar 10 22:24 dev
drwxr-xr-x. 39 root root 4096 Mar 10 22:25 etc
drwxr-xr-x.  2 root root    6 Aug 10  2021 home
.....
.....

# unmount

[root@dlp ~]#
buildah umount $container

cfad55e0d3b59cd5624b439b916ee2735e5077c59d21e38283bc24cb9ac63116
[6] Create a container image from Working Container.
[root@dlp ~]#
buildah commit $container my-centos:latest

Getting image source signatures
...
...
Writing manifest to image destination
Storing signatures
776f546c925caefa697cb8c665d2198b9fa4930d90806f586aacf0168b6c40d0

[root@dlp ~]#
buildah images

REPOSITORY              TAG       IMAGE ID       CREATED          SIZE
localhost/my-centos     latest    776f546c925c   17 seconds ago   190 MB
quay.io/centos/centos   stream9   44ffcc4acee8   4 days ago       152 MB

# possible to use container images on podman

[root@dlp ~]#
podman run localhost/my-centos uname -a

Linux 4d5e0aaa29ed 5.14.0-70.el9.x86_64 #1 SMP PREEMPT Thu Feb 24 23:01:31 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
[7] Push a container image to a specified Registry.
[root@dlp ~]#
buildah images

REPOSITORY              TAG       IMAGE ID       CREATED         SIZE
localhost/my-centos     latest    776f546c925c   5 minutes ago   190 MB
quay.io/centos/centos   stream9   44ffcc4acee8   4 days ago      152 MB

# push [localhost/my-centos] image to [node01.srv.world:5000] registry
# if target registry is not on SSL/TLS, need [--tls-verify=false] option

[root@dlp ~]#
buildah push --tls-verify=false localhost/my-centos node01.srv.world:5000/my-centos

Getting image source signatures
...
...
...
Writing manifest to image destination
Storing signatures

[root@dlp ~]#
curl node01.srv.world:5000/v2/_catalog

{"repositories":["my-centos"]}
# possible to Pull from other nodes

[root@node01 ~]#
podman pull --tls-verify=false node01.srv.world:5000/my-centos

[root@node01 ~]#
podman images

REPOSITORY                       TAG         IMAGE ID      CREATED        SIZE
node01.srv.world:5000/my-centos  latest      776f546c925c  7 minutes ago  190 MB
docker.io/library/registry       2           8948869ebfee  6 days ago     24.7 MB
Matched Content