入門
docker
インフラ

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

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)

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


ちなみに、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 コマンドチートシート