前回はコンテナの構造について説明した。今回は、具体的なプロダクト(製品)を挙げながら、コンテナの選択肢を紹介していく。紹介するプロダクトは以下の図の通りである。

コンテナエンジン

まず、コンテナそのものを構成するコンテナエンジンの選択肢を紹介する。コンテナエンジンに関する説明は第3回を参照いただきたい。

Docker

Dockerは現在、コンテナエンジンのデファクトスタンダードと言えるプロダクトである。Dockerが開発したオープンソースのコンテナエンジンで、LinuxやWindowsなど現在利用されている多くのOSで動作可能である。Web上で多くのナレッジを検索できることから、これからコンテナに入門するのであれば、コンテナエンジンとしてDockerを選んでまず間違いないだろう。

なお、Dockerには2種類のエディションがあり、単にDockerという場合は無償版のDocker Community Edition(通称、Docker CE)を指すことが多い。有償版のDocker Enterprise Edition(通称、Docker EE)については後ほど触れる。

Podman

PodmanはRedHatが開発したコンテナエンジンである。Red Hat Enterprise Linux (以下、RHEL) では最新のバージョン8からDockerに代わり、Podmanが標準のコンテナエンジンとなった。使い勝手はDockerに近いため、RHELのシステムにおいてはDockerではなくPodmanを利用するのが良いだろう。

以上の通り、現状でコンテナエンジンを選ぶとすればRHEL以外ではDocker、RHELではPodmanを選択するとよいだろう。

なお、コンテナエンジンと一言で言っても、実はHigh-Levelコンテナランタイム、Low-Levelコンテナランタイムなどさらに細かく分けることもできる。今回はそこまで踏み込まないが、それらランタイムごとの違いを調べてもおもしろいかもしれない。

オーケストレータ

本連載では触れていないが、コンテナエンジンのみで大規模なコンテナ環境を管理することは難しい。なぜならば、コンテナエンジンは自身が動作するサーバの範囲でしかコンテナを管理しないからである。そのため、複数サーバにまたがるコンテナの配置などを行う場合、コンテナオーケストレーションを導入することになり、その選択肢について紹介する。

Kubernetes

Kubernetesは現在、コンテナ・オーケストレーションのデファクトスタンダードと言えるプロダクトである。Googleが開発したものをベースに、現在はCNCFという団体で開発が進められているオープンソースのコンテナ・オーケストレーションである。複数サーバにまたがるコンテナの配置やコンテナ停止時の自動再作成など、多くの機能を標準で提供している。

Docker Swarm

Docker Swarmは、Dockerが開発したコンテナオーケストレーションである。Kubernetesよりもシンプルにコンテナ環境を管理することができる。Dockerにバンドルされているため、Dockerだけでコンテナ環境の管理を完結することが可能。

以上の通り、現状ではデファクタスタンダードであるKubernetesを利用するケースが多い。しかしながら、Kubernetesは高機能である分、複雑である。そのためシンプルにコンテナを管理したいのであればDocker Swarmという選択肢もある。

有償ライセンス

今まで紹介してきたコンテナエンジンやコンテナオーケストレーションは基本的にオープンソースのプロダクトである。オープンソースは無償で利用できる反面、ベンダーによる保守サポートを受けることができない。以下のプロダクトは有償ライセンスではあるものの、保守サポートを受けることができる。

Red Hat OpenShift Container Platform

Red Hat OpenShift Container Platformは、RedHatが開発したKubernetesをベースにしたコンテナプラットフォームである。Kubernetes単体には含まれないコンテナレジストリ、ログやメトリクスの集約および可視化の機能を備えている。また、ソースコードからコンテナイメージをビルドすることもでき、開発者向けのPaaS基盤としての機能を備えている。

Docker Enterprise Edition

Docker Enterprise Editionは、Dockerが提供しているDockerエンジンの商用ライセンスである。コンテナオーケストレーションはKubernetesとDocker Swarmを選択できる。レジストリのスキャンなどDocker CEにはないセキュリティ機能が強化されている。

マネージド・サービス

上記では、自分でコンテナのシステムを構築する際に必要となるプロダクトを紹介した。ただし最近は、利用者自身で環境を準備するのではなく、クラウド上のマネージド・サービスを活用することで迅速かつ簡単にコンテナ環境を手にすることができる。

以下の通り、主要なクラウドベンダーからコンテナ環境のマネージド・サービスが提供されている。

Amazon Elastic Container Service/Elastic Kubernetes Service

Amazon Web Servicesは、コンテナ環境のマネージド・サービスとして、Amazon Elastic Container Service(ECS)/Elastic Kubernetes Service(EKS)を提供している。

ECSはAWSが独自に開発したコンテナオーケストレーションを用いたサービスである。AWS Fargateを利用できたり、他AWSサービスとの連携もしやすかったりといった特徴がある。

EKSはKubernetesをベースにしたサービスである。他のクラウドベンダーに比べて、Kubernetesのサービスとしては後発となる。そのため、まだ機能的に劣る点もあるが、Fargate対応など今後の進化に期待できる。

Google Kubernetes Engine(GKE)

Google Kubernetes Engineは、Googleが提供するクラウドサービス「Google Cloud Platform(GCP)」におけるKubernetesをベースにしたコンテナ環境のマネージド・サービスである。

Kubernetesは元々Googleのプロダクトだったこともあり、マネージドKubernetesサービスとしては最も成熟している。

Azure Kubernetes Service

Azure Kubernetes Serviceは、Microsoftが提供するクラウドサービス「Azure」におけるKubernetesをベースにしたコンテナ環境のマネージド・サービスである。マネージドKubernetesサービスとしての成熟度合いは、GKEとEKSの中間にあたる。

以上の通り、主要なクラウドベンダーからそれぞれコンテナ環境のマネージド・サービスが既に提供されている。細かな機能の差はあるものの、足りない分は利用者で実装すれば機能としての差はほとんどない。そのため、サービスを選定する際は、機能のみで評価するのではなく、データの所在やクラウドベンダーが提供するその他のサービスなども加味して検討するのがよいだろう。

本連載では、「コンテナとは?」から始まり、「コンテナの特性」や「仕組み」、そして今回の「選択肢」とひととおり触れてきた。なるべく業界の経験が少ない読者に対しても理解ができるように心がけて執筆したため、深い内容の説明は敢えて省いている。

本連載で「コンテナ」に興味を持たれた読者には、さらに自分で調べたり、実際にコンテナを導入してみたりすることをお薦めする。実際に手を動かすと理解も早まるため、今回紹介したプロダクトの選択肢の中から着手しやすいと思うものを選び、試してみるとよいだろう。一人でも多くの方に本連載が役に立てれば幸いである。

著者プロフィール

毛利 亮太


2009年にTIS入社。入社後から現在まで一貫してインフラに関わる業務に携わり、大小様々なプロジェクトの推進を行う。 最近では、コンテナ技術を専門に扱う推進チームにてエンタープライズ向けのコンテナ導入支援を行う。