Oracle VirtualBox

VirtualBox を使い、ローカルにマシンを作成します。このドライバを使うには、ホスト上に VirtualBox 5 以上のインストールが必要です。VirtualBox 4 の場合は動作するかもしれませんが、警告が出ます。それよりも古いバージョンは実行できません。

$ docker-machine create --driver=virtualbox vbox-test

完全に新しいマシンを作成するか、Boot2Docker 仮想マシンにあるデータを変換して仮想マシンに取り込めます。Boot2Docker 仮想マシンを変換するには、以下のコマンドを実行します。

$ docker-machine create -d virtualbox --virtualbox-import-boot2docker-vm boot2docker-vm b2d

オプション:

  • --virtualbox-memory : ホストのメモリ容量を MB 単位で指定。
  • --virtualbox-cpu-count : 作成する仮想マシンが使う CPU 数。デフォルトは CPU 1つ。
  • --virtualbox-disk-size : ホストのディスク容量を MB 単位で指定。
  • --virtualbox-host-dns-resolver : ホスト DNS レゾルバの使用( Boolean 値で、デフォルトは false)。
  • --virtualbox-boot2docker-url : boot2docker イメージの URL を指定。デフォルトは利用可能な最新バージョン。
  • --virtualbox-import-boot2docker-vm : 取り込む Boot2Docker 仮想マシンの名前。
  • --virtualbox-hostonly-cidr : ホストオンリー・アダプタの CIDR 。
  • --virtualbox-hostonly-nictype : ホストオンリー・ネットワーク・アダプタのタイプを指定。値は 82540EM (Intel PRO/1000)、 Am79C973 (PCnet-FAST III) 、virtio-net 準仮想化ネットワーク・アダプタのいずれか。
  • --virtualbox-hostonly-nicpromisc : ホスト・オンリー・ネットワーク・アダプタのプロミスキャス・モードを指定。オプションは deny、allow-vms、allow-all のいずれか。
  • --virtualbox-no-share : ホーム・ディレクトリのマウントを無効化。
  • --virtualbox-no-dns-proxy : 全ての DNS リクエストをホスト側にプロキシしない( Boolean 値で、デフォルトは false)。
  • --virtualbox-no-vtx-check : 仮想マシンを起動する前にハードウェア仮想化が利用可能かどうかを確認。

--virtualbox-boot2docker-url フラグには、いくつかの異なった使い方があります。デフォルトでは、フラグに値を何も指定しなければ、Docker Machine はローカルの boot2docker ISO を探します。もしローカル上に見つかれば、マシン作成用の ISO として用いられます。もし見つからない場合は、 boot2docker/boot2docker にある最新の ISO イメージをダウンロードし、ローカルに保存してから使います。つまり、ローカルに「キャッシュされた」boot2docker ISO を更新したい場合は、 docker-machineupgrade を実行しなくてはいけません。

これはデフォルトの挙動( --virtualbox-boot2docker-url="" を指定 )ですが、オプションで ISO を http://file:// プロトコルで指定することもサポートされています。 file:// はローカルに置かれている ISO イメージのパスを探します。例えば、 --virtualbox-boot2docker-urlfile://$HOME/Downloads/rc.iso を指定すると、リリース候補のダウンロード済み ISO を確認します。あるいは、 http:// 形式を使い、インターネットの ISO を直接指定できます。

ホスト・オンリー・アダプタをカスタマイズするには、 --virtualbox-hostonly-cidr フラグを使えます。ここでホスト IP を指定すると、Machine は VirtualBox DHCP サーバ・アドレスを計算( .1.25 までのサブネット上の、ランダムな IP )するので、指定したホスト IP と衝突しないようにします。また、Machine は自動的に最小 .100 ~最大 .254 までの間で DHCP を指定します。たとえば、CIDR 192.168.24.1/24 を指定すると、DHCP サーバは 192.168.24.2-25 になり、IP アドレスの範囲は最小 192.168.24.100 から最大 192.168.24.254 となります。

利用可能な環境変数とデフォルト値は以下の通りです。

コマンドライン・オプション環境変数デフォルト値
--virtualbox-memoryVIRTUALBOX_MEMORY_SIZE1024
--virtualbox-cpu-countVIRTUALBOX_CPU_COUNT1
--virtualbox-disk-sizeVIRTUALBOX_DISK_SIZE20000
--virtualbox-host-dns-resolverVIRTUALBOX_HOST_DNS_RESOLVERfalse
--virtualbox-boot2docker-urlVIRTUALBOX_BOOT2DOCKER_URL最新のboot2dockerurl
--virtualbox-import-boot2docker-vmVIRTUALBOX_BOOT2DOCKER_IMPORT_VMboot2docker-vm
--virtualbox-hostonly-cidrVIRTUALBOX_HOSTONLY_CIDR192.168.99.1/24
--virtualbox-hostonly-nictypeVIRTUALBOX_HOSTONLY_NIC_TYPE82540EM
--virtualbox-hostonly-nicpromiscVIRTUALBOX_HOSTONLY_NIC_PROMISCdeny
--virtualbox-no-shareVIRTUALBOX_NO_SHAREfalse
--virtualbox-no-dns-proxVIRTUALBOX_NO_DNS_PROXYfalse
--virtualbox-no-vtx-checkVIRTUALBOX_NO_VTX_CHECKfalse

既知の問題

Vboxfs は longstanding bug により、キャッシュされたファイル内容を提供するため sendfile(2) を引き起こします。

これにより、nginx のようなウェブ・サーバが共有ボリュームから静的ファイルを読み込むとき、問題を引き起こしがちです。開発環境では、サーバの設定で sendfile を無効化するのが良いでしょう。