Dockerの概要を知るための超入門連載(全4回)。Dockerとは何か、コンテナとは何か、従来のハードウェアエミュレーション型の仮想化とはどう違うのかなどについてまとめておく。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
本入門連載では、システム管理者やシステムエンジニアの方々を主な対象として、IT業界でよく使われる技術や概念、サービスなどの解説をコンパクトにまとめておく。
「Docker(ドッカー)」とは、非常に軽量なコンテナ型のアプリケーション実行環境である。dotCloud社(現Docker社)が開発し、2013年にオープンソースのプロジェクトとして公開された。ソフトウェアの高速な配布・実行や容易なイメージのカスタマイズ、導入運用の手軽さ、豊富なプレビルドイメージの提供などの理由により、当初はソフトウェアの開発やテスト段階における利用が多かったが、現在ではパブリッククラウドからオンプレミスシステムまで、さまざまなシーンで急速に普及しつつある。
独立したアプリケーション実行環境といえば、PCのハードウェア全体を仮想化して、その上でOSやアプリケーションなどを動作させる仮想実行環境を真っ先に思い浮かべることが多いだろう。ハイパーバイザ型(Hyper-Vなど)やホスト型(VMware PlayerやWindows Virtual PC、VirtualBoxなど)がある。だがこの方式では、目的のアプリケーションとは関係のないサービスなども多数動作することになり、オーバーヘッドが大きく、リソースも無駄に多く必要になりがちだ。
これに対してコンテナ型の仮想化環境とは、Linuxカーネルが持つ「コンテナ」機能などを使って、実行環境を他のプロセスから隔離し、その中でアプリケーションを動作させる技術である。
コンテナはLinuxの通常のプロセスとほぼ同じものだが、利用できる名前空間やリソースが他のプロセスやコンテナからは隔離され、それぞれ固有の設定を持てるようになっている。そのためコンテナ内のアプリケーションから見ると、独立したコンピュータ上で動作しているように振る舞う。コンテナを管理するコストはプロセスを管理するコストとほとんど変わらず、仮想マシンを管理するコストと比較すると非常に軽い。
コンテナはLinuxカーネルが持つ次の機能を利用して実現されている。
■名前空間の隔離機能
ファイルシステムやコンピュータ名、ユーザー名(ユーザーID)、グループ名(グループID)、プロセスID、ネットワーク機能などを、コンテナごとに独自に設定できるようにする機能。
■リソースの隔離機能
CPUやメモリ、ディスク入出力など、コンテナ内で利用するリソースを他のコンテナから隔離したり、設定に基づいて振り分けたりする機能。
Dockerでは、最終的なアプリケーションはホストOS上の1つのプロセスとして実行されているため、余計なオーバーヘッドがない。
参考のために、ハイパーバイザ型やホスト型の仮想実行環境の例を次に挙げておく。この環境では、仮想化されたハードウェア上でLinux OSが動作し、さらにその上で目的のアプリケーションのプロセスが動作している。アプリケーションを実行するためにはまずゲストOSを稼働させなければならず、起動に時間もかかるし、CPUやメモリ、ディスクなどのリソースも多く消費する。
Copyright© Digital Advantage Corp. All Rights Reserved.