Docker入門 #1 【Dockerとは】

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を利用できませんでした

しかし

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)

環境構築も公式サイトからアプリをダウンロード&インストールするだけになったので非常に簡単です
( 2016年10月現在、最新バージョンは1.12.1


ちなみに、Docker Toolboxの登場まで
Virtual BoxとDockerを連携させるにはboot2dockerというツールが使われてきましたが
Docker Machineの登場でboot2dockerは公式に非推奨となりました

なぜDocker?

https://cloverlab.qiita.com/Hatajoe/items/98933a169a8f741da9d9
新サーバー案でも書いてある通り、社内環境においては様々なメリットがあることがわかる

普段の開発においては以下のメリットデメリットがある

【メリット】
・案件ごとに異なる環境を構築できるため、特定のPC依存を回避
・ミドルウェア導入や新インフラ環境のテストが各自のPCで可能
・OS依存がなく、導入が容易
・チームメンバー全員が各自のPCでデバッグ可能になる
・各自のPCで期間周りのデバッグが可能(Dockerコンテナのシステム時間を変更する)

【デメリット】
・学習コスト
・ソースコードやDBは手元で完全に本番環境と同じに出来るものの、インフラ環境が開発と本番環境で違う問題は解消されない
 → 本番をDockerで運用することも可能だが、落とし穴にはまりそうな予感…
 

さいごに

調査の結果、学習コストはあるものの
環境構築の手軽さ、Docker界隈の盛り上がりを考えると、今がDockerの学習を始める最高のタイミングだと思いました

早速、公式サイトからDocker for Mac / Windowsをダウンロードしてインストールしてみましょう!

0 件のコメント :

コメントを投稿