もうひとつの仮想化技術「Docker」で始めるコンテナ型仮想化

2017.10.04

Lab研究員 穂浪

今回は、YDCラボの数ある分科会のひとつ、私が参加する「アーキテクチャ分科会」で調査中のコンテナ型仮想化技術「Docker(ドッカー)」についてご紹介したいと思います。全3回の身に連載となりますので、ご興味のある方はぜひお付き合いください。

全3回のテーマはご覧の通り。
 前編 Dockerの概要紹介 ※今回の記事です
 中編 実験① Dockerを動かしてみよう(Orade XE)
 後編 実験② DockerでLinuxにおけるアプリケーション配布を効率化できるか?
それでは、どうぞよろしくお願いいたします。

 

Lab_0002_5_1.JPG_1.jpg

 

■コンテナ型仮想化技術とは?

みなさんも日々、何らかの形で使用している仮想化技術。その技術は、アーキテクチャによって以下の3方式に分類されます。

Lab20171004_1a.png

この連載でご紹介する「コンテナ型仮想化」は、他のハイパーバイザ型、ホスト型と異なり仮想マシンを必要としません。プロセス実行に必要な機能(OS/カーネル)はホストOSと共有するため、他の仮想化技術と比較して、実行時のオーバーヘッドが少ないという特徴を持っているのです。

逆説的に言うと、ホストOSと異なるOSで動作するアプリケーションは、このコンテナ型仮想化技術では実行できないという制約を持つことになります。つまり、コンテナ型仮想化はOS全体を仮想化するためではなく、ホストOS上で動作するアプリケーションの実行環境を仮想化するために用いる技術といえるのです。

■Dockerとは?

Docker(ドッカー)とは、2017年の現時点において、コンテナ型仮想化技術の代表格といえるものです。もともとオープンソースソフトウェアとして開発されたもので、Wikipediaの記述によると、「Docker」という名称で初めてリリースされたのは2013年とされています。その1年後には以下の記事のように、RedHatやMicrosoft、Googleがサポートあるいは採用するなど、早くから注目されていた技術です。実際に名前を見聞きしたことのある方も多いのではないのでしょうか。

  【参考】Google、Microsoft、Red Hat、IBMがDockerサポートで団結

ただ、Dockerによってコンテナ型仮想化技術が生み出されたわけではありません。その基盤となる技術は数年から数十年前に開発されています。その歴史や他の仮想化技術に興味のある方は、以下の記事をご覧ください

  【参考】知らぬはエンジニアの恥。今さら聞けない【コンテナ/仮想化技術】

■Dockerの動作イメージ

ではここで、Dockerがどのように動作するのかをご説明します。簡単ですが、Dockerの動作イメージを図にしてみました(Oradeでのデータベースとインスタンスの関係に近いですね)。

Lab20171004_2.png

①実行させるアプリケーション用にイメージファイルを作成する。

 イメージファイルは、アプリケーション本体に加え、実行時に必要となるライブラリやミドルウェアなどをまとめたもの。

②Dockerによりイメージが実行されるとアプリケーションが起動する。この起動されたプロセスのことをコンテナと呼ぶ。

アプリケーションの実行により実行元イメージに含まれるデータに変更があった場合、変更をコミットし、新規イメージを作成することが可能
(コミットが不要であればコンテナ終了時に変更内容を破棄することもできる)。

このように、実行するイメージごとに必要なライブラリやミドルウェアを持たせることは、一見すると容量の面でデメリットであるようにも感じられます。しかし、各コンテナの独立性を確保できるというメリットがあるのです。
※Dockerには、このデメリットへの対応策が組み込まれています。次回ご説明する予定です。

ひとつ例を挙げてみます。AI(機械学習向け)アプリケーションで起こりやすい状況です。

アプリケーションAはPython2系を使用するが、アプリケーションBはPython3系を使用する場合、OS標準のパッケージ管理では難しくなってきます。以前であれば実行環境ごとに仮想OSを立てるか、OS標準のパッケージマネージャを使わず独自にインストールするなどして対応していた問題ですが、それぞれをDockerコンテナとして実行すれば、簡単に解決できるようになります。

Dockerにはその他にもメリットがあります。Docker開発元が運営している「Docker Hub」というサイトで、各種イメージが公開されている点は大きなメリットです。また、代表的なOSSアプリケーションであれば、開発元がDockerイメージを提供している場合も多数あります。

ちなみにDocker Hubで公開されているイメージは、簡単なコマンドで手元の環境に導入することができます。私も過去にMongoDBを試してみようと思ったとき、インストールに必要なパッケージを導入するのが手間で着手を見送ってしまったことがありました。こういったときに公式イメージが使用できれば、インストール作業などのできるだけ効率化したい作業に悩まされることなく調査や評価を行えます。

 

20170908_0019.png

 

■まとめ

ということで、今回はDockerの概要をご紹介しました。なんとなく、その利便性を感じていただけたでしょうか。次回は、Docker上でコンテナを実行させる手順を確認しつつ、アーキテクチャ的な特徴も改めてご紹介したいと思います。次回もよろしくお願いいたします。