2015.05.08

Docker Client for Windowsで拡がる夢

WS0054

こんにちは、次世代システム研究室のN.O.です。
以前こちらの記事でMac上にDockerを利用したfuelphp+LAMPの開発環境を構築する記事を書きましたが、WindowsにもDocker clientが登場したので、Mac/Windowsで同じような操作で開発ができるようになるのでないかと思い調べてみました。実際にはまだまだ同じような操作でという訳にはいかなかったのですが、できる範囲でWindows+Dockerでfuelphp+LAMPの開発環境構築を試してみました。今回はfuelphpのWelcome画面の表示を目指します。環境はWindows 7 Pro 64bit, boot2docker 1.6.0を使用しています。

docker-composeが使えない

まずdocker-composeが使えない事が分かりいきなりつまづきました。docker-composeはアプリに必要なコンテナをファイルに定義したり、コマンド1発でdocker buildと複数コンテナを起動する事できますが、これが使えないととても痛いです。
Macと64-bit Linuxではdocker-composeのバイナリが提供されているのですが、boot2dockerのTiny Core Linuxはuserspaceが32bitなので動作しません。issue
またそれ以外のプラットフォームではpipでインストールはできるとあるのですが、こちらもWindowsのpythonだと動作しません。issue-1 issue-2

現在composeをcontainerにする方向と、Windowsでsupportする方向のissueが上がっています。どちらもEpicというタグがついていていつ実装されるか見当もつきませんが、気長に待ちたいと思います。
Epic: Make Compose a Docker container · Issue #169 · docker/compose
Epic: Windows support · Issue #1085 · docker/compose

いろいろ試す

docker-composeがWindowsで使える日が来る事を祈りつつ、いろいろ試してみます。

インストール

Windows Docker clientはboot2dockerに同梱されています。
またDocker clientだけでよい場合は単体でダウンロード可能です。Windows client 64-bit
単体のdockerはchocolateyでもインストールできます。Chocolatey Gallery | Docker 1.6.0

今回はboot2dockerを使用しますので、こちらReleases · boot2docker/windows-installer
からdocker-install.exeをダウンロードします。

boot2dockerのインストールでSelect Componentsまで進んだら「Docker Client for Windows」、「Boot2Docker management tool and ISO」、「MSYS-git UNIX tools」にチェックを入れます。
GitHub for Windowsなどをインストールしている場合は「MSYS-git UNIX tools」無しでよいかもしれません。
VirtualBoxが無い場合はこちらにもチェックを入れます。
boot2docker_install_win

PowerShellを起動しsshのあるところにパスを通します。
PS C:\> $Env:Path = "${Env:Path};c:\Program Files (x86)\Git\bin"
手元の環境ではGitHub for Windowsを使ってますので、”C:\MinGW\msys\1.0\bin”にパスを通します。
PS C:\> $Env:Path = "${Env:Path};C:\MinGW\msys\1.0\bin"
boot2docker startを実行します。
PS C:\> boot2docker start
boot2dockerが起動済みの時はboot2docker shellinitを実行します。
PS C:\> $Env:Path = "${Env:Path};C:\MinGW\msys\1.0\bin"
PS C:\> boot2docker shellinit
Writing C:\Users\$HOME\.boot2docker\certs\boot2docker-vm\ca.pem
Writing C:\Users\$HOME\.boot2docker\certs\boot2docker-vm\cert.pem
Writing C:\Users\$HOME\.boot2docker\certs\boot2docker-vm\key.pem
If you are running inside Windows Command Prompt (cmd.exe), copy and paste the
following commands to your terminal to set the environment variables:
    set DOCKER_CERT_PATH=C:\Users\$HOME\.boot2docker\certs\boot2docker-vm
    set DOCKER_TLS_VERIFY=1
    set DOCKER_HOST=tcp://192.168.59.103:2376

If you are running inside PowerShell, copy or paste the following commands
to your shell or run "boot2docker shellinit | Invoke-Expression" to set the
environment variables:
    $Env:DOCKER_HOST = "tcp://192.168.59.103:2376"
    $Env:DOCKER_CERT_PATH = "$HOME\.boot2docker\certs\boot2docker-vm"
    $Env:DOCKER_TLS_VERIFY = "1"
