クラウドサービスは、サーバやネットワークなどのインフラを、どこからでも、簡便に、必要に応じて利用でき、かつ品質が高いことから、個人のみならず企業までもが活用している。

クラウドサービスは、Iaas、Paas、Saasのサービスモデルで提供されており、最近ではサービスモデルのひとつであるIaasをより効率良く活用するために、必要最小限のリソースでアプリケーションを実行できる環境を提供するコンテナ型の仮想サービスが注目を集めている。

そこで、コンテナ型の仮想サービスを理解する上で、代表的なソフトウェアであるDockerについて説明する。

Dockerとは?

「Docker」とは、Docker Incが提供するコンテナ型の仮想化環境を構成、管理するソフトウェアである。コンテナ型の特徴として、必要最小限のアプリケーション実行環境(コンテナ)をソフトウェアとして提供できるところにある。

仮想化環境は、コンピュータ上に仮想マシンを構築し、その上でOSやミドルウェア、アプリケーションなどが実行されるハイパーバイザー型と、コンピュータ上のOSの一部を分離して、他と隔離された専用のエリアを用意し、その上でアプリケーションが実行されるコンテナ型の2種類が存在する。Dockerは後者となる。

仮想化環境

コンテナ型はハイパーバイザー型と比べると、HDDなどのハードウェアリソースを占有する仮想マシンを構築しない上に、OSの起動プロセスも必要なく、かつ必要最小限なハードウェアリソースでアプリケーションを実行できるため、以下のメリットがある。

・必要最小限のハードウェアリソースでアプリケーションを利用できる
・OSの起動が不要なため、アプリケーションの起動が早い

Dockerには、このメリットのほかに、使用についても大きな特徴がある。それはOSやアプリケーションなどの環境が構築済みのコンテナイメージが用意されていることである。この構築済みのコンテナイメージを手軽に利用できることで、ユーザはOSやアプリケーションに対しての詳細な知識を必要とせず、コマンドひとつでアプリケーションを利用できる。

さらに、コンテナイメージの作成方法も特徴的である。「DockerFile」というテキストファイルにインストールコマンドなどを記載し、ビルドコマンドを実行するだけで、とても簡単にコンテナが作成できる。

作成したコンテナイメージは、「Docker Hub」といった、コンテナイメージの登録や共有ができるサービスサイトで管理できる。このようなサイトに、Dockerが構成されたサーバなどの環境からアクセスできれば、作成したコンテナイメージをアップロードやダウンロードし、利用できるのもDockerの魅力のひとつだ。

また、複数のサーバで構成されたDocker環境であれば、ひとつのコンテナイメージを各サーバで起動することで、アプリケーションをスケールアウトでき、必要がなければ、コンテナを破棄するだけでスケールインすることも可能だ。

このような特徴から、Dockerは限られたハードウェアリソースの中で頻繁にアプリケーションやミドルウェアの入れ替えや再構築を行うようなアプリケーション実行環境を構築する場面、例えば以下の活用事例のような開発環境の構築において、利用されるケースが多い。

(開発環境でのDocker活用事例と本番運用に向けて考えたこと)

このように利用されるケースが増えている一方で、実際にサービスを稼動させる環境でDockerソフトウェアを利用するには、サービスの運営に耐えうる動作保障や、事例といった信頼性や実績がないと導入には踏み切れないという意見も多くある。

それでは本当にDockerは開発環境だけを想定したソフトウェアなのか、サービス提供環境でも利用できるソフトウェアなのか、Dockerの歴史から説明する。

Dockerの歴史

Dockerは、2014年6月5日にバージョン1.0をリリースしてから、さまざまな機能追加とともに、サービス提供環境での利用も想定した機能の提供も開始している。

代表的なものは以下である。

・1.9 Docker multi-host networkingの正式リリース
異なるDocker ホストでもコンテナ同士のネットワーク接続ができる。

・1.12 Docker swarm modeの正式リリース
Dockerのみでコンテナのオーケストレーションによるスケールアウト・スケールインが可能となる。

・17.03 Docker Enterprise Edition(Docker EE)の提供開始
Docker Incが正式にサービス提供環境の利用を想定した商用版Dockerの提供を開始する。

このような取り組みから、企業での活用事例も増えてきている。その代表的な事例は、Docker Customersのサイトでまとめられている。

またDockerCon 2017では、VISA IncのサービスインフラでDockerを採用したとの発表があり、大規模なインフラ環境でも利用が始まっている。

このように、Dockerは信頼性のあるソフトウェアとして企業でも活用されてきている。

では、Dockerを活用したい場合はどの様な構成が想定されるか、シチュエーションを交えて説明する。

Docker利用を想定したシチュエーション

Dockerを活用する場合、どういった構成が想定されるか、構成例で説明していく。

開発環境として社内ユーザに提供する

社内ユーザは、Dockerにお好みのアプリケーションのコンテナを起動するだけで利用可能となる

開発環境としてDockerが活用されていることは前述したが、活用されているもうひとつの大きな理由として、学習コストが少ないことが挙げられる。たとえば, MySQLを利用したい場合、以下のDocker runコマンドを実行すればよい。

$ docker container run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mysql -d mysql

たったこれだけである。これにより社内ユーザは、アプリケーションのインストール方法などの学習をせずに利用でき、開発に集中できる。

サーバ管理者も、社内ユーザが利用しているアプリケーションの調査をしたい場合は、稼働しているコンテナの確認だけで済み、不必要となったアプリケーションはコンテナを破棄すればよいので、管理コストを大幅に軽減できる。

スケールアウトできるサービス提供環境にする

Docker環境であれば、コンテナのオーケストレーション機能で自由にアプリケーションのスケールアウトをできる

ひとつのアプリケーションをスケールアウトする場合、通常の方法では同様のアプリケーションをインストールし、同様のコンフィグ設定をし、動作確認をして・・・と、とても手間がかかる作業である。

Docker環境ではどうであろうか。Docker環境ではコンテナイメージをダウンロードして起動するのみと、とても簡単にスケールアウトができる。

また、DockerのDocker swarm modeといったコンテナのオーケストレーション機能を利用すれば、コマンドひとつで自由にスケールアウト、ついでにいえばスケールインも思いのままである。

従来のサービス提供環境と同様の構成で利用する

Docker multi-host networkingによるホスト間接続を使用すれば、ネットワーク構成もDocker環境内で完結する

従来のサービス提供環境といえば、WebサーバとDBサーバの2台構成から、サーバを冗長化した構成、Backupサーバ、監視サーバを追加した2台以上の複数台で構成されている。

これらの構成は、Docker環境で実現可能である。またDockerの Docker multi-host networkingによるDockerホスト間のネットワーク接続を使用することで、サーバのIPアドレスに依存することなくコンテナのみで複数サーバ構成と同じ環境を構成できるといったメリットもある。

ただし、サーバに依存するチューニングが必要な構成では、設定などで手間がかかることも多く、ケースバイケースである。

上記の構成例はごく一部であり、使い方によってさまざまな構成に対応できるのもDockerの魅力といえる。

ではDocker環境を構築するにはどうすればよいか、こちらについては、次回の「Dockerをインストールしてみよう」で説明する。

CloudGarage開発担当
IaaS型パブリッククラウドサービス「CloudGarage」の開発エンジニア。バックエンドのサーバ構築からフロントのアプリケーション開発まで幅広く行う。「Docker」は実務でも頻繁に利用するため、実際に使っている立場から「Docker」について解説をする。