第1回 Dockerとは超入門Docker

Dockerの概要を知るための超入門連載(全4回)。Dockerとは何か、コンテナとは何か、従来のハードウェアエミュレーション型の仮想化とはどう違うのかなどについてまとめておく。

» 2017年01月30日 05時00分 公開
[打越浩幸デジタルアドバンテージ]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「超入門Docker」のインデックス

連載目次

本入門連載では、システム管理者やシステムエンジニアの方々を主な対象として、IT業界でよく使われる技術や概念、サービスなどの解説をコンパクトにまとめておく。



 「Docker(ドッカー)」とは、非常に軽量なコンテナ型のアプリケーション実行環境である。dotCloud社(現Docker社)が開発し、2013年にオープンソースのプロジェクトとして公開された。ソフトウェアの高速な配布・実行や容易なイメージのカスタマイズ、導入運用の手軽さ、豊富なプレビルドイメージの提供などの理由により、当初はソフトウェアの開発やテスト段階における利用が多かったが、現在ではパブリッククラウドからオンプレミスシステムまで、さまざまなシーンで急速に普及しつつある。

  • Docker[英語](docker.com)

軽量なコンテナ型の仮想化環境Docker

 独立したアプリケーション実行環境といえば、PCのハードウェア全体を仮想化して、その上でOSやアプリケーションなどを動作させる仮想実行環境を真っ先に思い浮かべることが多いだろう。ハイパーバイザ型(Hyper-Vなど)やホスト型(VMware PlayerやWindows Virtual PC、VirtualBoxなど)がある。だがこの方式では、目的のアプリケーションとは関係のないサービスなども多数動作することになり、オーバーヘッドが大きく、リソースも無駄に多く必要になりがちだ。

 これに対してコンテナ型の仮想化環境とは、Linuxカーネルが持つ「コンテナ」機能などを使って、実行環境を他のプロセスから隔離し、その中でアプリケーションを動作させる技術である。

 コンテナはLinuxの通常のプロセスとほぼ同じものだが、利用できる名前空間リソースが他のプロセスやコンテナからは隔離され、それぞれ固有の設定を持てるようになっている。そのためコンテナ内のアプリケーションから見ると、独立したコンピュータ上で動作しているように振る舞う。コンテナを管理するコストはプロセスを管理するコストとほとんど変わらず、仮想マシンを管理するコストと比較すると非常に軽い。

 コンテナはLinuxカーネルが持つ次の機能を利用して実現されている。

■名前空間の隔離機能
 ファイルシステムやコンピュータ名、ユーザー名(ユーザーID)、グループ名(グループID)、プロセスID、ネットワーク機能などを、コンテナごとに独自に設定できるようにする機能。

■リソースの隔離機能
 CPUやメモリ、ディスク入出力など、コンテナ内で利用するリソースを他のコンテナから隔離したり、設定に基づいて振り分けたりする機能。

 Dockerでは、最終的なアプリケーションはホストOS上の1つのプロセスとして実行されているため、余計なオーバーヘッドがない。

Dockerの実行環境 Dockerの実行環境
Dockerでは、最終的なアプリケーションはホストOS中の1プロセスとして実行されているため、余計なオーバーヘッドがない。ただし通常のLinuxのプロセスと違って、Linuxカーネルのサポートする「コンテナ」技術などをベースにしている。コンテナは、他のプロセスからは隔離された、ある程度独立したプロセス実行環境である。コンテナごとにファイルシステムやネットワークインタフェース、名前空間などが独立している。図中の「Docker Engine」はDockerのコンテナの実行をサポートするためのモジュールであり、外部からはDocker APIを使って制御される。Docker機能をインストールして、コンテナを実行できるようにしたLinuxシステム全体をまとめてDockerホストと呼ぶ。1つのDockerホスト内では複数のコンテナを実行できる。

 参考のために、ハイパーバイザ型やホスト型の仮想実行環境の例を次に挙げておく。この環境では、仮想化されたハードウェア上でLinux OSが動作し、さらにその上で目的のアプリケーションのプロセスが動作している。アプリケーションを実行するためにはまずゲストOSを稼働させなければならず、起動に時間もかかるし、CPUやメモリ、ディスクなどのリソースも多く消費する。

ハードウェア仮想化型の仮想実行環境 ハードウェア仮想化型の仮想実行環境
ハイパーバイザ型やホスト型の仮想実行環境では、ホストOS上でまず仮想的な仮想マシン環境を作成/実行し、さらにその中でゲストOSを実行している。最終的なアプリケーション(図中のアプリケーションプロセスの部分)を動かすために、仮想マシンやゲストOSを実行させねばならず、それら全てがオーバーヘッドとなる。

Dockerイメージとは?

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。