CentOS 7とPodmanで触ってみようRed Hat UBI - 導入編

Red Hatの平です。アプリケーションの展開形式としてコンテナーイメージが注目を浴びています。今お使いの開発環境は何ですか?CentOS か Ubuntu という方も多いでしょう。 その方はぜひ、Red Hat UBI (Red Hat Universal Base Image)を使ってみてください。Red Hatの品質管理を経て提供されるコンテナーイメージが無償で自由に利用、再配布できます。

Red Hat UBI (Red Hat Universal Base Image) とは

Red Hat UBI は Red Hat Enterprise Linuxのサブセットで、OSSプロジェクトやISV(独立ソフトウェアベンダー)がコンテナーイメージを配布するために利用することを意図して作成されています。

一番の魅力としては Red Hat UBI をベースとして作ったコンテナーイメージを RHEL および Red Hat OpenShift 上のコンテナーとして動かす場合には Red Hat からのサポートを受けることができます。それ以外の Docker や Kubernetes などのコンテナー環境で動かした場合でもサポートこそ提供されませんが無償で使っても構わないという太っ腹の提供形態です。

RHELの一部のパッケージはRed Hat UBIでは削られており、RHELのすべてのパッケージが含まれている訳ではありません。具体的にはGUIやCUIのユーザーランドの一部、データベースサーバーなどのパッケージは含まれておりません。 もちろん、Webアプリを動かすために必要な httpd や nginx などのコンテナー上でアプリを動かすためのランタイムとなるパッケージは含まれています。 RHEL 8のローンチのタイミングで誕生しましたが、Red Hat UBI は、RHEL 8ベースのものだけではなくRHEL 7ベースのUBIもご用意してあります。

詳しく知りたい方は、こちらのブログもご覧ください。

www.redhat.com

今回はCentOS 7上にてコンテナーエンジン Podman を使い、Red Hat UBI のコンテナーイメージに如何にアクセスするのか、どのようにRed Hat UBIを使えるのかご紹介します。

Registry Service Accounts の取得

まず、最初に Red Hat UBI のコンテナーイメージを取得する場合にはRed Hat ID もしくは Registry Service Accounts が必要です。 Red Hat IDはカスタマーポータルにログインする時に使うアカウントです。Service Accountは"|"区切りで7桁の数字と任意のアルファベットから構成されます。パスワードとして約700文字のTokenが割り当てられます。

Podman のインストール

コンテナーエンジンのpodmanをインストールします。dockerコマンドに慣れている方は podman-docker パッケージもインストールしましょう。 podman-docker を導入すると docker コマンドが podman のエイリアスとなり、それっぽく動きます。

今回の記事ではDockerは邪魔なのでアンインストールします。 ※podman-docker パッケージを入れると docker パッケージと conflict します。podman-docker を入れなければ消さずに同居できます。きちんと使っている人は docker パッケージ消さないでね。

# yum remove docker -y
# yum install podman podman-docker -y

インストール後に Podman から registry.redhat.io のレジストリにログインします。今回の記事で使うアカウントは Service Account です。

※共用環境用のコンテナーインフラからログインする場合、管理者のRed Hat IDの代わりに Registry Service Accounts を使用することが望ましいです。

# podman login registry.redhat.io -u '12345678|myaccount'
Password: 
Login Succeeded!

UBI の検索

ログインに成功したらRHEL 8ベースのUBIのコンテナーイメージを検索してみましょう。RHEL 7ベースのUBIもありますよ。 一般利用イメージのubi8, 最小化イメージのubi8-minimal, 複数のサービスを起動するために systemd 初期化システムが含まれている ubi8-init があります。 また、目的に応じた OpenJDK / Python / Ruby などがあらかじめ含まれているUBIも用意されています。

# podman search registry.redhat.io/ubi8 --limit 3                                                    
INDEX       NAME                                          DESCRIPTION                                       STARS   OFFICIAL   AUTOMATED
redhat.io   registry.redhat.io/ubi8                       The Universal Base Image is designed and eng...   0                  
redhat.io   registry.redhat.io/openjdk/openjdk-11-rhel8   OpenJDK S2I image for Java Applications on U...   0                  
redhat.io   registry.redhat.io/openjdk/openjdk-8-rhel8    OpenJDK 1.8 Image for Java Applications base...   0          

UBI の取得

今回はレジストリからUBI 8のコンテナーイメージを取得します。 イメージのサイズを確認すると約200MBですね。ちなみに極小化した ubi8-minimal は100MB以下です。

# podman pull registry.redhat.io/ubi8 
Trying to pull registry.redhat.io/ubi8...Getting image source signatures
Copying blob c585fd5093c6 done
Copying blob e61d8721e62e done
Copying config c7a62535df done
Writing manifest to image destination
Storing signatures
c7a62535df3cebd7cb714574c04fb3aa71b92551c11a164cef461855360d3970

# podman images
REPOSITORY                TAG      IMAGE ID       CREATED       SIZE
registry.redhat.io/ubi8   latest   c7a62535df3c   3 weeks ago   216 MB

UBI イメージを起動してみる

試しにUBIイメージのコンテナーをインタラクティブモードで起動してみましょう。 /etc/redhat-release の中身を見ると「Red Hat Enterprise Linux release 8.0 (Ootpa)」と出てきます。 パッケージレポジトリは通常のRHEL 8のレポジトリではなく、UBIのレポジトリ ubi-8-baseos と ubi-8-appstream が参照されます。 もちろん、UBIのレポジトリからパッケージのアップデートも可能です。 最後に exit してください。

# podman run -it registry.redhat.io/ubi8 bash

bash-4.4# cat /etc/redhat-release 
Red Hat Enterprise Linux release 8.0 (Ootpa)

bash-4.4# df -h
Filesystem      Size  Used Avail Use% Mounted on
overlay          24G  266M   24G   2% /
tmpfs            64M     0   64M   0% /dev
tmpfs           2.0G  8.8M  2.0G   1% /etc/hosts
shm              63M     0   63M   0% /dev/shm
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
tmpfs           2.0G     0  2.0G   0% /proc/acpi
tmpfs           2.0G     0  2.0G   0% /proc/scsi
tmpfs           2.0G     0  2.0G   0% /sys/firmware
tmpfs           2.0G     0  2.0G   0% /sys/fs/selinux

bash-4.4# yum repolist
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Last metadata expiration check: 0:14:34 ago on Wed Aug 14 03:42:28 2019.
repo id                         repo name                                                          status
ubi-8-appstream                 Red Hat Universal Base Image 8 (RPMs) - AppStream                  769
ubi-8-baseos                    Red Hat Universal Base Image 8 (RPMs) - BaseOS                     645

bash-4.4# exit

ここまで Podman から Red Hat UBI を触ってみるところまでご紹介しました。少々記事が長くなりましたので分割します。次回は Podman に Dockerfile を与えてコンテナーイメージを作っていきます。

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