Docker向けの軽量Linux OS 主要3種を比較する

2015年3月6日(金)
佐藤 司森元 敏雄

Dockerをより効率的に利用するための技術

通常Dockerを利用する場合は、Linux OSが稼働するサーバ上にDockerのパッケージを追加でインストールすることで、環境を構築している。当然ではあるが、Linux OSのインストール時に「最小限の構成」を選んだとしても、Dockerの稼働には必要のないパッケージもインストールされている状態となる。 本来Dockerを利用する最大のメリットは、「少ないリソースでたくさんのコンテナ(=実行環境)を起動させられる」ことである。たとえ最小限の構成であってもDocker実行環境としては、多くのリソースが無駄に消費されていることとなる。さらに不要なサービスが実行されていることにより、Dockerで利用しない機能に対してもセキュリティー上のリスクが残ってしまうことになり、不要な運用作業が発生することとなる。

そのため、Dockerに対してもハイパーバイザ専用OSと同様に実行環境として最低限の機能を持ったDocker専用の軽量OSのニーズが発生していた。そのニーズに答えるように、各ベンダーからDocker実行環境向けに軽量化・最適化された軽量OSが提供されている。

Docker向けの軽量OSを使うメリットとしては、以下の点が挙げられる。

(1)最低限のパッケージで構成されている

  • インストールや設定の作業時間が短い
  • ベースOSのディスク使用量が少ない
  • セキュリティーアップデートなどの運用負荷が少ない

(2)最低限のサービス(機能)のみが動作する

  • ベースOSのCPU、メモリ等のリソース使用量が少ない
  • サービスが少ないため、脆弱性のリスクが軽減される

(3)リソースの空き容量が多くなる

  • より多くのコンテナを起動できる

前回の連載「Dockerを知る -周辺ツールと業界動向-」の第2回では、コンテナ向けOSとして「CoreOS」を簡単に紹介したが、記事公開以降にOSベンダーであるRed HatやUbuntuからもDocker実行環境向けにカスタマイズされた軽量OSがリリースされている。

Docker向け軽量OSに共通した特徴

Docker向けの軽量OSは、以下に挙げる共通の特徴を備えている。

(1)パッケージの管理コマンドが存在しない

Docker向けOSには、パッケージ管理コマンド(yumやapt)が存在しない。これは機能を追加する際には、パッケージのインストールではなく、コンテナを起動して実現することが前提となっているためと考えられる。この一般的なOSとの差異は、基本点に全てのDocker向けのOSに共通する概念である。

(2)ファイルシステムの大部分が読み込み専用

ベースOSのファイルシステムは、コンテナを格納する領域以外の大部分が読み込み専用となっている。これも前項の前提と同じで、必要な機能はコンテナの起動で実現するため、更新が不要なベースOS部分を保護するためにこのようになっていると考えられる。

(3)Dockerを管理するための必要なコンポーネントが標準で提供されている

必要なコンポーネントは(一部を除き)標準でインストールが行われる。Dockerのみではなく、Docker実行環境およびコンテナの管理を行うコンポーネント群が自動でインストールされるのも、大きな特徴となっている。コンテナの可用性についての製品は、製品ごとに独自の取り組みが行われており、他ベンダーの製品も積極的に利用されている。たとえばProject Atomicでは、Googleが開発するKubernetesが選択されている。

比較するDocker向け軽量OS

今回はDocker向けの軽量OSの中から、以下の3製品を実際に動作させて検証を行い、それぞれの製品の特色や機能の差異などをまとめている。Docker環境用OSを選択する際の参考になれば幸いである。

  • CoreOS
  • Project Atomic(CentOS Atomic Host)
  • Snappy Ubuntu Core

各軽量OSの比較表

製品名CoreOSProject AtomicSnappy Ubuntu Core
開発ベンダーCoreOS, Inc.Red Hat, Inc.Canonical UK Ltd.
公式サイトhttps://coreos.com/http://www.projectatomic.io/http://developer.ubuntu.com/en/snappy/
コンセプトChrome OSから派生した、Docker専用に開発された製品で、Docker コンテナに最適化された OS の提供を目的としている既存のRed Hat系OSをDockerに最適化するためにカスタマイズされた製品。コンテナとしてRed Hat系OSを安定稼働させることを目的としているUbuntuベースの最軽量OS製品。IoTも含めた様々なプラットフォームで動作させることを目的としている
ライセンスApache License 2.0GPLv2GPL
検証に利用したバージョン(Stable)v557.2.0Test Versionubuntu-core/devel
カーネルバージョン3.18.13.10.0-123.9.3.el7.x86_643.18.0-9-generic
標準インストールされるDockerのバージョンv1.4.1v1.4.1なし
パッケージ管理ツール
(yum/apt相当)
なしなしSnappy
標準インストールされる管理ツールetcd
fleet
rpm-OSTree
systemd
geard
Kubernetes
Cockpit
-
ベンダー有償サポートの有無CoreOS Managed Linuxのみ有償サポートありRed Hat Enterprise Linux Atomic Hostのみ有償サポートありなし

CoreOS

