第7章 UBI コンテナーへのソフトウェアの追加


Red Hat リポジトリーから追加のソフトウェアをインストールすることで、Universal Base Images (UBI) の機能を強化します。実行中のコンテナーにパッケージを追加するには、イメージタイプに応じて、dnf または microdnf を使用します。

Red Hat は、RHEL コンテンツの一部から UBI をビルドします。UBI は、UBI でインストールするために自由に利用可能な RHEL パッケージのサブセットも提供します。RPM パッケージと更新を含む DNF リポジトリーを使用すると、実行中のコンテナーにソフトウェアを追加または更新できます。UBI は、たとえば Python、Perl、Node.js、Ruby などの、事前にビルドされた言語ランタイムコンテナーイメージを提供します。

UBI コンテナーを実行するパッケージを UBI リポジトリーから追加するには、以下を行います。

  • UBI init および UBI 標準イメージでは、dnf コマンドを使用します。
  • UBI minimal イメージでは、microdnf コマンドを使用します。

7.1. UBI init イメージの使用

UBI init イメージを使用して、システムサービスを実行するコンテナーをビルドします。これにより、Web サーバーなどのアプリケーションを、コンテナー内で systemd を介して自動的に起動するように設定できます。

コンテナーがホストシステム上で実行されるときに、systemd サービス (/sbin/init) によって自動的に起動するように Web サーバー (httpd) をインストールおよび設定する Containerfile を使用してコンテナーを構築できます。podman build コマンドは、1 つ以上の Containerfiles と指定されたビルドコンテキストディレクトリー内の指示を使用してイメージをビルドします。コンテキストディレクトリーは、アーカイブ、Git リポジトリー、または Containerfile の URL として指定できます。コンテキストディレクトリーが指定されていない場合、現在の作業ディレクトリーはビルドコンテキストと見なされ、Containerfile が含まれている必要があります。--file オプションで Containerfile を指定することもできます。

前提条件

  • container-tools メタパッケージがインストールされている。

手順

  1. 新しいディレクトリーに以下の内容を含む Containerfile を作成します。

    FROM registry.access.redhat.com/ubi10/ubi-init
    RUN dnf -y install httpd; dnf clean all; systemctl enable httpd;
    RUN echo "Successful Web Server Test" > /var/www/html/index.html
    RUN mkdir /etc/systemd/system/httpd.service.d/; echo -e '[Service]\nRestart=always' > /etc/systemd/system/httpd.service.d/httpd.conf
    EXPOSE 80
    CMD [ "/sbin/init" ]

    Containerfile は、httpd パッケージをインストールし、ブート時に httpd サービスが開始できるようにし、テストファイル (index.html) を作成し、Web サーバーをホスト (ポート 80) に公開し、コンテナーの起動時、systemd init サービス (/sbin/init) を開始します。

  2. コンテナーをビルドします。

    # podman build --format=docker -t mysysd .
  3. オプション: お使いのシステムで systemd を使用してコンテナーを実行し、SELinux を有効にする場合は、container_manage_cgroup ブール値変数を設定する必要があります。

    # setsebool -P container_manage_cgroup 1
  4. mysysd_run という名前のコンテナーを実行します。

    # podman run -d --name=mysysd_run -p 80:80 mysysd

    mysysd イメージが mysysd_run コンテナーをデーモンプロセスとして実行し、コンテナーのポート 80 がホストシステムのポート 80 に公開されます。

    注記

    ルートレスモードでは、1024 以上のホストのポート番号を選択する必要があります。以下に例を示します。

    $ podman run -d --name=mysysd -p 8081:80 mysysd

    1024 未満のポート番号を使用するには、net.ipv4.ip_unprivileged_port_start 変数を変更する必要があります。

    # sysctl net.ipv4.ip_unprivileged_port_start=80
  5. コンテナーが実行されていることを確認します。

    # podman ps
    a282b0c2ad3d  localhost/mysysd:latest  /sbin/init  15 seconds ago  Up 14 seconds ago  0.0.0.0:80->80/tcp  mysysd_run
  6. Web サーバーをテストします。

    # curl localhost/index.html
    Successful Web Server Test
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る