サイトアイコン APPSWINGBY Developers Blog

Docker入門 #1 コンテナと仮想マシンを比較する

コンテナ利用以前より仮想化などは利用されていました。今回は、コンテナと従来の仮想化を比較してコンテナについて、理解を深めていこうと思います。

Dockerの特長

Dockerは、開発者、システム管理者が、コンテナでアプリケーションを作成・運用するためのプラットフォームです。アプリケーションをデプロイするために、コンテナの形で提供できるようにすることをコンテナ化(containerization)と呼ばれています。コンテナ自体を利用することでデプロイがより簡単になります。 コンテナは、構築(build)、実行(run)、共有(share)することができます。コンテナの特長を見てみましょう。

コンテナと仮想マシンについて

コンテナと仮想マシンの違いを説明します。

仮想サーバは、仮想化ソフトウェアを利用した共有ハードウェアの上で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 MacDocker Desktop for Windowsという形でそれぞれのハイパーバイザーの上で、LinuxKitを動かして、コンテナのランタイム”containerd”が動作する仕組みになっています。

今回は、従来の仮想化技術とコンテナという観点でDockerを見ていきました。次回以降で、Dockerのアーキテクチャについて掘り下げていこうと思います。

お疲れさまでした。

モバイルバージョンを終了