Docker入門① -コンテナと仮想マシン-
まずは避けて通れないコンテナの仕組みについて書きましょう。コンテナとはDockerを動かすための仮想マシンみたいなものの事ですが、この「みたいなもの」というのが厄介なのです。
この記事の目的
コンテナと仮想マシンの仕組みと違いを知ろう
結論
ホストOSと同じOSのサーバーしか作れないが、とっても軽いのがコンテナ。
ホストOSと違うOSのサーバーが作れるが、重いのが仮想マシン
解説
前段で断りなくホストOSと書きましたが、これは一番大元のPCに入っているOSの事をここでは指します。今あなたがキーボードを打っているそのPCそのもののOSの事です。ちなみに、サーバーとPCの言葉を混ぜて使っていますが、基本同じ意味で今後使います。一応個人のPC的意味合いが強いときはPCを、どこかに設置して業務用に使うイメージのものをサーバーとしますが、伝わるかな。多分伝わらんやろな。まああまり気にせずに。
仮想マシン
では言葉の説明をしていきます。仮想マシンとは、あるサーバーの中に別のサーバーを作る技術を指します。
普通のPCの論理的構造として、物理マシンの上にホストOSが乗っかり、その上にアプリが乗っかります。
これに対して仮想マシンは、そのホストOSの上に新たにOS(以下ゲストOS)をのっけます。
仮想マシンを搭載するには仮想化ソフトウェアが必要です。図の中の「仮想化ソフトウェア」とはそれを指しており、Hyper-Vなどが有名です(が、ここではあまり気にしないことにします)。
さて、この図を見てわかる通り、全く新しくゲストOSを載せるわけですから、ホストOSと違う種類のOSも作れるという事になります。
一方でこれはいわばパソコンの物理機器以外の仕組みを、全部ホストサーバの中に作ることになるのでそれなりに負荷が高いです。これが冒頭で述べた「重くなる」の原因です。
コンテナ
コンテナって語源は何でしょうね?一般的にイメージするのは貨物船の荷物になってるあの箱ですかね。
多分このコンテナはそういうイメージをコンセプトに作られた技術だと思います。何が言いたいかというと、ホストサーバーという船の上に、コンテナもといコンテナ化したサーバを置くような技術を指しているわけです。
仮想化ソフトウェアを入れるのと同様にコンテナ化ソフトウェアも入れる必要があります。
とはいえ、肝心のコンテナ部分ではぱっと見普通のアプリを入れているのとあまり違いがないように見えますよね。そうなんです。コンテナというのは原則ホストOSと同じOSを稼働させるので、ゲストOSにあたる部分を導入する必要がなく、その分軽量化が出来ているのです。
もちろんこの図はデフォルメしているので、実際にソフトウェアを入れているのと同じようにコンテナを入れられるわけでは無いですが、論理的な仕組みとしては上図のようになっているわけです。
加えて、先ほど一つの「パッケージが如く」と書きましたが、このコンテナの部分はコードで記述することができます(これはイメージ化と呼びます)。そのコードさえあればどんなPC(もちろんホストOSは同じにする必要があります)にでも同じ環境を復元できるのです。
例えば、客先で開発していた環境(インストールされているソフトウェアやパッケージ、モジュールなど)をコンテナでイメージ化して、それを自社のパソコンに持ち込んで起動させるだけで、客先と全く同じ状況が再現できます。
コンテナをコードで書いてイメージ化?という感じだと思いますが、それは実際にDockerを導入するところで意味が分かってくると思います。
まとめ
仮想マシンはOSから作る一方でコンテナはOSがある前提でサーバーを構築できます。
しかもコンテナ化したイメージはコードによるものなので、管理がしやすく場所を問わず取り入れることができます
次回はいよいよDockerについて書きます。