久しぶりにDockerを動かしてみた(Docker Toolbox)

前回から2年近くたってるのか。

coreos-vagrantでDockerしてみてわかったこととかハマったこととか - iakioの日記

ホストはWindows10。

インストール

boot2dockerというのを使うんだっけと思って見てみたらDeprecatedと言われたのでDocker Toolboxを使うことにした。

なんとなくKitematicはインストールしなかった。

デスクトップにできたDocker QuickStart Terminalのアイコンを起動してもエラーが出る。VirtualBoxVMはできているがストレージがマウントされていない。どうやらこの辺のバグを踏んだ模様。VirtualBoxを5.0.4にアップデートして解決。

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などとしてやれば簡単に複数バージョンでのテストもできそうだ。

f:id:iakio:20150923224741p:plain