Using cache to build docker image if Gemfile is not changed

Database and Ruby, Python, History


如果Gemfile没有改动,我们可以使用warm cache,而不是每次都需要重新build。这里的一个trick就是需要先添加Gemfile,再bundle install, 而不是先ADD . $APP_HOME,再bundle install。因为通常代码会有改动,一旦有改动,docker就不会使用cache。这种方式在这篇文章里面有详细介绍。

FROM ruby:2.5.7

RUN apt-get update -qq
RUN apt-get install -y build-essential nodejs net-tools freetds-bin freetds-dev

ENV APP_HOME /zhongyifunds
RUN mkdir -p $APP_HOME
WORKDIR $APP_HOME

ADD Gemfile* $APP_HOME/
RUN bundle install

ADD . $APP_HOME

另外一种策略就是用bundle自身的cache策略。使用bundle install --local就可以使用vendor/cache目录下面的gem,而不再需要从远程获取。这里介绍了这种方法。