ホスティング事業部内のホスtechMTG#3にてDockerについてLTしました
資料に入り切らなかった小ネタなどをここでは紹介。
LT資料の言い回しついての補足
specコンテナ:
コンテナ内でRSpecを実行してコードをテストするためのコンテナ
dbコンテナ:
RSpec実行コンテナと接続しているMySQLが起動されたコンテナ
参考資料
最近だとこの辺がDockerについて特集記事がありました
Software Design 2017年2月号
WEB+DB PRESS Vol.98
実際に使ったコマンド
資料では若干オプションなど省いてたので完全版
- specコンテナ側の起動時
$ docker run -dit -v $(pwd)/spec/features:/tmp/muu/spec/features --link db spec bash
- E2Eテストだけ外から変えられるように
-v
でホストPC側の一部をマウント
- exit後にもっかい入る時
$docker run -it spec bash
-d
でコンテナを起動している- exitした後、再度コンテナに入りたい時に
.dockerignore
- ADDやCOPYでコンテナ側へのコピー対象から除外したいものを記載しておく
- git管理下のレポジトリなら基本的に
$cp .gitignore .dockerignore
で良さそう
コンテナ間通信についての資料とかは探せばたくさんあるけれども
最終的にはやっぱり公式っしょ
- Docker Engine ユーザガイド - コンテナ通信の理解
spec->dbコンテナのDB接続のため
Railsのconfig/database.ymlでは環境変数で与えられたhost名を使って接続するようにしているので、
specコンテナのDockerfile内でdbコンテナのipを環境変数(TEST_MYSQL_HOST)として与えておくことでちょっと楽した気分を味わいました。
docker-composeを使えばそういうことせずにspecコンテナ側のlocalhost:3306をdbコンテナ側の3306としてPort Forwardingの設定ができそうな気はしました。
あと、drone.ioの.drone.ymlはdocker-composeのsupersetのようなのでdocker-compose.ymlには使いまわせるのかな?というところまでで。
drone.io - Getting Startd
# Dockerfile ... ENV TEST_MYSQL_HOST 172.17.0.2
# config/database.yml common: &common adapter: mysql2 reconnect: false pool: 5 strict: false database: dbdbdb ... test: <<: *common host: <%= ENV['TEST_MYSQL_HOST'] %> username: <%= ENV['TEST_MYSQL_USER'] %> password: <%= ENV['TEST_MYSQL_PASSWORD'] %>