“If you are running inside PowerShell, copy or paste the following commands”とあるのでコピペします。
$Env:DOCKER_HOST = "tcp://192.168.59.103:2376"
$Env:DOCKER_CERT_PATH = "$HOME\.boot2docker\certs\boot2docker-vm"
$Env:DOCKER_TLS_VERIFY = "1"
これで準備ができました。docker versionが表示できるようになります。
docker_version_win

docker build

こちらの記事で使用したレポジトリのDockerfileを使ってbuildしてみます。前述の通りdocker-composeが利用できませんので心をこめて手作業でbuildします。

docker buildするとWARNINGが表示されます。ADDでファイルやディレクトリを追加したときのパーミッションが755になってしまうようです。必要に応じて変更するようにしたほうがよさそうです。
> docker build -t web .
WARN[0000] SECURITY WARNING: You are building a Docker image from
Windows against a Linux Docker host. All files and directories added
to build context will have '-rwxr-xr-x' permissions.
It is recommended to double check and reset permissions for
sensitive files and directories.
Sending build context to Docker daemon
あとdockerがイメージをダウンロードすると画面が崩れ、ダウンロード進捗が下から上に流れていきます。これはissueも上がっています。

build自体は問題なく終わりました。
> docker images web
REPOSITORY    TAG       IMAGE ID        CREATED           VIRTUAL SIZE
web           latest    79c01ab44255    21 minutes ago    434.7 MB

コンテナを起動する

docker buildで作成したイメージを使っていくつかコンテナを起動してみます。こちらも前述の通りdocker-composeが利用できませんので心をこめて手作業で起動します。

dbコンテナを作成します。MYSQL_ROOT_PASSWORDとMYSQL_DATABASEは適宜変更します。
docker run -d -e "MYSQL_ROOT_PASSWORD=mysecretpassword" -e "MYSQL_DATABASE=fuel_intro" --name=db mysql
dbコンテナにfuelphpのテーブルを作成します。
ここでvolume(-v)でのパスの扱いですが、boot2dockerではvirtualboxの共有フォルダ設定でC:\Userが/c/Usersとしてマウントされます。この点を考慮して-vオプションを指定しています。
docker run --rm --link=db:db --name=web -p 3000:80 -v /c/Users/"ユーザ名"/boot2docker/fuelphp_demo_app:/var/www/demo_app web php demo_app/oil refine migrate:current
webコンテナを起動します
docker run -d --link=db:db --name=web -p 3000:80 -v /c/Users/"ユーザ名"/boot2docker/fuelphp_demo_app:/var/www/demo_app web
実行時の表示はこのような感じになりました。
WS0055

ブラウザでhttp://192.168.59.103:3000/にアクセスするとfuelphpのWelcomeが表示できました。
WS0056

最後に

Macではdocker-composeでdocker buildからdb、webのコンテナ起動までの一連の操作を実行する事ができました。Windowsではdocker-composeこそ使えなかったものの、dockerコマンドを手動で実行する事でMacと同様の環境を用意する事こができました。

少し話は変わりますが、この記事を書いてる間にMicrosoftのイベントBuild 2015があり、Windows Serverで動作するDockerのデモや、Visual Studio 2015からDockerにPublishするデモがありました。Dockerと連携できれば操作もますます簡単になりそうです。他にもWindows10発表があったりと、Dockerに限らず今までにない大胆な方向へ進んでいるように感じます。今後もMicrosoftの動向から目が離せません。

次世代システム研究室では、グループ全体のインテグレーションを支援してくれるアーキテクトを募集しています。インフラ設計、構築経験者の方、次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ 募集職種一覧 からご応募をお願いします。

皆さんのご応募をお待ちしています。

  • Twitter
  • Facebook
  • はてなブックマークに追加

グループ研究開発本部の最新情報をTwitterで配信中です。ぜひフォローください。

 
  • AI研究開発室
  • 大阪研究開発グループ