DockerユーザのためのPodman/Buildah with RHEL8を利用したコンテナアプリケーション開発

Red Hatソリューションアーキテクトの小島です。

Red Hat Enterprise Linux (RHEL) 8からはRHEL7で導入されたDocker技術が削除され、Podman, Buildah, Skopeoなどの新しいコンテナ技術が導入されました。PodmanとBuildahについては赤帽エンジニアブログの他の記事で既に紹介されていますが、ここではPodman, Buildah, UBI(RHELをベースにした無償提供のコンテナイメージ)の具体的な利用手順を、スライド(P.7~)にまとめています。また、Red Hat Developer Programに参加して開発者向けの無償サブスクリプションを入手することで、これらの手順を無料で試してみることができます。Red Hat Developer Programについては下記の記事も参考にしてください。

rheb.hatenablog.com

↓利用手順例(コピペ用)
Podmanのインストール

$ sudo subscription-manager register
$ sudo subscription-manager attach --auto
$ sudo yum -y install podman 
$ sudo yum -y install podman-docker  <- podman-dockerは、dockerという名前でpodmanコマンドへのシンボリックリンクを作成するためのパッケージ(オプション)

Podmanの利用例

$ podman pull registry.access.redhat.com/ubi8/ubi:latest
$ podman run --name test01 -it registry.access.redhat.com/ubi8/ubi:latest /bin/bash
[root@c21ad143c67f /]# yum -y install httpd
[root@c21ad143c67f /]# exit
$ podman ps -a
CONTAINER ID  IMAGE                                       COMMAND    CREATED         NAMES
aeb95fb38a18  registry.access.redhat.com/ubi8/ubi:latest  /bin/bash  38 seconds ago  test01
$ podman start -ai test01
[root@aeb95fb38a18 /]# exit
$ podman commit test01 httpd_ubi_01
$ podman images
REPOSITORY                                    TAG      IMAGE ID       CREATED              SIZE
localhost/httpd_ubi_01                        latest   d610cfd1a46f   About a minute ago   242 MB
registry.access.redhat.com/ubi8/ubi           latest   ecbc6f53bba0   2 weeks ago          211 MB

UBIとDockerfileを利用したコンテナイメージの作成例

$ cat << EOF  > myecho
> echo "This container works!!"
> EOF
$ cat << EOF  > Dockerfile
> FROM registry.access.redhat.com/ubi8/ubi
> ADD myecho /usr/local/bin
> ENTRYPOINT "/usr/local/bin/myecho"
> EOF
$ chmod +x myecho 
$ ./myecho 
This container works!!
$ ls 
Dockerfile  myecho
$ podman build .
STEP 1: FROM registry.access.redhat.com/ubi8/ubi
...
Storing signatures
STEP 2: ADD myecho /usr/local/bin
9f842e451aeb46b0852a33362f0632d182008631e30ead39fa03bbd5ac8eb18f
STEP 3: ENTRYPOINT "/usr/local/bin/myecho"
STEP 4: COMMIT
0db4e77ef97e260c24129434881a51d06dcb32f5f38aaecf193aca62aa60c890
$ podman images
REPOSITORY                            TAG      IMAGE ID       CREATED         SIZE
<none>                                <none>   0db4e77ef97e   2 minutes ago   211 MB
registry.access.redhat.com/ubi8/ubi   latest   ecbc6f53bba0   2 weeks ago     211 MB

Red Hat Quay.io(無料かつ無制限に利用可能なパブリックレジストリのSaaSを提供)へのイメージのpush例

$ podman login quay.io
Username: <your_user_name>
Password: <your_password>
Login Succeeded!
$ podman images
$ podman tag <作成したイメージのContainer ID> quay.io/<your_user_name>/myecho
$ podman push quay.io/<your_user_name>/myecho

Buildahのインストールと利用例

$ sudo yum -y install buildah
$ buildah from scratch  <- 「working-container」という名前のscratchコンテナを作成
working-container
$ buildah unshare  <- 特権ユーザの権限を利用して、コンテナのrootファイルシステムをユーザのホームディレクトリの中にマウントできるようになります
# scratchmnt=$(buildah mount working-container)  <- scratchコンテナのrootファイルシステムをマウント
# yum install -y --releasever=8 --installroot=$scratchmnt redhat-release
  <- scratchコンテナでのRPMデータベースの初期化とredhat-releaseパッケージの追加
# yum install -y --setopt=reposdir=/etc/yum.repos.d \
     --installroot=$scratchmnt \
     --setopt=cachedir=/tmp/cache/dnf bash  <- scratchコンテナへのbashのインストール
# echo "echo Your container from scratch worked." > $scratchmnt/usr/local/bin/myecho <- scratchコンテナにmyechoファイルの追加
# chmod +x $scratchmnt/usr/local/bin/myecho
# buildah config --entrypoint "/usr/local/bin/myecho" working-container <- コンテナ起動時にmyechoファイルを実行することを指定
# buildah commit working-container localhost/myecho:latest <- scratchコンテナの変更をコミットして「localhost/myecho」イメージを作成
# exit

$ podman run localhost/myecho <- buildahで作成したイメージをpodmanで起動
Your container from scratch worked.

speakerdeck.com

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。