オープンソース

仮想化のおすすめOSS「コンテナ型で使えるOSS」

コンテナ型仮想基盤では、1つのOSの上で完全に独立した複数のアプリケーションを動作させます。コンテナ型は、ホスト型やハイパーバイザ型に比べ省リソースで動作することができます。そのため、より多くのアプリケーションを稼働させることが可能です。他にも、動作環境をそのまま保存できるというメリットもあり、業務効率や開発者の生産性向上に役立っています。ここでは、コンテナ基盤で使用すると便利なOSSを紹介します。

コンテナ型で使えるOSS

仮想基盤相関図

  1. Docker
  1. runc
  1. Kubernetes
  1. podman
  1. Kata Container
  1. Rancher
  1. containerd
  1. gVisor
  1. Portainer
  1. CRI-O
  1. rkt

コンテナ型仮想基盤のOSS

5. Docker

Dockerとは、コンテナ型の仮想環境を作成、配布、実行するためのソフトウェアです。Docker社が開発し、オープンソースソフトウェアとして公開されています。前述のコンテナ型仮想化の説明の通り、Dockerの仕組みは、他の仮想環境に比べ省リソースで、起動が速く劣化が少ないと言われています。

コンテナ仕組みのイメージ

Dockerは、Docker-HUBなどのリポジトリから、あらかじめ設定された様々なコンテナイメージを入手することが可能です。そのため、初期設定や細かな設定等をカスタマイズする必要がなく、すぐに稼働させることができます。また、Dockerで作成したイメージは、GitLabなどの独自のレジストリサーバでも管理することができます。

このように、理想のコンテナ環境を保存・流用できることから、アプリケーション開発において近年普及してきた、CI/CD(Continuous Integration/Continuous Delivery:継続的インティグレーション/継続的デリバリー)の手法を容易に取り入れることができると考えられています。

問い合わせ

6. podman

podmanとは、オープンソースソフトウェアのコンテナ管理ツールで、RedHat社によって開発が行われました。Dockerdやcontainerdのようなデーモンプロセスを必ず経由して使うシステムは、これらのプロセスが停止すると全機能が停止してしまうという危険性があります。そのため、Podmanは、UNIXドメインソケットを使わずに動作します。また、systemdとの連携なども簡単に行えるようになっていたり、ユーザ毎のローカルレポジトリが利用できるようになっていたりなど、Linuxとの親和性がより強化されています。

問い合わせ

ランタイム

コンテナ型仮想化は、OCI Runtime Specification、OCI Image Format Specification、CRI(Container Runtime Interface)などの規定によって、アーキテクチャーが標準化されています。図は、そのアーキテクチャを示したものです。

アーキテクチャ

以下で紹介するcontainerd、CRI-Oは、このアーキテクチャのうち高レベルのランタイムとして、runc、Kata Container、gVisorは、低レベルのランタイムとして実装されています。rktは、このアーキテクチャに完全には準拠しておらず、高レベルのランタイムと低レベルのランタイムの両方の機能を担っています。

7. containerd

containerdとは、OCI Runtime Specificationに基づいて作られた、KubernetesやDockerの高レベルなランタイムです。Dockerから派生したオープンソースソフトウェアで、コンテナ型仮想化のデファクトスタンダードとしてDockerから代わりつつあります。containerdには、ctrコマンドが付属しており、コンテナのダウンロードや実行などを行うことができます。

containerdのアーキテクチャ

containerdのアーキテクチャ

Docker社は、Dockerのコンテナ管理機能を分離して、CNCF(Cloud Native Computing Foundation)に寄贈しました。CNCFは、そのコードをまとめて、2018年にcontainerdとして公開しました。そのため、Dockerは、標準ではcontainerdを利用して動作するようになっています。

問い合わせ

8. CRI-O

CRI-Oとは、コンテナ型仮想化で使われる技術の1つで、KubernetesやDockerの高レベルなランタイムです。Kubernetesとコンテナランタイムが通信するための仕様として規定されているCRIと、OCI Runtime Specificationに基づいて作られました。CNCFで開発が行われ、オープンソースソフトウェアとして公開されています。

CRI-Oのアーキテクチャ

CRI-Oのアーキテクチャ

同じく高レベルのランタイムであるcontainerdは、DockerとKubernetesから利用できる汎用のランタイムとして知られています。対して、CRI-Oは、Kubernetesに最適化させた軽量なランタイムとして開発されており、Kubernetesのバージョンアップと同じペースで開発が行われています。

問い合わせ

9. runc

runcとは、OCI Runtime Specificationに基づいて作られたKubernetesやDockerの低レベルなランタイムです。2017年にOCIが作成した仕様により、Dockerはいくつかの要素に分割されました。runcは、この分割の過程でDockerから分離されたもので、オープンソースソフトウェアとして公開されています。runc単独では、コンテナの起動と動作を管理するためのCLIツールとしても利用することができます。

runcのアーキテクチャ

runcのアーキテクチャ

runcでは、すべてのコンテナが一つのカーネルを共有して動作します。そのため、不適切なコンテナが存在した場合、他のコンテナに影響が及ぶ可能性があり、セキュリティ的に脆弱だと懸念されています。しかし、現時点では最も一般的で、汎用的な実装となっています。また、runcは、RedHat Enterprise Linux 7.6以降で採用されているPodmanからも利用されています。

問い合わせ

10. Kata Container

Kata Containerとは、OCI Runtime Specificationに基づいて作られたKubernetesやDockerの低レベルなランタイムです。コンテナのセキュリティを向上するために開発されたランタイムで、オープンソースソフトウェアとして公開されています。

