第1章 コンテナーの使用

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

Red Hat Enterprise Linux は、リソース管理用のコントロールグループ (Cgroup)、プロセス分離用の名前空間、SELinux によるセキュリティーなどのコアな技術を使用して Linux コンテナーを実装します。これにより、セキュアなマルチテナントが可能になり、セキュリティーの悪用の可能性が低減します。これは、エンタープライズ品質のコンテナーを生成および実行する環境を提供することを目的としています。

Red Hat OpenShiftは、Pod と呼ばれる単位でコンテナーを構築、管理、および実行を行う、強力なコマンドラインと Web UI ツールを提供します。ただし、OpenShift 外で、個々のコンテナーおよび コンテナーイメージ を構築および管理したい場合があります。RHEL システムで直接実行するこのようなタスクを実行するツールは、本ガイドで説明します。

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

  • podman - Pod ポッドおよびコンテナーイメージを直接管理 (run、stop、start、ps、attach、exec など)
  • buildah - コンテナーイメージの構築、プッシュ、および署名
  • skopeo - イメージのコピー、検証、削除、および署名
  • runc - podman および buildah に、コンテナーの実行機能と構築機能を提供

これは、このツールが、Docker が生成して管理するのと同じ Linux コンテナーや、その他の OCI 互換コンテナー エンジン の管理に使用する Open Container Initiative (OCI) と互換性があるためです。ただし、シングルノードのユースケースでは、Red Hat Enterprise Linux で直接実行することが特に適しています。対応しているコンテナーツールの一覧は、「What container runtimes and container managment tools are supported in Red Hat Enterprise Linux?」を参照してください。

マルチノードのコンテナープラットフォームは、OpenShift を参照してください。本書で説明されているシングルノード、デーモンレスツールの代わりに、OpenShift ではデーモンベースのコンテナーエンジンが必要です。詳細は「CRI-O コンテナーエンジンの使用」を参照してください。

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

Red Hat が OpenShift から削除したのは、Docker コンテナーエンジンだけでははありません。docker コマンドと Docker コンテナーエンジンも、Red Hat Enterprise Linux 8 から完全に削除しました。RHEL 8 には Docker が含まれず、Red Hat のサポート対象外になります (ただし、他のソースから引き続き利用できます)。

Docker の削除は、コンテナーがどのように扱われるかに関する Red Hat の考え方の変更を反映しています。

  • 企業は、コマンドラインからコンテナーを個別に実行することを重視していません。コンテナーは、主に OpenShift などの、Kubernetes ベースのプラットフォームで使用されます。
  • OpenShift を、コンテナーを実行するプロジェクトとして再配置することで、Docker などのコンテナーエンジンが、エンドユーザーによる直接アクセスがない、OpenShift の別のコンポーネントになります。
  • OpenShift のコンテナーエンジンは直接使用することを目的としていないため、スタンドアロン機能の多くを実装しなくても、OpenShift が必要とする機能をすべて実行することに焦点をあてる、限定された機能セットで実装できます。

RHEL 8 では Docker が 提供されなくなり、シングルノードの使用には OpenShift のコンテナーエンジンが含まれなくなりましたが、コンテナーとイメージは、引き続きコマンドを使用して手動で操作したいという声がありました。そこで Red Hat は、docker コマンドが行う作業のほとんどを実装するツールセットの作成に取り掛かりました。

このような docker コマンド機能を引き継ぐために、podmanskopeobuildah などのツールが開発されました。このシナリオの各ツールはより軽量になり、機能のサブセットに焦点があたっています。また、このツールでは、コンテナーエンジンを実装するために実行するデーモンプロセスが必要なく、デーモンプロセスを使用するオーバーヘッドを使用せずに実行できます。

RHEL 8 で Docker を使用する場合は、別のアップストリームプロジェクトから Docker を取得できるものの、RHEL 8 ではその使用がサポートされない点に注意してください。podman に正確に実装されている docker コマンドライン機能が多すぎるため、docker と入力して podman を実行するエイリアスを設定できます。

podman-docker パッケージをインストールすると、このようなエイリアスが設定されます。docker コマンドラインを実行すると、実際には podman が実行します。このパッケージは後で追加してください。