Slide 1

Slide 1 text

Rails on Docker との戦い

Slide 2

Slide 2 text

自己紹介 植森 康友 株式会社Aiming 主な仕事 WebAPI 開発 devops Docker おじさん 普段のrailsdm では大阪側のスタッフをしてます

Slide 3

Slide 3 text

最初に LT に向けてスライドを調整していたら時間が全然なかったので 技術的な話をする時間はありません スライドの内容を削ってたらrails の話がなくなりました というわけでrails と全然関係ない話をします

Slide 4

Slide 4 text

Rails on Docker との戦い タイトルに偽りあり

Slide 5

Slide 5 text

Docker 化のモチベー ション

Slide 6

Slide 6 text

Docker 化のモチベー ション

Slide 7

Slide 7 text

Docker 化のモチベー ション 個人的に大きいのは「 アプリケー ション規格の統一化」 セットアップ方法 → d o c k e r b u i l d 必要なミドルウェア → docker のみ 起動方法 → d o c k e r r u n デプロイフロー → イメー ジのビルド、push、 起動 コンポー ネントの連携 → docker‑compose、kubernetes → その結果として環境の再構築や複数環境の立ち上げが楽に チームに複数のアプリケーションを開発している人がいると恩恵が大きい

Slide 8

Slide 8 text

とはいえ問題がなくなるわけではない docker ならではのトラブルや悩みが発生する 学習コスト、 チー ムの習熟度・ 理解度 開発環境 コンテナならではのトラブル

Slide 9

Slide 9 text

学習コスト、 チー ムの習熟度・ 理解度 easy 出典: ふつうのRails アプリケー ション開発

Slide 10

Slide 10 text

学習コスト、 チー ムの習熟度・ 理解度 docker の開発フロー に乗っかると d o c k e r - c o m p o s e b u i l d でビルドする d o c k e r - c o m p o s e u p で起動する d o c k e r - c o m p o s e r u n でコマンド実行する → easy

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

学習コスト、 チー ムの習熟度・ 理解度 慣れてない人はdocker 自体がそもそもeasy ではない 出典: ふつうのRails アプリケー ション開発

Slide 13

Slide 13 text

学習コスト、 チー ムの習熟度・ 理解度 例えば、 ラップして使いやすくする 今のプロジェクトは歴史的経緯で「easy = シェルスクリプト」 今までとあまり変わらないフローにすることで導入障壁が減った

Slide 14

Slide 14 text

開発でdocker を使うとき docker for mac volume めっちゃ遅い mac だと動くけどlinux では動かない linux だと発生するvolume のpermission denied network エディタとかとの親和性が微妙 gem へのタグジャンプとか gem のコー ドを見たい docker(for mac) と相性が悪いアプリケー ションもある 普段の開発では不便な点も多々 ある docker for macまじでつらい

Slide 15

Slide 15 text

開発でdocker を使うとき Q. 我々 はdocker 化することで何がしたかったか? A.

Slide 16

Slide 16 text

開発でdocker を使うとき Q. 我々 はdocker 化することで何がしたかったか? A.

Slide 17

Slide 17 text

開発でdocker を使うとき docker 化することでしんどくなったら本末転倒 docker であることにこだわらない チー ムにとって楽な方に倒す だいじなこと → 「 できる」 こと 本番とほぼおなじイメー ジを起動できる CI とほぼおなじテストを実行できる セットアップ、 再構築がかんたんにできる

Slide 18

Slide 18 text

その他、 いろんなトラブル 開発環境 docker のイメー ジビルド時間 環境変数(≒ グロー バル変数) の増殖 CI 環境(in jenkins slave) docker network 作成数が上限に達して死ぬ イメー ジやボリュー ムがディスク圧迫して死ぬ docker‑compose のコンテナ名が被って死ぬ デプロイ環境 private registry docker デー モンの意味不明なエラー ロギングどうする? 話し始めるとキリがない話題なので詳しくは懇親会で

Slide 19

Slide 19 text

docker での困り事:CI 環境

Slide 20

Slide 20 text

docker での困り事: デプロイ環境 dockerホストを自前で管理するのはつらい

Slide 21

Slide 21 text

docker 化で得たもの アプリケー ション規格の統一化 docker 化しておけばとりあえずなんとかなるし動かせる レビュー のしやすい環境 ロー カルでも複数の環境をさくっと立てれる git worktree → docker‑compose build & up ポー タビリティ デプロイ・CI でもできることがロー カルでもできる デプロイ・CI でも複数の環境をかんたんに立ち上げられる

Slide 22

Slide 22 text

まとめ: Docker との戦い docker ならではの苦労もあるが、docker 化のメリットは大きい だいじなこと チー ムに合った方法を選ぶ easy 本質(docker 化で解決したかったこと) を忘れない dockerでの導入でも、 「ふだんの開発で気をつけること」こそ重要でした

Slide 23

Slide 23 text

We are hiring! 株式会社Aiming ではエンジニアを募集しています! Rails に興味がある Devops に興味がある 懇親会でもお話しましょう