如果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,而不再需要从远程获取。这里介绍了这种方法。