業務アプリ開発者のための、コンテナ仮想化ツールDockerをつかったインフラ構築ことはじめ
インフラ構成管理ツールを使いこなす! コードではじめるサーバ構築 第5回
Dockerとは(2)
無駄の少ないインフラ環境を実現する、コンテナ仮想化技術
Dockerのしくみを理解するうえでの基礎知識として知っておきたい技術が「コンテナ仮想化技術」です。
仮想化技術はいくつかの種類がありますので、代表的なものを説明します。
ホスト型仮想化
ハードウエアの上にベースとなるホストOSをインストールし、ホストOSに仮想化ソフトをインストールします。その仮想化ソフトの上でゲストOSを動作させる仮想化です。
仮想化ソフトは、Oracle社のVirtualBoxやVMWare社のVMWarePlayerなどがあります。仮想化ソフトをインストールして手軽に仮想環境が構築できるため開発環境の構築などによく使われています。しかし、ホストOSのうえでゲストOSを動かしますので、どうしてもオーバーヘッドが大きくなります。オーバーヘッドとは、仮想化を行うために必要になる、無駄なCPUリソース/ディスク容量/メモリ使用量などのことです。
ハイパーバイザー型仮想化
ハードウエア上に仮想化を専門に行うミドルウエアである「ハイパーバイザー」を配置し、ハードウエアと仮想環境を制御します。代表的なハイパーバイザー型には、Microsoft社のHyper-VやCitrix社のXen Serveなどがあります。クラウドサービスであるAmazon Web Servicesの仮想サーバ機能を提供する「EC2」は、Xenをベースに構築されています。
ホストOSが無くハードウエアを直接制御するため、リソースを効率よく使用できます。ただし、仮想環境ごとに別のOSが動作しますので、仮想環境の起動にかかるオーバーヘッドは大きくなります。ハイパーバイザー型はファームウエアとして実装されているものも多く、製品や技術によってさまざまな方式があります。
コンテナ型仮想化
ホスト型仮想化、ハイバーバイザー型仮想化のようにOSやハイバーバイザーの上で、さらにOSを複数動かすと、それだけでどうしても多くのリソースを必要とします。そこで、ホストOS上に論理的な区画(コンテナ)を作り、アプリケーションを動作させるのに必要なライブラリやアプリケーションなどをコンテナ内に閉じ込め、あたかも個別のサーバのように使うことができるようにしたものが、コンテナ型仮想化です。OSのリソースを論理的に分割し、複数のコンテナで共有して使います。コンテナ型仮想化はオーバーヘッドが少ないため、軽量で高速に動作するのが特徴です。
コンテナ仮想化技術の歴史は古く、FreeBSDというオープンソースUNIXでの「FreeBSD Jails」や、Sun Microsystems社(現Oracle社)の商用UNIXであるSolarisの「Solaris Containers」などがあります。
Dockerはコンテナ仮想化技術を使っているので、他の仮想化に比べると非常に軽量/高速で動作するという特徴があります。そのため、利用したリソースの量で課金がきまるIaaSなどのクラウドサービスでは、システム稼働にかかるコストを抑えることができます。
多くのベンダー/ツールがDockerをサポート! Dockerの相互接続性(インターオペイラビリティ)
Dockerは、GoogleやAmazonなどのクラウドベンダーはじめ、Red Hat社/Microsoft社/IBMなどの多くの業務システム開発を支えてきた大手ベンダーや、広く利用されているオープンソースなどがサポートしています。
さまざまな組織やシステムと連携してつかうことができるソフトウエアの特性のことを、「相互接続性(インターオペイラビリティ)」と言います。
たとえば、商用Linuxである「Red Hat Enterprise Linux7」はDockerを標準搭載しています。また、AWS(Amazon Web Services)では「Amazon EC2 Container Service」でDockerをサポートしています。また、Dockerはオープンソースの継続的インテグレーションツールである「Jenkins」と連携してテストを自動化することもできます。
さらに、コンテナ統合管理のためのKubernetes(クーベルネイティス) というフレームワークを、Googleがオープンソースとして公開しました。KubernetesのプロジェクトにはDocker社だけでなく、Microsoft社やRed Hat社やIBMなどが参加する予定です。
業務システムの中には、大規模でミッションクリティカルなものも多くあります。大規模システムのインフラ構築/運用の最大の難しさは、なんといっても複数システム間の連携です。複雑に入り組んだシステムを安定稼働させるためには、高い技術力だけでなく、多くの労力もともないます。Dockerは、本番環境での運用という面では、まだまだ検討すべきところも多くあります。しかしながら高い相互接続性をもつDockerは、今後ベンダーなどのサポートにより業務システムへの導入のしきいを下げていくと思われます。
この記事は参考になりましたか?
- インフラ構成管理ツールを使いこなす!コードではじめるサーバ構築連載記事一覧
-
- コンテナ仮想化ツールDockerをつかったコードによるWebアプリケーション実行環境の構築
- 業務アプリ開発者のための、コンテナ仮想化ツールDockerをつかったインフラ構築ことはじめ
- インフラを自動で構築! ChefでローカルにWebアプリの開発環境をつくるRubyコードを...
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 阿佐 志保(アサ シホ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
