LoginSignup
65
50

More than 5 years have passed since last update.

なぜGemfileを更新した際にdocker-compose buildし直さなければならないのか

Last updated at Posted at 2017-11-14

こちらの記事で 「docker-composeを使ったRailsアプリ開発では、Gemfileを更新したときbuildしなおす必要がある」 ということがわかったのですが、理由が腑に落ちなかったので調べました。

buildとupの違い

up

$ docker-compose up
コンテナを作成して起動するコマンドです。
既にコンテナが起動中の場合、コンテナを再起動します。

このコマンドは、docker-compose.ymlを更新した場合は差分をキャッチして設定や利用するイメージを変更してくれます。

build

$ docker-compose build

「web」や「db」など、docker-compose.ymlに記述されている サービスのbuildを実行します。
 ymlにimage:が書かれている場合はそのイメージをリモートからpullします。既にリモートにイメージがpullされている場合はそちらを利用します。
 imageが書かれていない場合は、buildに書かれているパスのDockerfileを参考にしてイメージをbuildします。

Gemfileを更新したするときにbuildし直す理由

 Gemfileを変更したときはイメージをbuildし直す必要があるようです。
 この理由は、Dockerfileを読んだらわかりました。

Dockerfile
1 FROM ruby:2.4.2
2 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
3 RUN mkdir /myapp
4 WORKDIR /myapp
5 ADD Gemfile /myapp/Gemfile
6 ADD Gemfile.lock /myapp/Gemfile.lock
7 RUN bundle install
8 ADD . /myapp

 5行目でGemfileをADDしています。
 Gemfileを更新したときは、この部分をやり直す必要があったんですね...

参考

buildし直すのが面倒な場合、docker-compose.ymlに設定を記述して回避することもできるそうです。

65
50
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
65
50