WindowsでDockerを使う(Docker Toolboxを使用)

Tools

このたびWeb開発環境として使っていた仮想Linux環境を、VagrantベースからDockerベースに変えました。

WindowsでDocker環境を構築するうえで、抑えておくべきポイントをまとめました。

仮想環境を構築する

WindowsでDockerの実行環境を構築する方法には次のようなものがあります。

  • Docker for Windowsを使う (Hyper-Vを使用)
  • Docker Toolboxを使う (VirtualBoxを使用)
  • VirtualBoxやVMWareなどを使って自分で構築する

いずれもWindows上にLinuxカーネルの仮想環境をつくり、そこでDockerを動かします。

Docker for WindowsはHyper-V使用して環境を構築します。Hyper-Vはハイパーバイザー型の仮想環境なので、ハードウェアリソースが有効に使えるそうですが、Professionalエディション以上のWindowsでしか使えません。

ちなみにWSL(Windows Subsystem for Linux)ではDockerは使えないようです。

Docker Toolbox

Windows Homeエディションでの環境構築には、特にこだわりがなければDocker Toolboxを使うのがオススメです。Docker Toolboxを使うことの利点は次のようなものです

  • 仮想ホストの作成・操作が簡単(Docker MachineがVirtualBox向けに設定されている)
  • リソースが有効に使える(仮想ホストがDockerに特化している)
  • Windowsから直接dockerコマンドでコンテナ操作ができる(環境変数の設定が必要)

Docker Toolbox使うと以下のものがインストールされます

  • Docker Engine(Dockerを操作するツール)
  • Docker Machine(Dockerの実行環境(仮想ホスト)を構築・操作するツール)
  • Docker Compose(複数のコンテナをまとめて管理するツール)
  • Kitematic(DockerをGUIで操作するツール)
  • VirtualBox
  • Git for Windows

仮想ホストを作成

Docker Toolboxをインストールすると、スタートメニューにDocker Quickstart Terminalが作成されます。

これを実行するとBashでスクリプトが実行され、VirtualBox上にdefaultという名の仮想ホストが作成されます。

仮想ホストを自分で作成する場合

Quickstart Terminalを使わずに仮想ホストを作成するときは、docker-machineコマンドを使います。

> docker-machine create <仮想ホスト名>

Docker Quickstart Terminalでエラーが出る場合

Git for WindowsでインストールされるBashではなく、MSYS2のBashなどを使うとエラーが出ることがあります。これは以下の記事のようにスクリプトを修正することで対処できます。

WindowsのDocker Quickstart Terminalで”vboxmanage.exe”が見つからないエラーになる

もっともQuickstart Terminalを無理に使う必要はないので、気にならないなら放っておいてもかまいません。

仮想ホストにSSHで繋ぐ

docker-machineコマンドを使う方法と、SSHクライアントで繋ぐ方法があります。

docker-machineコマンド

> docker-machine ssh <仮想ホスト名>    // ホスト名がdefaultならホスト名は省略可

SSHクライアント

$ ssh docker@<仮想ホストのIP>    // パスワードは"tcuser"

Windowsから直接dockerコマンドを使う

仮想ホストに対応した環境変数を追加することで、Bashやコマンドプロンプトなどから直接dockerコマンドを実行し、コンテナを操作できるようになります。

追加すべき環境変数はdocker-machineコマンドで確認できます。

Bashの場合

$ docker-machine env <仮想ホスト名>

export DOCKER_TLS_VERIFY="1"などのように表示されるので、表示されたコマンドを実行して環境変数を追加します。またはevalコマンドを使ってまとめて追加します。

$ eval "$(docker-machine env <仮想ホスト名>)"

コマンドプロンプトの場合

> docker-machine env <仮想ホスト名>

SET DOCKER_TLS_VERIFY=1などのように表示されるので、表示されたコマンドを実行して環境変数を追加します。

SETコマンドで追加した環境変数は、コマンドを実行したウィンドウでのみ有効です。1つの仮想ホストしか使わないのであれば、Windowsの設定などから永続的な設定にしてしまってもいいと思います。

Windowsと仮想ホスト間のディレクトリ共有

デフォルトでC\Usersが共有されています(仮想ホスト上では/c/Usersでマウント)。

共有ディレクトリの追加や変更はVirtualBoxの設定で行います。コマンドで設定する場合は以下のようにします。

> VBoxManage.exe sharedfolder add <仮想ホスト名> --automount --name <仮想ホストのディレクトリ> --hostpath 

外部からのアクセス

VirtualBoxの設定でブリッジ接続を追加するのが簡単です。

NATのまま使う場合

netshコマンドでポートフォワードを設定します(管理者権限必須)。

> netsh interface portproxy add v4tov4 listenport=<ポート番号> connectaddress=<仮想ホストのIP> connectport=<ポート番号>

ファイアウォールのポート開放も必要です(設定ミスに注意)。以下Windows標準ファイアウォールを使っている場合。

> netsh advfirewall firewall add rule name=”<ルール名>” protocol=TCP dir=in remoteip=<接続を許可するIP> localport=<ポート番号> action=allow

まとめ

Docker ToolboxでつくるDocker環境はVirtualBoxを使ったものですが、一度環境を構築してしまえば、そのことをあまり意識せずに使うことができます。

Windowsにおいても、開発環境でのDockerの取り回しの良さはそのまま活かせると思います。

コメント