Dockerのメリット
「Docker」なんて初めて聞いた、というエンジニアの方もいらっしゃるとかと思いますが、仮想化を知らないという方はいないでしょう。Dockerは仮想化における方式の1つ、コンテナ型仮想化環境を構築するためのプラットフォームです。
ここでは、Dockerのメリットを中心にDockerについてやさしく解説をしていきます。エンジニアの皆さんには必ず役立つ知識ですので、最後までお読み頂けると幸いです。
【参考】:Docker公式サイト
そもそもサーバ仮想化技術とは
仮想化について、釈迦に説法かもしれませんが、一応確認しておきましょう。
仮想化技術が普及する以前は、1台のサーバに対しては1つのサーバ環境を構築するのが当たり前で、必要なサーバ環境が増えれば、サーバの台数も必要でした。
つまり、ハードウェアという物理的な構成に縛られることを当然のように受け入れていたのです。
近年、理的な構成に縛られないサーバ環境構築技術が登場してきました。この「サーバ仮想化技術」の登場によって、1台のサーバ上に複数のサーバ環境を構築することが可能となりました。また、それらのサーバ環境では異なるサーバOSを、同一サーバ上で動作させることが可能です。
Windowsサーバ上に異なるバージョンのWindowsや、Linuxなどを混在して搭載するケースもあります。では、このサーバ仮想化技術によってどのようなメリットが得られるのかを確認しましょう。
サーバ仮想化による3つのメリット
仮想サーバはクラウドサービスでは普通のサービスとして提供されています。利用者はサーバを選ぶというよりは、必要なOSを選ぶというイメージで1つの物理サーバ上にある仮想サーバを選択して利用しています。では、サーバの仮想化によるメリットを3つに絞って見ていきましょう。
■導入コストの削減
従来のシステム開発では、開発時期によって選択するOSや、そのバージョンが異なると、その度にサーバを調達していましたが、仮想化技術を用いると、同一サーバ上に複数のバージョンのWindows Serverを立てて、それぞれのシステムを稼働させることが可能となりました。これにより、ハードウェア調達コストはもちろんのこと、設定作業などの人的コストの削減も実現できます。
■サーバ維持コストの削減
サーバ仮想化技術によって、少ない台数で多くのシステムを稼働できれば、サーバの維持コスト(レンタル費用、電気代、メンテナンス費用など)の削減ができます。
■複製の容易化によるBCP対策の実現
BCPは事業継続計画のことで、災害などの緊急事態に際しての事業継続の方法などをあらかじめ決めておきます。サーバ仮想環境が整えば、カプセル化された仮想サーバ環境はカプセルごと遠隔地のバックアップサイトに複製ができますので、非常時には短時間でバックアップサイトへの切替が行え、事業継続リスクの最小化を図れます。
3つの仮想化方式を理解しておこう
仮想化方式は大きく分類すると3つに分けられます。それぞれに特徴や、メリット・デメリットがあるため、利用の用途に合わせて最適な方式を採用する必要があります。ここでは、コンテナ型仮想化方式への理解を深めるために、仮想化の3つの方式について解説していきます。
ホスト型仮想化
ホスト型仮想化では仮想化ソフトウェアを用いて仮想マシンを稼働させます。すでに利用しているサーバなどにインストールして利用できる簡便さはあります。
しかし動作させるには同時にホストOSと仮想化ソフトウェアを利用するため、余計なオーバーヘッドが掛かってしまい、パフォーマンス低下が避けられません。
仮想化環境の構築がしやすく、検証環境としてはよく利用される方式ですが、パフォーマンスが重視される本番環境ではおすすめできません。ホスト型の代表的なソフトウェアとしては「VMware Player」、「VMware Fusion」などがあります。
ハイパーバイザー型仮想化
ハイパーバイザー型は言わば「仮想化機能を持つOS」で、ホストOSを必要としない点が特徴です。直接サーバにインストールして、その仮想化OS上で仮想マシンを稼働させるイメージです。 代表的なものとしては、「Hyper-V」、「Vmware ESXi」、「Citrix Xen」などがあります。ホストOSを必要としないため、オーバーヘッドが起こりづらく、仮想マシンのパフォーマンス低下を最小限に抑制できます。
コンテナ型仮想化
コンテナ型はアプリケーション実行領域(ユーザ空間)をコンテナのように複数に分割して、それぞれ独立して利用するという特徴を持ちます。コンテナ型はアプリケーション実行環境の仮想化技術であり、ホスト型、ハイパーバイザー型とは大きく異なる概念です。
コンテナ型仮想化を実現するためのソフトウェアとしては、「Docker」または「Kubernetes」があります。ホスト1台の構成には向いていますが、「Docker」は複数ホストになるとホスト間連携が煩雑になりがちです。
この複数ホスト環境をあたかも1ホストの実行環境のように扱え、問題を解消してくれるのが「Kubernetes」です。
Dockerコンテナを利用するメリットは?
コンテナ型仮想化については理解されたでしょうか。続いてコンテナ化仮想化ツールの「Docker」のメリットについて見ていきましょう。
環境構築が簡単
「Docker」は環境構築の難易度が低いのがメリットの1つです。コンテナの環境は「Dockerイメージ」を「Docker Hub」からダウンロードして、一部の変更を行うだけで求める環境を構築できます。
また「Docker」はリソースの消費が少なく、「Dockerコンテナ」の作成コマンドをコマンドプロンプトから打つだけで、あっという間にコンテナができあがります。
環境の共有や統一が簡単
「Docker」をそれぞれの環境にインストールしておけば、同じ「Dockerイメージ」をダウンロードし、コンテナを作成するだけでアプリケーションを動かせます。
これにより、開発者同士で簡単に開発環境の共有や統一化を図れます。また開発工程で作成した環境と同じ環境で本番環境を作れるため、本番環境への移行がスムーズに行えるのもメリットです。
リソース消費が少ない
従来型の仮想環境と比較して、コンテナ型仮想環境では、ディスクやメモリなどのリソース消費が少なくなります。それは、ホスト型仮想化やハイパーバイザー型がゲストOSを必要とするのに対し、コンテナ型ではゲストOSは不要でコンテナはアプリケーションの実行だけを行うためです。
クラウドのコンテナサービスが増加
コンテナ型のクラウドサービスを利用すると、サーバのプロビジョニング(サーバの利用手配など)をせず、管理も不要で、すぐにコンテナ利用ができます。
3大クラウドからは、「AWS Fargate」、「Azure Container Instances」、「GCP Cloud Run」といったコンテナサービスが提供されており、さらに活用が広がると見られています。
【参考】:AWS Fargate
【参考】:Container Instances
【参考】:Cloud Run
Dockerコンテナのデメリットは?
Dockerコンテナはホスト型仮想化やハイパーバイザー型仮想化と比べて、身軽さや手軽さがメリットですが、一方でいくつかのデメリットもあります。ので確認しておきましょう。
単一OSに依存するため自由度が制限
Dockerコンテナは1つのOSのカーネル部分を利用して動くため、OSの自由度が制限されます。たとえば同一マシン上でWindowsコンテナとLinuxコンテナを動かすには、Hiper-Vなどを用いたハイパーバイザー型仮想環境を用意する必要が生じます。
仮想マシンと比べてセキュリティリスクが高い
Dockerコンテナは複数のコンテナが1つのOS上で動くため、第三者から特権を奪われると全てのコンテナに影響を及ぼします。仮想マシンと比較してDockerコンテナはセキュリティリスクが高くなるという前提で、しっかりとしたセキュリティ対策を講じておく必要があります。
Dockerの使いどころ
「Docker」は*独立したユーザー環境を簡単に作れる一方、開発プロジェクトなどでは同じ開発環境をいくつも簡単に作れます。 それがコンテナの強みでもありますが、分散と集権、独立と共同、相反することができる「Docker」の使いどころとしては、共同作業を行うプロジェクトで使っていくというスタイルが最も適しているように見えます。
一方、長期的に手を入れないようなシステムや、サードパーティ製ソフトウェアや、特定のライブラリに依存するようなアプリはコンテナ化には不向きでしょう。
基本的には「Docker」のメリット、強みを生かせるものを中心に採用し、あまり強みを発揮できない、制約条件があるようなものは避けるという判断が必要です。
Docker Hubとは?
「Docker」を語る上で「Docker Hub」は外せません。「Docker Hub」とはDockerイメージの※リポジトリです。
「Docker」ではこれを「Dockerレジストリ」と称しています。以下、もう少し詳しく解説します。
※リポジトリとは 英語の「貯蔵庫」の意味。 システムを構成しているデータやプログラムなどの情報が格納されたデータベースのことです。
【参考】:Docker Hub
Dockerイメージの集積所
「Dockerレジストリ」には世界中の開発者たちが作成した「Dockerイメージ」が集積されています。「Docker Hub」は優れた「Dockerイメージ」をPull(ダウンロード)したり、自作の「Dockerイメージ」を公開したり、複数メンバーでリポジトリを共有したりする機能があります。
Dockerによる保証済
「Docker」の公式認定リポジトリはDocker社にてレビューが済んでおり、安心して利用できます。「Dockerイメージ」を利用する際は「公式リポジトリ」のものを使用しましょう。
DockerとDocker Hubとの関係
Dockerはコンテナのプラットフォームであり、Docker Hubは「Dockerイメージ」をホスティングするWebサービスと認識しておきましょう。「Docker Hub」は誰でも利用できますが、「Docker Hub」への「コンテナイメージ」のPushにはアカウント登録が必要です。
Dockerはプロジェクトで必要なプラットフォームとなる
「Docker」今後、開発プロジェクトにおいて、必要不可欠のツールとなるでしょう。今やクラウド環境では仮想化マシンの実装が当たり前になっていますが、それには限界があり、「Docker」などの新たな仮想化技術が求められています。実際、大手クラウドサービスでは「Docker」コンテナサービスがいくつか提供されています。
仮想化技術は3種類あると冒頭で述べましたが、それぞれの特徴やメリット、デメリットを理解した上で、最適な選択をできるよう、今から仮想化についてもさらに学んでみてください。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから