DockerについてLTした内容と細かい話

speakerdeck.com

ホスティング事業部内のホス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

コンテナ間通信についての資料とかは探せばたくさんあるけれども

最終的にはやっぱり公式っしょ
- 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'] %>