コンテナ利用以前より仮想化などは利用されていました。今回は、コンテナと従来の仮想化を比較してコンテナについて、理解を深めていこうと思います。
Dockerの特長
Dockerは、開発者、システム管理者が、コンテナでアプリケーションを作成・運用するためのプラットフォームです。アプリケーションをデプロイするために、コンテナの形で提供できるようにすることをコンテナ化(containerization)と呼ばれています。コンテナ自体を利用することでデプロイがより簡単になります。 コンテナは、構築(build)、実行(run)、共有(share)することができます。コンテナの特長を見てみましょう。
- 柔軟(Flexible) :複雑なアプリケーションでもコンテナ化できます。
- 軽量(Lightweight) :ホスト・カーネルをコンテナは活用・共有するので、システムリソースに関しては仮想マシンよりも効率的に扱えます。
- 可搬性(Portable) :ローカルで構築し、クラウドにデプロイし、どこでも実行できます。
- 疎結合(Loosely coupled) :コンテナ自身のことは自分で完結し、カプセル化しています。
- 拡張性(Scalable) :複製が用意。
- 安全(Secure) :利用者による設定がなくても、コンテナは積極的な制限と分離(isolate)をプロセスに適用します。
コンテナと仮想マシンについて
コンテナと仮想マシンの違いを説明します。
仮想サーバは、仮想化ソフトウェアを利用した共有ハードウェアの上でOSを実行し、一台の専用サーバであるかのように利用することができるサーバです。仮想化ソフトウェアは、Hypevisorと呼ばれ、VMWare、Xen、KVM、VirtualBox、Hype-Vなど、無料なものから有料な製品などがあります。
コンテナは 、Linux 上の1つのプロセスにマッピングされ、そのプロセスが専用のサーバのように振る舞う挙動をします。Linuxカーネルのネームスペース、コントロールグループ(cgroup)という機能を利用して実現されているそうです。それぞれの実現方法を簡単にまとめてみました。
比較してみると従来の仮想マシンは、仮想化マシンを作成する際にOSの部分も保持するような形になっています。このあたりなどを見比べると、軽量であることがわかります。また、仮想マシンが従来のOS起動を行うのに対して、コンテナは、linuxのプロセスとして起動するので、起動自体でも早いのです。
補足
コンテナを実行する際に、Linuxカーネルのネームスペース、コントロールグループ等の機能を利用しているという説明をしました。そのため、コンテナを動かすためには、Linuxカーネル環境が利用できるようにする必要があります。Windows PC、Macでは、Linuxカーネルの実行環境が必要になります。Docker CE(コミュニティエディション)では、Docker Desktop for Mac、Docker Desktop for Windowsという形でそれぞれのハイパーバイザーの上で、LinuxKitを動かして、コンテナのランタイム”containerd”が動作する仕組みになっています。
今回は、従来の仮想化技術とコンテナという観点でDockerを見ていきました。次回以降で、Dockerのアーキテクチャについて掘り下げていこうと思います。
お疲れさまでした。