2015.05.08
Docker Client for Windowsで拡がる夢
こんにちは、次世代システム研究室の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が無い場合はこちらにもチェックを入れます。
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 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
ブラウザでhttp://192.168.59.103:3000/にアクセスするとfuelphpのWelcomeが表示できました。
最後に
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で配信中です。ぜひフォローください。
Follow @GMO_RD