Dockerとは
旧dotcloud社(現docker社)が開発したLXCユーティリティ。
LXCとはOSの仮想化技術の1つで、VMに比べて軽量であることが特徴(コンテナと呼ばれる)。
LXCはLinuxOS上でしか動作しない。
つまりどういうことかというと
Dockerは軽量な仮想マシンを簡単に構築することができ、インフラを含めたアプリ全体をまるまる、
コンテナという箱に閉じ込めることができる。また、コンテナの配布やバージョン管理も可能
で、そもそもVMでの開発とどう変わるか
DockerとVagrantの違い
Vagrant (+ VirtualBox)
仮想マシンを動かす仮想化ソフトのラッパーツール
VirtualBoxの構成をVagrantfileというテキストに記述してVagrantに任せることで、ネットワークドライバの設定などを意識すること無く、ホスト環境に依存しない形で整備される
【特徴】
- Linux以外のOSの環境が構築できるため、コンテナ型と比べて自由度が高い
- OSのバージョンの違い、仮想環境ツールの違い、仮想環境ツールの設定の違いなどで構築に手間がかかる
- VagrantとVirtualBoxのバージョンの相性によってバグがある
- 仮想環境はホストOS型と呼ばれ、ゲストOSがハードウェアにアクセスするにはホストOSを経由しなければならないため、オーバーヘッドが大きい
Docker
OS・ミドルウェア・ファイルシステム全体をイメージという単位で取り扱い、まるごとやりとり出来るツール
【特徴】
- 仮想環境はコンテナ型と呼ばれるもので、ホストOSを直接アクセスするためオーバーヘッドが少ない
- 環境構築が容易でVirtual Boxも不要
- コンテナは**移植性(ポータビリティ)**が高く、Dockerさえインストールされていれば、全く同じ環境でアプリを動かせる
- ホストOSからはコンテナは1プロセスとして認識される
Docker環境構築の歴史
Dockerは多数の専用ツールで動作するため、様々なツールが登場した反面、
使われなったツールも多く、死語も多いので解説していきます
従来、Docker動作させるための必要なツールをまとめた、 Docker Toolboxが提供されていました
Docker Toolbox
2015年8月12日 〜 2016年8月1日
Docker1.8.0と同時にリリースされた、Dockerまわりの環境を全部入れたインストーラ
・Docker クライアント
・Docker Machine (Docker入りVM操作ツール)
・Docker Compose (Docker複数コンテナ連携管理)
・Docker Kitematic (Dockerコンテナ用GUI)
・VirtualBox
DockerはVirtual Box環境が必須であり、
Docker MachineというVirtual Boxを操作するツールで環境設定を行わないとDockerを利用できませんでした
Docker for Mac / Windowsの登場
2016年8月1日〜 各OS純正の仮想環境を利用するDocker for Mac / Windowsが正式版としてリリースされ、Virtual Boxと環境設定が不要になり、各OSネイティブサポートの仮想環境(ハイパーバイザ)で動作するため、さらに高速になりました
OS | ネイティブ仮想環境(ハイパーバイザ) |
---|---|
Mac | xhyve(Yosemite v10.10.3 以降) |
Windows | Hyper-V (Windows10 x64 Pro,Education,Enterprise) |
環境構築も公式サイトからアプリをダウンロード&インストールするだけになったので非常に簡単です
ちなみに、Docker Toolboxの登場まで
Virtual BoxとDockerを連携させるにはboot2dockerというツールが使われてきましたが
Docker Machineの登場でboot2dockerは公式に非推奨となりました
なぜDocker?
普段の開発においては以下のメリットデメリットがある
メリット
- OS依存がなく、導入が容易
- 案件ごとに異なる環境を構築できるため、特定のPC依存を回避
- ミドルウェア導入や新インフラ環境のテストが各自のPCで可能
- 言語やツールのバージョンアップテストが容易
- チームメンバー全員が各自のPCでデバッグ可能になる
デメリット
- 学習コスト
さいごに
調査の結果、学習コストはあるものの
環境構築の手軽さ、Docker界隈の盛り上がりを考えると、今がDockerの学習を始める最高のタイミングだと思いました
早速、公式サイトからDocker for Mac / Windowsをダウンロードしてインストールしてみてはどうでしょうか
リンク
Docker入門 #2 【Dockerチュートリアル】
Docker入門 #3 【WordPress環境構築】
Docker入門 #4 【CodeIgniter環境構築】
Docker入門 #5 【Ruby on Rails5環境構築】
Docker コマンドチートシート