Docker についての基本学習
今回は個人的に Docker に興味があり、少し調べて見たものをまとめました。
あくまでも個人的な意見なので語弊があれば済みません。
Docker とは何か?
Docker とは、コンテナ型の疑似的なコンピュータ(仮想環境)を作成・配布・実行するものです。
例 Windows や Mac 中に Ubuntu や AlamaLinux をインストールして利用するなどがあります。
┌----------------┐┌----------------┐
│Windows ││Mac OS │
│ ││ │
│┌------------┐││┌------------┐│
││ Ubuntu ││││ Ubuntu ││
│└------------┘││└------------┘│
└----------------┘└----------------┘
ホストOS
ホスト OS とは、物理的な PC 上の OS。 上記図の Windows や Mac OS がホスト OS に該当します。
ゲストOS
ゲスト OS とは、物理的な PC 上で仮想的に動作する OS。 上記図の Ubuntu がゲスト OS に該当します。
コンテナ型とは何か?
コンテナ型とは、ホスト OS を動かしているカーネル(kernel)を利用し、ゲスト OS が存在しているように仮想環境を構築するものです。
┌----------------┐┌----------------┐
│Container ││Container │
│┌------------┐││┌------------┐│
││Application ││││Application ││
│└------------┘││└------------┘│
│┌------------┐││┌------------┐│
││Middlewear ││││Middlewear ││
│└------------┘││└------------┘│
└----------------┘└----------------┘
┌------------------------------------┐
│Docker │
└------------------------------------┘
┌------------------------------------┐
│OS (Windows or Mac OS) │
└------------------------------------┘
┌------------------------------------┐
│Hardware │
└------------------------------------┘
上記のような、Docker 上に コンテナと呼ばれる仮想イメージ群で環境を構築します。
仮想イメージとは何か?
仮想イメージとは、コンテナを構成するうえで必要なミドルウェアを意味します。
例:Ubuntu OS 上で、LAMP 環境を構築数る場合に以下のものが必要になります。
- Apache または Nginx などの WEBサーバ
- MySQL、PostgreSQL、MongoDB などの DBサーバ
- PHP のインストール
LAMP環境を構築するために必要な各ミドルウェアが Docker の仮想イメージとして公開されています。この仮想イメージを組み合わせてコンテナを作成します。
┌-----------------┐
│ Container │
│┌-------------┐│
││ Apache ││
│└-------------┘│
│┌-------------┐│
││ MySQL ││
│└-------------┘│
│┌-------------┐│
││ PHP ││
│└-------------┘│
└-----------------┘
仮想化マシン
Docker のようなホスト OS のカーネル( kernel )を利用したコンテナ型の仮想環境とは別に仮想化マシンによる仮想環境を構築する方法もあります。 仮想化マシンは、ホスト OS 上にゲスト OS をインストールし仮想環境を構築します。
主に、Oracle Virtual Box、VMWear、Xen などと言ったものがあります。
Docker は、ホスト OS のカーネル( kernel )を利用し、コンテナを起動するため軽量でかつ高速起動が可能ですが、仮想化マシンは、ホスト OS 上にゲスト OS を一式追加するため HDD の容量やメモリもそれなりに消費されます。
仮想化マシンは、環境をインストールする必要があるため最低でも Linux の知識が必要になります。なので Linux のインストールや環境構築を勉強してみたいという方は、仮想化マシンでも問題ないと思います。
┌----------------┐┌----------------┐
│ Virtual PC ││ Virtual PC │
│┌------------┐││┌------------┐│
││ Application││││ Application││
│└------------┘││└------------┘│
│┌------------┐││┌------------┐│
││ Middlewear ││││ Middlewear ││
│└------------┘││└------------┘│
│┌------------┐││┌------------┐│
││ Ubuntu ││││ Ubuntu ││
│└------------┘││└------------┘│
└----------------┘└----------------┘
┌------------------------------------┐
│ Virtual Machine │
└------------------------------------┘
┌------------------------------------┐
│ OS (Windows or Mac OS) │
└------------------------------------┘
┌------------------------------------┐
│ Hardware │
└------------------------------------┘
メリット・デメリット
メリット
-
環境構築が簡単
Docker は、仮想化マシンと異なり Linux など環境構築の知識が不要です。 -
軽量で高速
Docker は、ホスト OS のカーネル( kernel )を利用しているため、環境の起動などが高速に行われます。 -
ストレージなどの資源の削減
仮想化マシンとはことなり、コンテナのサイズが小さいのでストレージ容量の消費を抑えることができます。 -
共有化された環境
Docker を利用することで、自分の作業PC、開発メンバーのPC や OS が異なる PC にも同じ環境を構築することができます。
デメリット
-
各コンテナで同一のカーネルが利用される
Docker は、ホスト OS のカーネル( kernel )を利用しているため、OS 依存の検証などには不向きといった点があります。 -
Docker を利用できる OS が限定
Docker は、Windows や Mac といった代表的な OS には対応しているものの、Windwos Server などには対応されていないといった点もあります。 -
習得に時間がかかる
Docker の習得方法は、仮想化マシンの環境構築とは異なり Linux のインストールなどと言った Linux の基礎知識とは別に、Docker ファイル(Dockerfile)の作成など、独自の環境構築方法を理解しないと利用しにくいといった点があります。