Red Hat Training

A Red Hat training course is available for RHEL 8

2.7. UBI init イメージの使用

この手順では、Containerfile を使用してコンテナーを構築する方法を紹介します。この Containerfile は、コンテナーがホストシステムで実行されている場合に Web サーバー (httpd) をインストールして、systemd サービス (/sbin/init) により Web サーバーが自動的に起動されるように設定します。podman build コマンドは、コンテキストディレクトリーにある場合に、 Containerfile を使用します。ない場合には、podman build コマンドは Dockerfile を使用します。それ以外の場合は、--file オプションでファイルを指定できます。Containerfile および Dockerfile 内で使用できる利用可能なコマンドは同じです。

手順

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

    FROM registry.access.redhat.com/ubi8/ubi-init
    RUN yum -y install httpd; yum 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

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

    $ sudo 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