在Docker上进行ruby捆绑优化
我是新来的docker工人,想知道如何重新build立docker图像ruby捆绑机的行为? 我第一次构build映像时,需要永久bundle install
。 当我在Gemfile中添加另一个gem时会发生什么? 有没有办法确保以前的gem在图像中以某种方式被caching,并用于这个新的捆绑?
Dockerfile:
FROM rails:onbuild RUN apt-get install -y imagemagick
这取决于你如何ADD
你的Gemfile。
ADD Gemfile /var/www/yourapp/ ADD Gemfile.lock /var/www/yourapp/ RUN bundle install
在这种情况下,只有在Gemfile
或Gemfile.lock
更改的情况下, bundle install
才会运行。 请注意,将此指令放置在Dockerfile中很重要。 只要先前的构build步骤caching失效,所有后续的指令都不再被caching。 (比如你在Gemfile
之前ADD
一个configuration文件,并且更改 – > bundle安装将会运行)。
当我在Gemfile中添加另一个gem时会发生什么?
如果你只是想添加一些gem,而不捆绑一切,你也可以做一些事情:
ADD Gemfile /var/www/yourapp/ ADD Gemfile.lock /var/www/yourapp/ RUN bundle install ... ADD Gemfile.tip /var/www/yourapp/ RUN bundle install
这里是一个可以检出的rails示例项目(有详细logging)。