コンテナ向けOSの先駆者であり、前回の連載第2回に実際のインストール手順や特徴などをまとめているので、合わせてご一読いただきたい。CoreOSはDockerの機能拡大の路線を受け、「従来のコンセプトであるシンプルで自由に構成できるコンポーネントではなくなりつつある」とし、Dockerの当初の基本コンセプトを踏襲したコンテナ実行エンジンである「Rocket」の開発を宣言した。2014年12月1日にはRocket Ver 0.1.0がプロトタイプ版として公開されている。Rocketの最新版は、2015年2月6日にリリースされたVer 0.3.1である。ただし現状では、大半の利用者はRocketには移行しておらず、CoreOS + Dockerを利用しているものと考えられる。CoreOSが独自に開発しているRocketについても、別の機会があればご紹介したい。

CoreOSの特徴として、以下のコンポーネントが標準でインストールされていることが挙げられる。

コンポーネント機能と特徴
etcd高可用性KVS、複数のCoreOS上のコンテナ情報の共有を実現する
fleetCoreOS上のコンテナの管理とスケジューリングを行うツール。複数のCoreOSをインストールしたノードでクラスタを構成し、コンテナのデプロイが可能。コンテナが停止した場合、生きているノードで自動的にコンテナを再デプロイする

この2つの機能を組み合わせることで、コンテナのクラスタリングも可能である。なおfleetの機能を応用することによってコンテナの死活監視は行うが、リソース使用量等の監視までしたい場合は、別のツールを検討する必要がある。

CoreOSは製品の更新頻度が非常に高く、2015年1月は11回ものバージョンアップのリリースが行われている。利用者は「Stable」「Beta」「Alpha」版から任意のバージョンを利用可能である。Dockerのバージョンアップから約10日間程度で、最新版のDockerが入ったCoreOSがAlpha Channelで提供されるため、Dockerの新機能を試すのが目的であればCoreOSを選択するのは非常に有用である。
今回の比較検証では新機能による不具合等を回避するため、Stable版を利用している。 

Project Atomic

Project Atomicは、Red Hatが開発しているDocker専用の軽量OSを作成するためのプロジェクト名である。Project Atomicの開発コンセプトは、Red Hat系の各ディストリビューションで作成されたコンテナを安定稼働させることに最適化した実行環境実現である。
Project Atomic内にはRed Hat系のディストリビューションごとにプロジェクトが存在している。

ディストリビューション特徴
Fedora Atomic次世代のRed Hatに取り込まれる新機能の開発ベースとなる。更新頻度が非常に高い
Red Hat Enterprise Linux Atomic Host商用版のOSでサポートが付属する有償OS(現在はミッションクリティカル非推奨とされている)。現状のサポート範囲は、RHELホスト上でRHELコンテナを動作するケースのみである
CentOS Atomic HostCentOSにAtomic Hostの機能を追加し、軽量化したOS
REHL Atomic Hostとは分離して、独自の開発を予定している

本記事では、この中から最も新しいCentOS Atomic Hostについて触れていく。CentOS Atomic Hostで提供されているDocker以外の主要コンポーネントを、以下の表にまとめた。

コンポーネント機能と特徴
rpm-OSTreeOSのアップデートを実行・管理するツール。
3way-mergeにも対応しており、Tree上のSnapshotを保持できるため、自由度の高い世代管理とロールバックが可能
systemdinitdに代わってサービスの起動や制御を行う。サービスの並列起動や依存関係の制御に優れている。CentOS Atomic Hostではsystemdのjournaldの機能を利用し、コンテナごとのログの出力を行っている
geardGO言語で作成されている。
コンテナの管理ツール。コンテナとsystemdとの連携、複数コンテナの一括デプロイ、コンテナ間のネットワーク構築などが行える。
KubernetesGoogle製のコンテナオーケストレーションツール。CentOS Atomic Hostのクラスタリングは本ツールで実現する。詳細は前の連載の第3回を参照
Cockpitコンテナ管理用のGUI。コンテナのデプロイ、削除やリソース使用状況確認、ログの監視がGUIで行える

まずは、軽量化によるディスク使用量の削減量について評価を行ってみる。CentOSを最小限の構成でインストールしたものと CentOS Atomic Host、Fedora Atomicのディスクの使用量は以下となる。

CentOS(最小限の構成)CentOS Atomic HostFedora(21) Atomic
859MB1.8GB804MB

現状では、CentOS Atomic Hostのディスク使用量はCentOSよりも多くなっている。これはCentOS Atomic Host自体の軽量化が進行中であるためと推察される。それは、開発が先行しているFedora(21) Atomicのインストール容量が804MBと軽量化されていることからも予想できる。将来的には、CentOS Atomic Hostのディスク使用量もより削減されるであろう。

Snappy Ubuntu Core

Snappy Ubuntu Coreは「最軽量のUbuntu OS」であり、前述で紹介した2つの製品よりもさらに「最小構成」であることに注力されている製品である。Snappy Ubuntu Coreは、PCやスマートフォンよりもさらにリソースが少ないIoT(Internet of Things:モノのインターネット)での利用も想定されているため、「最軽量」を意識していると考えられる。

