このエントリーをはてなブックマークに追加

2017年1月5日木曜日

Dockerと私。第1回

明けましておめでとうございます。
旧年中は色々とお世話になり誠にありがとうございました。
本年も何卒よろしくお願い致します。

最近このブログのテック度合いが半端ないなと感じておりますが、
重ねるかの様に「Docker」について話をしたく思います。

以前のドトール会で「Docker」の話をさせて頂いたのですが、
その時はDocker engineのインストールや、イメージPull、DockerRunさせて
コンテナの起動といった一連の流れを実践しながらやらせて頂きました。
ただ、上手く伝え切れなかった部分が多々あったというか、
結構な漏れがあったと思われましたので、
仮想環境の話やそもそも的なところからやり直そうと思った次第でございます。

  • コンテナ型・ハイパーバイザー型・ホスト型といった仮想化について
  • Dockerって?
  • Dockerの特徴(利点・欠点)

■コンテナ型・ハイパーバイザー型・ホストOS型といった仮想化について

この3つの違いは絵的なものを見てもピンと来ないかもしれませんので、
下記にて説明をします。

・コンテナ型仮想化(Docker、LXC、OpenVZ)

    ホストOSからは各コンテナがプロセスとして認識される。
    (コンテナ内では自コンテナのプロセスしか見えないが、ホスト側から各コンテナで動作する全プロセスが見える)
    他の仮想化と同様に、コンテナ毎にCPUやメモリなどのリソース制限ができる。

・ホスト型仮想化(VMware Player、VMware Fusion、VirtualBox)

    ホストOS上で仮想化ソフトを実行し、その上で仮想マシン、ゲストOSが稼働する。
    3種の仮想化の中では一番ホストマシンへの処理負荷が高い。
    ホストOS上で動作するアプリケーションと共存できるため、PC上など個人環境での利用が多い。   

・ハイパーバイザ型仮想化(ESXi、Hyper-V、Xen、KVM)

    ホストOSの代わりに仮想マシンを制御するプログラムのハイパーバイザが動作する。
    ホストサーバ全体を仮想化で利用する。
    ホストOSを経由しないため、ホストOS型よりレスポンスはよくなる。

ホスト型なんかはVirtualBoxを使ったりする方にはイメージし易いかもしれません。


■Dockerって?

 

Dockerはソフトウェアコンテナ内のアプリケーションのデプロイメントを自動化するオープンソースソフトウェア。
Linuxカーネルにおける「libcontainer」と呼ばれるLinuxコンテナ技術・namespace、aufs、cgroup等を利用してコンテナ型の仮想化を行う。
VMwareやKVM・Xenなどの完全仮想化を行うハイパーバイザー型と比べ
コンテナ型であるDockerは、ディスク使用量が少なく、
インスタンスの作成や起動は速く、性能劣化がほとんどないという利点を持っている。
Dockerfileと呼ばれる設定ファイルからコンテナイメージファイルの作成が可能という利便性を持つ一方で、
コンテナOSとしてはホストOSと同じLinuxカーネルしか動作しない。
(Docker Toolbox を使うことでMacやWindowsでの動作が可能)


■Dockerの特徴(利点・欠点)

Dockerの利点

ホスト側のカーネルを使うためオーバーヘッドが小さくて高速。
メモリなどのリソース消費を抑える事が出来る。
リソース消費が少ないので多くのコンテナを立ち上げる事が可能。
新たにカーネルを立ち上げる必要は無く、ハードウェアの初期化などの操作が不要であるためコンテナの起動が速い。

上記利点については、
以前携わっていた仕事で使っていたOSレベル仮想化ソフトウェアLXCも同様なのですが、
ただDockerが違うのは、コンテナを起動する際、
各コンテナ毎にDisk上にデータを持つのではなく、
イメージから複数のコンテナを作るという方式でコンテナを立ち上げたりします。
コンテナのイメージ(テンプレート的なもの)からコンテナを作れるので、
同一環境や構成を簡単に作る事が可能なのです。
開発からデプロイといった一連の作業が速く進むといった具合です。
   
LXCだとディスクをLVM等で管理してあげないと駄目だったり、
カーネルの持つケーパビリティの機能を使って
コンテナの特権を制御とか必要となったりするので、
ことソフトウエア開発に特化する場合においては
Dockerの便利さが際立っているのがわかると思います。

Dockerの欠点

Docker上のコンテナはホストのカーネルを利用する為、
カーネルを共有できるCentOSやUbuntuといったLinuxでは動作し共存も出来るのですが、
根本的にカーネルの異なるOS、例としてWindowsServerはホストとなるLinux上で動作は不可能です。

恐らく日々オープンソース云々とか言ってられる方にとっては、
Hyper-Vを使ってとかあんまり機会がないかもしれませんのでこの辺は多くを語らずに。

そんなMicrosoftさんですが、Microsoft Azureにてコンテナーベースのアプリケーションをデプロイおよび管理出来るそうですね。

そんな事は置いておいて、次回はDockerの利用方法について語ろうかと思います。

0 件のコメント:

コメントを投稿