RHEL8 コンテナー管理ツールのインストール
物理基盤・仮想化技術・コンテナー(コンテナー型仮想化)技術の比較と、RHEL8(Red Hat Enterprise Linux 8)へコンテナー管理ツールをインストールする方法について紹介します。本記事執筆時点でのRHEL8は、バージョン8.4です。
物理基盤・仮想化技術・コンテナー(コンテナー型仮想化)技術の比較
企業活動を支えるIT基盤(インフラ)のうち、アプリケーションを実行するサーバーには、物理マシン上で単一OSを稼働させる物理基盤や複数のOSを同時に稼働させる仮想化技術など、さまざまな形態があり、日々進化を続け、新しい技術が導入されています。
本記事では、まず始めに、物理基盤・仮想化技術(仮想化ソフトウェア方式・ハイパーバイザー方式)・コンテナー(コンテナー型仮想化)技術について、比較しながら特徴を紹介します。
物理基盤
物理マシン上の単一OSでアプリケーションを動作させる物理基盤は、仮想化技術と比較して、リソースの浪費が生じないため、高いパフォーマンスを発揮することができます。物理マシン上で動作するアプリケーションのピーク時の処理要件に合わせて、CPUやメモリーなどのリソースを設計するので、ピーク時でもリソース不足が生じにくく、高いパフォーマンスが維持されます。反面、ピーク時以外ではリソースの使用率が低下します。また、1台の物理マシンに導入されるアプリケーションは、運用上の理由などから、部門単位・プロジェクト単位・業務単位になるケースが多く、複数の物理マシンが乱立する要因の一つとなっています。
仮想化技術(仮想化ソフトウェア方式・ハイパーバイザー方式)
仮想化ソフトウェアやハイパーバイザーといったソフトウェアにより、物理マシン上のCPUやメモリーなどのリソースを論理的に統合・分割・共有することで、仮想的なハードウェア(仮想マシン)を作り出し、OS(ゲストOS)を実行します。アプリケーションを実行する複数の物理マシンを、仮想マシンとして統合することで、リソースの効率的な使用と運用管理にかかるコストや負担の軽減が期待できます。しかしながら、仮想マシン上でOSを動作させるため、オーバーヘッドが大きく、その分リソースが浪費されているといえます。
コンテナー(コンテナー型仮想化)技術
アプリケーションと、その動作に必要なライブラリーやミドルウェアを「コンテナー」と呼ばれる環境にパッケージ化したもので、コンテナーエンジン(コンテナーランタイム)上で動作します。コンテナーは、アプリケーションが動作する最小限のOS機能を備えていますが、カーネル部分はホストOSのものを使用します。そのため、専用のゲストOS(仮想マシン)が不要となり、リソースの浪費が最小限に抑えられます。また、アプリケーションの実行環境をパッケージ化しているため、高いポータビリティを実現しています。
コンテナーを複数の物理マシン上で実行するときに、コンテナーの管理を自動化するためのソフトウェアがコンテナーオーケストレーションツールです。コンテナーオーケストレーションツールには、アプリケーションへの負荷に応じて、コンテナーの実行先となるホストOSを増減するスケーリング管理・死活監視を行い、障害時には自動的に復旧するクラスター管理・アプリケーションのバージョンを展開するローリングアップデートなどの機能があります。
コンテナーの実行環境であるコンテナーエンジン(コンテナーランタイム)は、物理マシン上のホストOSだけでなく、仮想化技術におけるゲストOS上に構築されることもあります。
コンテナー(コンテナー型仮想化)技術
RHEL8(Red Hat Enterprise Linux 8)におけるコンテナー(コンテナー型仮想化)技術について詳しくみてみましょう。
コンテナー(Linuxコンテナー)とコンテナーイメージ
コンテナーは、システムや他のコンテナーとは分離されたプロセスで、実行に必要なファイルはすべてコンテナーイメージから生成されます。アプリケーションを内包するコンテナーイメージには、アプリケーションと依存関係にあるライブラリーやファイル、ミドルウェアが含まれているので、面倒な副作用を考えることなく、ホストOS間を移動することができます。例えば、ライブラリーのバージョンが異なることによる不具合を回避することができると言うことです。つまり、コンテナーイメージ内に、アプリケーション専用のLinuxディストリビューションが構築されていると見なすことができます。
コンテナーのアーキテクチャ
コンテナーイメージから生成されたコンテナーは、ホストOSのカーネルを共有しながら、独立したプロセスとして実行されます。これが、仮想マシンを作り出す仮想化技術と大きく異なる点です。仮想マシンによるオーバーヘッドやリソースの浪費がなく、高密度な並列動作などリソースの効率的な使用が期待できます。ただし、このことは、コンテナーイメージとホストOSのアーキテクチャ(amd64/arm64/ppc64le/x390x)に互換性が必要であることを示しています。
イメージレジストリー(イメージリポジトリー)
イメージレジストリー(イメージリポジトリー)は、コンテナーイメージを格納、管理するサービスです。以下は、代表的なイメージレジストリーです。
- Red Hat Container Catalog(https://registry.redhat.io/)
- Red Hat Quay(https://quay.io/)
- Docker Hub(https://hub.docker.com/)
- Google Container Registry(https://cloud.google.com/container-registry/)
- Amazon Elastic Container Registry(https://aws.amazon.com/ecr/)
Red Hatが運営するRed Hat Container Catalog(RHCC)は、Red Hatとパートナーによってサポートされ、認証済みのコンテナーイメージが登録されています。図2-1は、RHEL8のUniversal Base Images(UBI)を検索した結果です。UBIは、RHEL7/8のサブセットで構築され、新たなコンテナーイメージをビルドするときのベースとして使用できます。
Red Hat Container Catalogでは、コンテナーイメージのセキュリティレベルをA~Fまでの6段階で評価を行い、わかりやすいアイコンで表示しています。
イメージレジストリーには、オンラインのサービスを利用する方法以外に、ローカル環境に構築することもできます。
コンテナー管理ツール
RHEL8(Red Hat Enterprise Linux 8)では、コンテナー管理ツールとしてpodman・buildah・skopeoなどのコマンドが用意されています。
- podman :コンテナー・コンテナーイメージの管理(検索・実行・停止など)、およびコンテナーランタイム(高レベルランタイム)
- buildah :コンテナーイメージのビルドなど
- skopeo :コンテナーイメージのコピー・署名・同期など
- runc :コンテナ生成・実行などを行うコンテナーランタイム(低レベルランタイム)
- crun :C言語で書かれた高速および軽量のコンテナーランタイム(低レベルランタイム)
podmanは、イメージレジストリーからコンテナーイメージを検索・取得して、ローカル環境で、そのコンテナーイメージからコンテナを生成・実行したり、コンテナーに関するさまざまな管理を行います。また、コンテナーの実行時には、コンテナーランタイム(高レベルランタイム)として動作します。
Red Hatでは、RHEL8(Red Hat Enterprise Linux 8)以降、Dockerコンテナーエンジン、およびdockerコマンドが削除されました。podmanに、dockerコマンドの機能が多数実装されており、エイリアスとして動作するように設定できます。
コンテナーランタイム
コンテナーランタイムには「高レベル(CRI)ランタイム」と「低レベル(OCI)ランタイム」という2つのレイヤーが存在しています。podmanによるコンテナーの実行には、常駐サービス(デーモンプロセス)が不要で、コンテナーは一つのプロセスとして処理されます。この時、podmanが高レベルランタイムとなり、低レベルランタイムであるrunc(またはcrun)を呼び出すかたちで動作します。低レベルランタイムの呼び出しは「OCI Runtime Specification」という標準仕様に準拠して行われます。
コンテナー管理ツールのインストール
事前に、RHEL8のインストール、システムの登録とサブスクライブを完了しておきます。それぞれ「RHEL8 標準的なインストール」「RHEL8 システムの登録とサブスクライブ」を参照してください。
コンテナー管理ツールのインストール
次のコマンドでpodman・buildah・skopeo・runc・crunツールを含むcontainer-toolsモジュールをインストールします。
インストール完了後、それぞれのバージョンを確認します。
エイリアスの設定
podmanのエイリアスとして、dockerコマンドが使えるようにするには、podman-dockerパッケージをインストールします。
試しにdockerのバージョンを表示してみましょう。podmanのバージョンが表示されれば、エイリアスとして正しく動作しています。
以上で、コンテナー管理ツールのインストールが完了しました。