前述のように、Snappy Ubuntu Coreは「最軽量のUbuntu OS」である。使用を開始するためには、まずフレームワークをインストールする必要がある。OS+フレームワークの組み合わせにより、様々なアプリケーションの稼働環境を最低限の手順とリソースで構築可能となっている。本記事執筆時点では、提供されているフレームワークはDockerのみだが、今後フレームワークが拡張されることが期待される。

Snappy Ubuntu Coreの管理には「Snappy」コマンドが用意されている。主に以下の用途に使用する。

  • 設定の参照・変更
  • 使用できるフレームワーク、パッケージ、コンテナの検索
  • フレームワーク、パッケージ、コンテナのインストール、アンインストール
  • サービス、コンテナの起動・停止

Snappy Ubuntu Coreの基本設定、操作は「Snappy」コマンドを利用することになる。ただし、Dockerフレームワークインストール後は、通常の「Docker」コマンドも併用が可能である。

Snappy Ubuntu Coreは軽量OSではあるが、必要な機能を選んで最低限の構成で稼働させられるベースOSであり、Docker環境の構築以外にも活用できると考えられる。

さらに開発元であるCanonicalは、2015年2月19日にIoT開発APIの提供に向けて、MicrosoftおよびAmazonとのパートナーシップ締結を発表している。IoTデバイスとクラウド上のサービスとの融合をより円滑にすることを目的としており、Snappy Ubuntu CoreのIoTデバイスへの利用が促進されるものと期待される。

軽量OSを比較する

今まで紹介した3つの製品を同一条件の仮想マシンにインストールを行い、リソース使用量やパフォーマンスの簡単な比較を行ってみた。

(1)インストールした環境

CentOS 7 x86_64上にKVM環境を構築

以下の構成の仮想マシンを3セット作成し、それぞれにOSのインストールを実施

リソースCPUMemoryHDD
割当量1core1GB8GB

(2)ディスク使用量

それぞれのOSのインストール直後のディスク使用量は以下となる

CoreOSとSnappy Ubuntu Coreはほぼ同容量となっているが、Red hat系ディストリビューションは若干使用量が多くなっている。Project Atomicでもさらなる軽量化を進めており、今後この差は大きく縮まるものと考えられる。

製品名CoreOSCentOS Atomic HostFedora(21) AtomicSnappy Ubuntu Core
ディスク使用量304MB1.6GB804MB306MB

(3)簡易負荷テスト

各OSにnginxのコンテナを5つ起動させた

この状態でCPU使用率、Memory使用量の比較を行った

リソースパラメータCoreOSCentOS Atomic HostSnappy Ubuntu Core
CPUCPU使用率1%5%1%
Memoryfree(KB)583056396672605376
buff(KB)15908523618584
cache(KB)289188302092272492

発生させた負荷量が少なかったが、CPU使用率はCentOS Atomic Hostのみが若干高い傾向が見られた。コンテナ自体は起動しているだけでほとんど何もしていなかったので、ベースOSの負荷等が考えられる。またメモリ使用量に関しても、若干ではあるがCentOS Atomic Hostが多くなる傾向が見られている。インストールされているパッケージ数(ファイル数)が多く、キャッシュメモリも多く消費されている。 

まとめ

今回はDocker向けの軽量OS 3製品を紹介した。

性能面で簡単な比較を行ったが、製品間の優劣はほとんどないと言える。そのため選択のポイントは、目的によって決まってくるだろう。
Docker稼働環境として簡単にスタートしたいのであればCoreOSを、Red Hat系OSのコンテナを使い、動作の保証やサポートが必要なのであればProject Atomicの製品を、任意のパッケージを組み合わせて使用したいのであればSnappy Ubuntu Coreを選択するのが良いだろう。

各OSの目指す方向は、ロードマップから見てとれる。Docker本体やRed Hat系ディストリビューションは、サーバ仮想化環境と競合できるような「多機能で安定したシステムの稼働環境」を志向している。それに対してCoreOSは、コンテナエンジンをDockerからRocketに変更することで「シンプルで利用者の自由度が確保される環境」を目指している。さらにSnappy Ubuntu Coreは、「多くのデバイスで必要最低限の機能を動作させる環境」を実現しようとしている。各OSは、それぞれの進化を続けていくだろう。

コンテナ自体はポータビリティが高く、どのディストリビューションであっても大部分は稼働させることができる。製品選択にあたっては、使用できるDockerのバージョンや各製品の利用可能なコンポーネント、サポートの要否によって決定されることになるだろう。

次回は、ベアメタル環境とDockerコンテナ環境での性能比較の結果を紹介する予定だ。

株式会社アーベルソフト

インフラ基盤の設計・構築・運用までの全ての工程を担当。最近は、OSS製品を活用したインフラ基盤の提供を行っている。利用するOSS製品の調査・研究も行っており、現在は、DockerとTerraformに注目している。
>株式会社アーベルソフト

TIS株式会社

R&D部門である戦略技術センター所属。
金融系の大規模システム開発やプライベートクラウド開発環境の構築・運用の経験を生かし、OSS製品を中心としたの技術調査・検証を担当。
> TIS株式会社

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています