Laravel Duskの実行をコンテナ内のみで完結させたかったので試してみた。
dockerさえ動けばDuskの実行が可能になるので、環境構築が楽だしCIさせやすい。
サンプルコードは下記リポジトリを参照
https://github.com/hanhan1978/docker-laravel54-skelton
構成図

- NginxからPHP-FPMへリバースプロキシするシンプルな構成
 - PHP-FPMのコンテナからLaravel Duskを実行すると、Seleniumのコンテナへテストのリクエストを送信
 - Seleniumのサーバはテスト対象のWebアプリを参照するためにNginxのコンテナへリクエストを送信
 - 公式イメージの
standalone selenium webdriverを利用 - docker-composeの設定はv2以上
 
docker-compose.ymlの中身
1  | version: '2'  | 
DuskTesetCase.phpの変更点
- baseUrlをオーバーライドして変更。ここでは
Docker Networkのnginxを指定。 
1  | protected function baseUrl()  | 
- static::startChromeDriver() をコメントアウト。ローカルのchrome使わないので不要
 
1  | public static function prepare()  | 
- seleniumの参照先をhttp://selenium:4444/wd/hub に変更。コレ大事。
 
1  | protected function driver()  | 
テストの実行
コンテナ内で実行するのでexecを使う。docker-compose exec laravel php artisan dusk

まとめ
大変だったのは、selenium web driverのendpointが分かりづらかったくらい。docker-composeのlinkを使うと、循環参照エラーになってしまうのでv2以降の文法を使ってdocker networkから各コンテナを参照するのがポイント。