LoginSignup
15
15

More than 5 years have passed since last update.

ホストを汚したくないので開発環境としてDocker使ってるけど何とかテストしたい話

Posted at

ホストを汚したくないので、どの言語で開発するにしても、最近はDockerとかVirtualBoxとか、まあ仮想マシンの上でやってます。
今はPHP with Laravel on Dockerでやってます。もちろんホストにはnginxはおろかPHPさえ入ってません。

本題

の前の、ちょっとした背景

プロジェクト構成はだいたいこんな感じ。

Application
+base
|+Dockerfile
+dev
|+Dockerfile
+src
 +ソースとか

baseコンテナになんやらかんやら、アプリケーションが動作するために必要なものを全て突っ込んで、それを元にdevコンテナを作るイメージ。
基本的にコンテナの中には入らず、ソースはDockerに共有張って、ローカルで修正してる感じ。
理由は、ぶっちゃけ開発用コンテナの中にdotfilesを入れたくなかったから。
開発用と言いつつ、実際はPHPnginxを動かすためだけの実行環境コンテナですね。

テストしたい

ホストにPHPがないのでComposerは動作しない。もちろんPHPUnitも動かない。でもテストはしたい。
Jenkinsさんにご登場いただくとしても、やっぱりpushする前にテストぐらいはしたいですよね。

なので考えました。そうだ、リモートで実行すればいいんだ!

開発用コンテナにSSH突っ込んで、ローカルからコンテナに向けてリモートでPHPUnitを実行すれば、SSHクライアントさえあればホストに依存せずテストできる!

なので

こんな感じのshell用意しました。

command.sh
#!/bin/bash

CONTAINER_NAME=webapp-dev

ip_address=$(docker inspect -f='{{ (index (index .NetworkSettings.Ports "22/tcp") 0).HostIp }}' ${CONTAINER_NAME})
port=$(docker inspect -f='{{ (index (index .NetworkSettings.Ports "22/tcp") 0).HostPort }}' ${CONTAINER_NAME})
user=webapp

ssh ${user}@${ip_address} -p ${port} "cd /app_root; $@"

やってることは単純で、アプリケーションルートに移動してコマンドを実行するだけ。
./command.sh composer updateとか、そんな感じで使います。PHPに限らずなんでもできます。

さいごに

とりあえずこれで解決はできて、まあ何とかやってるわけですけど、なんかほかにいい案ないですか?(他力本願(誤用

15
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
15