Dockerはオープンソースソフトウエア(OSS)のコンテナー管理ツールだ。アプリケーションの配置を容易に管理できるツールとして、注目が集まっている。Red Hat Enterprise Linux 7(RHEL7)では新たに、Dockerが導入された。本記事では、RHEL7に導入されたDockerについて、導入から作成したイメージのデプロイ方法まで詳しく解説していく。
Dockerの解説に入る前に、仮想化(本記事ではサーバー仮想化を意味する)とコンテナーの違いについて、改めて紹介しておこう。図1は、仮想化とコンテナーのアーキテクチャーの違いを示したものだ。
KVMなどで実現する仮想化は、ハイパーバイザーの上に仮想マシンを構築し、ゲストOSをインストールしてアプリケーションを実行する。一方コンテナーでは、namespaceという機能を利用して、ホスト上にアプリケーション動作用の隔離空間を作成する。この隔離空間(コンテナー)に対して、ファイルシステム、プロセステーブル、ネットワーク設定などを、アプリケーションの実行環境として利用できるようにする。コンテナーはLinuxが以前から備える機能で、その実装形態としてLXCなどがある。
これによりコンテナーでは、仮想化に比べ、メモリーやストレージなどのリソース消費量が少なく、エミュレーションによるI/O性能の低下が起こらないといったメリットがある。コンテナー間は、独立したセキュリティを保てるようにSELinuxで分離する。ただしコンテナーでは、カーネルをホストとコンテナーで共有するため、他のOS向けのアプリケーションは起動できない。こうした仮想化とコンテナーの長所と短所を、表1にまとめた。
仮想化(KVMなど) | コンテナー(LXC)など | |
---|---|---|
長所 | ・各仮想マシンに対するリソースの分割が容易 ・仮想マシン間のセキュリティ分離を実現 ・複数種類のOSを1台のホストで実行可能 |
・メモリーやストレージなどのリソース消費量が小さい ・コンテナー間のセキュリティ分離を実現 |
短所 | ・メモリーやストレージなどのリソース消費量が大きい ・エミュレーションによるI/O性能の低下が発生 ・ゲストOSの構築/運用コストが発生 |
・アプリケーションの実行環境設定コストが発生 ・他OSのアプリケーションが起動不可 |
Dockerはコンテナー技術を活用する基盤として、アプリケーションの実行環境を軽量かつ効率的に整えることを目的に開発されている。Dockerにより、設定済みのコンテナーをアプリケーション導入済みのイメージとしてリポジトリーに登録し、開発者やシステム管理者がダウンロードして物理/仮想マシン上ですぐに利用できるようになった。そのため、新たなアプリケーション配信基盤として、急速に普及しつつあるのだ。