久しぶりにDockerを動かしてみた(Docker Toolbox)
前回から2年近くたってるのか。
coreos-vagrantでDockerしてみてわかったこととかハマったこととか - iakioの日記
ホストはWindows10。
インストール
boot2dockerというのを使うんだっけと思って見てみたらDeprecatedと言われたのでDocker Toolboxを使うことにした。
なんとなくKitematicはインストールしなかった。
デスクトップにできたDocker QuickStart Terminalのアイコンを起動してもエラーが出る。VirtualBoxのVMはできているがストレージがマウントされていない。どうやらこの辺のバグを踏んだ模様。VirtualBoxを5.0.4にアップデートして解決。
- Cannot create host-only adapter with VBox 5 on Windows 10 (using administrative shell) · Issue #1521 · docker/machine · GitHub
- #14040 (Windows host-only adapter creation fails due to slow background processing) – Oracle VM VirtualBox
Hello World
ドキュメントがいっぱいある。Hello Worldからみてみる。
$ docker run ubuntu:14.04 /bin/echo 'Hello world' Error response from daemon: Cannot start container cde072590d243c292d3aee79e0af405d3d7e2ace3be670ebbd6bec9023686b0c: [8] System error: exec: "C:/Program Files/Git/usr/bin/echo": stat C:/Program Files/Git/usr/bin/echo: no such file or directory
これはスラッシュを1つ増やせばいいとどこかで見た。
$ docker run ubuntu:14.04 //bin/echo 'Hello world' Hello world
しかしbashの方は動かなかった。
$ docker run -t -i ubuntu:14.04 //bin/bash cannot enable tty mode on non tty input
まあdocker-machine sshすればVirtualBoxの方にはsshできるので、そこから同じことはできる。
$ docker-machine.exe ssh default ... docker@default:~$ docker run -t -i ubuntu:14.04 /bin/bash root@83ecba104bec:/#
network
Working with containersをやってみる。
ドキュメントに、boot2dockerを使ってる場合はlocalhostじゃなくてvirtual hostのIP使ってね。 boot2dockerコマンドで調べられるよと書いてるみたいだけど、今回の場合はdocker-machineコマンド のことだと思う。
$ docker-machine.exe ip default 192.168.99.100
取りあえずこの辺まで。
と思ったけどもうちょっと続く。
volume
VirtualBox側には、C:\Users
がそのまま/c/Users
にマウントされている。名前が一緒なのはかなり便利だ。
例えば僕はWindows上のC\Users\ishida\src\github.com\iakio\phpunit-smartrunner
というディレクトリでPHPの何かしらを開発していて、これをテストしたい場合はこのディレクトリで
$ vendor/bin/phpunit tests
と実行している(だいたいGit-Bashを使っている)。これをDockerのコンテナ内で実行したい場合は、PHPがインストールされたコンテナを用意して(phpというそのままの名前のイメージがDocker Hubにある)、同じディレクトリで、
$ docker run -v /$(pwd):/work -w //work php vendor/bin/phpunit tests
としてやればよい。php:7.0などとしてやれば簡単に複数バージョンでのテストもできそうだ。