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)

環境構築も公式サイトからアプリをダウンロード&インストールするだけになったので非常に簡単です


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