CentOS 7とPodmanで触ってみようRed Hat UBI - ビルド編

Red Hatの平です。今回も知っている人は使っている Red Hat UBI のお話です。前回の記事を読んでいない方は、こちらから

rheb.hatenablog.com

Podman でのコンテナーイメージのビルド方法

カスタムのコンテナーイメージをビルドする方法として、現在のところメジャーどころなのが Dockerfile です。 Podman では podman build コマンドにて Dockerfile を読み込んでカスタムのコンテナーイメージをビルドすることができます。

今回はCentOS 7上にてコンテナーエンジン Podman を使い、Red Hat UBI のコンテナーイメージをビルドする方法についてご紹介します。

Dockerfile のサンプルの取得

今回は弊社のエンジニア Fernando Lozano がGitHubに公開しているサンプルがありますので、こちらを使って試してみましょう。

github.com

# git clone https://github.com/flozanorht/testphp-ubi.git

Dockerfile の中身を確認してみましょう。こちらはApache上のPHP 7.2で動くHello Worldのサンプルです。

# cd testphp-ubi

# cat Dockerfile.ubi8
FROM registry.redhat.io/ubi8/ubi
#FROM registry.access.redhat.com/ubi8/ubi

RUN yum --disableplugin=subscription-manager -y module enable php:7.2 \
  && yum --disableplugin=subscription-manager -y install httpd php \
  && yum --disableplugin=subscription-manager clean all

ADD index.php /var/www/html

RUN sed -i 's/Listen 80/Listen 8080/' /etc/httpd/conf/httpd.conf \
  && mkdir /run/php-fpm \
  && chgrp -R 0 /var/log/httpd /var/run/httpd /run/php-fpm \
  && chmod -R g=u /var/log/httpd /var/run/httpd /run/php-fpm
  
EXPOSE 8080

USER 1001

CMD php-fpm & httpd -D FOREGROUND

Dockerfile のビルド

では podman build コマンドでコンテナーをビルドします。Dockerfile.ubi8 を指定しないとRHEL 7ベースのUBIが使われますのでご注意ください。

# podman build -t php-ubi -f Dockerfile.ubi8 .

STEP 1: FROM registry.redhat.io/ubi8/ubi
Getting image source signatures
Copying blob c585fd5093c6 skipped: already exists
Copying blob e61d8721e62e skipped: already exists
Copying config c7a62535df done
Writing manifest to image destination
Storing signatures
STEP 2: RUN yum --disableplugin=subscription-manager -y module enable php:7.2
&& yum --disableplugin=subscription-manager -y 
install httpd php   && yum --disableplugin=subscription-manager clean all
Red Hat Universal Base Image 8 (RPMs) - AppStre 828 kB/s | 1.9 MB     00:02    
Red Hat Universal Base Image 8 (RPMs) - BaseOS  812 kB/s | 737 kB     00:00    
Dependencies resolved.
================================================================================
 Package           Arch             Version             Repository         Size
================================================================================
Enabling module streams:
 httpd                              2.4                                        
 nginx                              1.14                                       
 php                                7.2                                        
((...snip))
Complete!
16 files removed
94987b2a05737c44f7aeb04b46351f86441472f07c7dec43f6c1f92c1dabfc2d
STEP 3: ADD index.php /var/www/html
6785efbf7402f112bcd8f97cbf16272fffc30be6a149e0c3fbec27c911ad3f9f
STEP 4: RUN sed -i 's/Listen 80/Listen 8080/' /etc/httpd/conf/httpd.conf
&& mkdir /run/php-fpm   && chgrp -R 0 /var/log/httpd /var/run/httpd /run/php-fpm
&& chmod -R g=u /var/log/httpd /var/run/httpd /run/php-fpm
86200cf38336a1f4f150020c070c77a7235d110bf03e286b724628cd618ef805
STEP 5: EXPOSE 8080
e3b0aea4dbd16430da84676d7eeb79030e0386c11553228a68b8907e9e258cb0
STEP 6: USER 1001
fc1bd8a3049a8b014fc3afdbcd7bf955773966e4ef30516010ec5446e0201cc4
STEP 7: CMD php-fpm & httpd -D FOREGROUND
STEP 8: COMMIT php-ubi
783fd57d5c4064a8099a3067c2f8b0106e1b329f0470961f9e5947197645aa33

コンテナーイメージの動作確認

ビルドがうまくできたら完成したコンテナーイメージを動かしてみましょう。curlコマンドでリクエストが戻ってきたら成功です。 あとは、コンテナーを止めて消しておきましょう。

# podman run --name hello -p 8080:8080 -d localhost/php-ubi
0eb31fc1e5cdfcabf4db2e07c13014d4b0391d5fdfe6eaf1c20896015f839eaf

# curl http://localhost:8080
<html>
<body>
Hello, world!
</body>
</html>

# podman stop hello

# podman rm hello

日頃から CentOS に慣れている方なら、Red Hat UBI は難しくないかと思います。たくさんの人に安全に使って欲しいコンテナーイメージで配りたいと思ったらRed Hat UBI も候補に入れてください。

Red Hat UBI について他にも情報が欲しい場合、Red Hat Developer Blogの次のエントリーの最後に各種リンクがまとまっています。

developers.redhat.com

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