Rails on Dockerとの戦い
自己紹介
植森 康友
株式会社Aiming
主な仕事
WebAPI開発
devops
Dockerおじさん
普段のrailsdmでは大阪側のスタッフをしてます
最初に
LTに向けてスライドを調整していたら時間が全然なかったので
技術的な話をする時間はありません
スライドの内容を削ってたらrailsの話がなくなりました
というわけでrailsと全然関係ない話をします
Rails on Dockerとの戦い
タイトルに偽りあり
Docker化のモチベーション
Docker化のモチベーション
Docker化のモチベーション
個人的に大きいのは「アプリケーション規格の統一化」
セットアップ方法 →  docker build 
必要なミドルウェア → dockerのみ
起動方法 →  docker run 
デプロイフロー → イメージのビルド、push、起動
コンポーネントの連携 → docker‑compose、kubernetes
→ その結果として環境の再構築や複数環境の立ち上げが楽に
チームに複数のアプリケーションを開発している人がいると恩恵が大きい
とはいえ問題がなくなるわけではない
dockerならではのトラブルや悩みが発生する
学習コスト、チームの習熟度・理解度
開発環境
コンテナならではのトラブル
学習コスト、チームの習熟度・理解度
easy
出典:ふつうのRailsアプリケーション開発
学習コスト、チームの習熟度・理解度
dockerの開発フローに乗っかると
 docker-compose build でビルドする
 docker-compose up で起動する
 docker-compose run でコマンド実行する
→ easy
学習コスト、チームの習熟度・理解度
慣れてない人はdocker自体がそもそもeasyではない
出典:ふつうのRailsアプリケーション開発
学習コスト、チームの習熟度・理解度
例えば、ラップして使いやすくする
今のプロジェクトは歴史的経緯で「easy = シェルスクリプト」
今までとあまり変わらないフローにすることで導入障壁が減った
開発でdockerを使うとき
docker for mac
volumeめっちゃ遅い
macだと動くけどlinuxでは動かない
linuxだと発生するvolumeのpermission denied
network
エディタとかとの親和性が微妙
gemへのタグジャンプとか
gemのコードを見たい
docker(for mac)と相性が悪いアプリケーションもある
普段の開発では不便な点も多々ある
docker for macまじでつらい
開発でdockerを使うとき
Q. 我々はdocker化することで何がしたかったか?
A.
開発でdockerを使うとき
Q. 我々はdocker化することで何がしたかったか?
A.
開発でdockerを使うとき
docker化することでしんどくなったら本末転倒
dockerであることにこだわらない
チームにとって楽な方に倒す
だいじなこと→ 「できる」こと
本番とほぼおなじイメージを起動できる
CIとほぼおなじテストを実行できる
セットアップ、再構築がかんたんにできる
その他、いろんなトラブル
開発環境
dockerのイメージビルド時間
環境変数(≒グローバル変数)の増殖
CI環境(in jenkins slave)
docker network作成数が上限に達して死ぬ
イメージやボリュームがディスク圧迫して死ぬ
docker‑composeのコンテナ名が被って死ぬ
デプロイ環境
private registry
dockerデーモンの意味不明なエラー
ロギングどうする?
話し始めるとキリがない話題なので詳しくは懇親会で
dockerでの困り事:CI環境
dockerでの困り事:デプロイ環境
dockerホストを自前で管理するのはつらい
docker化で得たもの
アプリケーション規格の統一化
docker化しておけばとりあえずなんとかなるし動かせる
レビューのしやすい環境
ローカルでも複数の環境をさくっと立てれる
git worktree → docker‑compose build & up
ポータビリティ
デプロイ・CIでもできることがローカルでもできる
デプロイ・CIでも複数の環境をかんたんに立ち上げられる
まとめ: Dockerとの戦い
dockerならではの苦労もあるが、docker化のメリットは大きい
だいじなこと
チームに合った方法を選ぶ
easy
本質(docker化で解決したかったこと)を忘れない
dockerでの導入でも、
「ふだんの開発で気をつけること」こそ重要でした
We are hiring!
株式会社Aimingではエンジニアを募集しています!
Railsに興味がある
Devopsに興味がある
懇親会でもお話しましょう

Rails on Dockerとの戦い