Red Hat Training

A Red Hat training course is available for RHEL 8

第1章 コンテナーの使用

Linux コンテナーは、イメージベースのデプロイメント方法の柔軟性と、軽量アプリケーションの分離を組み合わせた、主要なオープンソースアプリケーションをパッケージ化して、配信するテクノロジーとして登場しました。RHEL は、以下のようなコア技術を使用して Linux コンテナーを実装します。

  • リソース管理用のコントロールグループ (cgroup)
  • プロセス分離用の namespace
  • SELinux (セキュリティー用)
  • セキュアなマルチテナンシー

このような技術は、セキュリティーエクスプロイトの可能性を軽減し、エンタープライズ品質のコンテナーを生成および実行する環境を提供します。

Red Hat OpenShift は、強力なコマンドラインと Web UI ツールを提供し、Pod と呼ばれる単位でコンテナーを構築、管理、および実行します。Red Hat では、OpenShift 外で個々のコンテナーおよび コンテナーイメージ をビルドして管理できます。本書では、RHEL システムで直接実行されるタスクを実行するためのツールについて説明します。

他のコンテナーツールの実装とは異なり、ここで説明するツールはモノリシック Docker の コンテナーエンジン と、docker コマンドを中心としたものではありません。代わりに、Red Hat はコンテナーエンジンがなくても動作できる一連のコマンドラインツールを提供します。これには、以下が含まれます。

  • Podman - Pod およびコンテナーイメージの直接管理 (runstopstartpsattachexec など)
  • buildah - コンテナーイメージの構築、プッシュ、および署名
  • skopeo - イメージのコピー、検証、削除、および署名
  • runc - podman および buildah へのコンテナーの実行機能と構築機能の提供
  • crun - ルートレスコンテナーの柔軟性、制御、セキュリティーを向上するために設定可能なオプションのランタイム。

これは、このツールが、Docker が生成して管理するのと同じ Linux コンテナーや、その他の OCI 互換コンテナー エンジン の管理に使用する Open Container Initiative (OCI) と互換性があるためです。ただし、シングルノードのユースケースでは、Red Hat Enterprise Linux で直接実行することが特に適しています。

マルチノードコンテナープラットフォームの場合は、「OpenShift」および「CRI-O Container Engine の使用」を参照してください。

1.1. Docker を使用せずにコンテナーを実行

Red Hat では、RHEL 8 から Docker コンテナーエンジンと、docker コマンドが削除されました。

注記
RHEL 8 では、Docker に対応していません。

Docker コマンド機能に代わる、Podman、Skopeo、Buildah ツールが開発されました。このシナリオの各ツールはより軽量になり、機能のサブセットに焦点を当てています。

Podman、Skopeo、Buildah ツールの主な利点は次のとおりです。

  • ルートレスモードでの実行 - ルートレスコンテナーは、特権を追加しなくても実行されるため、はるかに安全です。
  • デーモンの必要なし - コンテナーが実行されていない場合に、Podman でデーモンが常に実行されるわけではないので、これらのツールではアイドル時のリソース要件がはるかに少なくなります。
  • ネイティブ systemd 統合 - Podman では systemd ユニットファイルを作成し、コンテナーをシステムサービスとして実行できます。

RHEL で Docker を使用する場合は、異なるアップストリームプロジェクトから Docker を取得できますが、RHEL 8 では対応していません。Podman に Docker コマンドライン機能が多数実装されているため、docker と入力して podman が実行されるようにエイリアスを設定できます。

podman-docker パッケージをインストールすると、このエイリアスが設定されます。したがって、docker コマンドを実行するたびに、実際には podman コマンドを実行します。

Podman は Docker Socket API にも対応しているため、podman-docker パッケージは /var/run/docker.sock/var/run/podman/podman.sock の間でリンクを設定します。そのため、Docker デーモンを必要とせずに、docker-pydocker-compose ツールを使用して Docker API コマンドをそのまま実行できます。Podman はこのような要求を処理します。