Docker で bundle install を爆速にする

  • 24
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Docker、残念なのはbundle installがクソ遅いですね。
ADDでディレクトリを突っ込んでからbundle installされている方が多いと思います。
そうすると、何かしら更新するだけで、Gemfileを変更しているかどうかに関わらず毎回bundle installが走ってしまいます。

もちろんgemフルインストールになるので、1-2分は余裕でかかってしまいますね。
Chef並みに遅くなり、悲しくなるので、対策を書きます。

Dockerfile
##Cache bundle install#################
WORKDIR /tmp
ADD ./Gemfile Gemfile
ADD ./Gemfile.lock Gemfile.lock
RUN bundle install
#######################################

をアプリのADDよりも上の方に入れると結果をキャッシュすることが出来ます。

これでGemfile入りでも4秒くらいでビルドできるようになります。

ところでDockerfileをどこで管理しようか迷っている方がいるかと思いますが、アプリのRootがデフォです。つまりアプリのソースと一緒に管理します。
レジストリを分けて管理するのはDocker wayではありません。