Red Hatの平です。今回も知っている人は使っている Red Hat UBI のお話です。前回の記事を読んでいない方は、こちらから
Podman でのコンテナーイメージのビルド方法
カスタムのコンテナーイメージをビルドする方法として、現在のところメジャーどころなのが Dockerfile です。 Podman では podman build コマンドにて Dockerfile を読み込んでカスタムのコンテナーイメージをビルドすることができます。
今回はCentOS 7上にてコンテナーエンジン Podman を使い、Red Hat UBI のコンテナーイメージをビルドする方法についてご紹介します。
Dockerfile のサンプルの取得
今回は弊社のエンジニア Fernando Lozano がGitHubに公開しているサンプルがありますので、こちらを使って試してみましょう。
# 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の次のエントリーの最後に各種リンクがまとまっています。