Kata Containerのアーキテクチャ

Kata Containerのアーキテクチャ

Kata Containerは、前述したruncのセキュリティの問題を解決するために開発されました。runcと異なり、軽量なハイパーバイザーの上で動作し、コンテナごとにカーネルを動作させることで、コンテナ間の分離を実現しています。なお、動作には、QEMU、NEMUなどのハイパーバイザーとの連携が必要です。

問い合わせ

11. gVisor

gVisorとは、OCI Runtime Specificationに基づいて作られたKubernetesやDockerの低レベルなランタイムです。Google社によって開発され、オープンソースソフトウェアとして公開されています。gVisorは、Linuxでのみ動作します。

gVisorのアーキテクチャ

gVisorのアーキテクチャ

gVisorも、前述したruncのセキュリティの問題を解消するために開発されました。コンテナの動作に必要なシステムコールの多くを、直接ホストカーネルに渡さず、ユーザ空間で処理します。ただし、ハードウェアに関連する一部のシステムコールだけは、ホストカーネルに処理を委ねる構造になっています。このような構造によって、gVisorは、ホストカーネルとコンテナを切り離し、コンテナをサンドボックス化することができます。

問い合わせ

12. rkt

rrktとは、コンテナ型仮想化で使われる技術の1つで、CRIとOCI Runtime Specificationに基づいて作られた、KubernetesやDockerの高レベルなランタイムです。CNCFで開発が行われ、オープンソースソフトウェアとして公開されています。

rktのアーキテクチャ

rktのアーキテクチャ

rktは、DockerだけでなくCoreOSコンテナにも対応しています。また、コンテナではなく、Pod(複数のコンテナをまとめたもの)を実行単位として扱っています。

問い合わせ

コンテナ管理

コンテナ型仮想化は、1サービス/1コンテナで動作させるため、多数のコンテナが乱立する傾向にあります。すると、コンテナが増加し、一つ一つのコンテナを管理することが難しくなります。また、コンテナ同士が連携して動作するので、連携情報も管理しなければいけません。

ここでは、こうした課題を補うための、コンテナを効率的に管理するソフトウェアを紹介します。

13. Kubernetes

Kubernetesのダッシュボード

Kubernetesのダッシュボード

Kubernetesとは、コンテナにおけるアプリケーションのデプロイ、スケール、管理の自動化を行うオープンソースソフトウェアです。Kubernetesの提供する機能はコンテナオーケストレーションと呼ばれ、管理しやすいマイクロサービスの基盤を提供します。GoogleやAmazon、Microsoftなど、世界中のさまざまなクラウドベンダーにも採用され、パブリッククラウドサービスとして提供されています。そのため、Kubernetesはコンテナオーケストレーションのデファクトスタンダード的な位置づけとなっています。

コンテナ化では、1つのコンテナに対し1つのアプリケーションが動作するような仕組みが推奨されています。そのため、複数のコンテナを組み合わせて1つの機能を提供することがほとんどです。Kubernetesでは、このようなコンテナのセットをPodとして管理します。そうすることで、複数のDockerコンテナをサービス単位で管理することができ、サービスの起動や停止をまとめて行うことができます。

Minikube

Minikubeは、小規模なKubernetes環境を作成するために作られました。1台のPC上に、仮想的に環境を構築することができます。Minikubeは、Windows上でもLinux上でもインストールできます。ただし、動作にはVirtualBoxやKVMなどのハイパーバイザーが必要です。

現在、ハイパーバイザーを利用せずにMinikubeを動作させるための開発が行われていますが、まだ実験段階とされています。Minikubeでは、ランタイムを切り替えて使うことができます。

Microk8s

Microk8sも、小規模なKubernetes環境を作成するために作られました。環境に依存しないパッケージを配布し、管理するための仕組みであるSnappyを使って配布されています。Minikubeとは違い、ハイパーバイザーは不要です。Kubernetesとともに利用することが多いレジストリやストレージなどのツールも内包されていて、簡単に有効化できるのが特徴です。Microk8sでは、containerd、runcをランタイムとして使っています。

Kubernetes構築事例 問い合わせ

14. Rancher

Rancher

Rancherは、Kubernetesを管理するためのオープンソースソフトウェアです。導入が難しい、学習・管理コストが高いといったKubernetesの難点を解消するために開発されました。Rancherを使うことで、Kubernetesクラスタの構築・アップデートやPod等のKubernetesリソースを管理することができます。

また、Kubernetesでコンテナ環境を起動させるためにはコマンド操作が必要ですが、Rancherを使うことで、ほぼ全ての機能をWebインターフェースから操作することができます。

問い合わせ

15. Portainer

Portainer

Portainerとは、DockerやKubernetesのコンテナ環境を管理するGUIツールで、オープンソースソフトウェアとして公開されています。あらかじめPortainerに準備されているテンプレートなどを使用して、Webインタフェースから、シンプルな操作でコンテナを簡単に構成、監視することができます。

Kubernetesでも管理用のダッシュボードは用意されていますが、Kubernetesの場合、最低3~5台のコンテナ実行環境が必要となります。一方、Portainerは、小規模なシステムのコンテナ環境にも対応しているため、1台のサーバしか利用しない場合でもコンテナを管理することが可能となります。

問い合わせ

OSSのおすすめ仮想基盤ツール

仮想化のおすすめOSS「コンテナ型で使えるOSS」の先頭へ