VagrantとDocker(1.5): Docker for Mac / Docker for Windowsという存在

このエントリーをはてなブックマークに追加

さて・・・、調査不足というか勉強不足だった。お恥ずかしい。
VagrantとDockerを組み合わせて云々という流れですすめる予定だったのだが、Dockerのドキュメントをよく読んでみると既にDocker for Mac / Win というものが存在していた。不覚である。
更に言うと、それ以前にDocker Toolboxというものが存在していたようである。Linuxしか見ていなかったため注意が及ばなかった(言い訳)

▽ Docker Toolbox

Docker Toolboxについてはまず冒頭に下記のような説明がある。既にレガシーであり、Docker for Mac、およびDocker for Windowsの必要条件を満たさない時に利用すべきであるとのこと。

Legacy desktop solution. Docker Toolbox is for older Mac and Windows systems that do not meet the requirements of Docker for Mac and Docker for Windows. We recommend updating to the newer applications, if possible.

Docker ToolBoxは下記のコンポーネントで構成されている。

  • Docker Machine
    docker-machineコマンド、複数のリモートDockerホストの管理やプロビジョンを行う
    Docker Machine Overview – Docker
    https://docs.docker.com/machine/overview/
  • Docker Engine
    dockerコマンド、Docker本体
  • Docker Compose
    docker-compose、オーケストレーションツール
  • Kitematic
    DockerのGUI
  • a shell preconfigured for a Docker command-line environment
    コマンド実行のための環境設定
  • Oracle VirtualBox
    仮想環境

つまり、Windows、あるいはMacにVirtualBox環境を構築し、そこへDockerを配置、動くようにするということらしい。

Linux版と異なるのがDockerMachineだ、Dockerホストのドライバーとして代表的なものだけでもAWS、Azure、GoogleComptuteEngine、Hyper-V、VirtualBox、VMwareなどに対応している。要するに大抵の仮想環境に対してDocker環境を構築、さらにコンテナをデプロイできるらしい。どうやらこのコマンドが後々、書こうと思っていたクラウドへのコンテナのダイレクトデプロイに関係あるようだ。
なお、MacのHyperkitについてはドライバーが存在しない。

そして注意しなければならないのがToolboxはレガシー扱いだが、DockerMachine等の各ツール群がレガシーになったわけではないことである。

▽ Docker for Mac / Windows

ではDocker for Mac / Docker for Windows、そしてレガシーとなったDocker Toolbox とは何なのだろうか?
簡単にまとめると下記のようになる

  • Docker for Mac
    1. Hyperkitという軽量hypervisorを利用
      • ただしYosemite以降
    2. Hyperkit上にてLinuxカーネルを動かす
    3. Linuxカーネル上でDockerコンテナを動かす
  • Docker for Windows
    1. hypervisorとしてHiper-Vを利用
      • ただしWindows10 Pro / Enterprise の64bit版
    2. Hyper-V上にてLinuxカーネルを動かす
      • ということは、これはProじゃないとダメなのかも
    3. Linuxカーネル上にてDockerコンテナを動かす
  • Docker Toolbox for Mac / Windows
    Yosemite以前やWin10以前の場合はこの手法になる

    1. VirtualBoxを動かす
    2. VirtualBox上にてLinuxカーネルを動かす
    3. Linuxカーネル上にてDockerコンテナを動かす

何のことはない、Docker with Vagrant方式と考え方は同じである。ただし、厳密には若干ことなる。Vagrantを用いた場合はフルセットのLinuxを準備してそこにDockerをセットアップ、そのまま開発環境としても利用してしまおうと考えていたからである。この辺は回を進めていく中で調整と検証をする予定である。