Lan*_*opp 5 ruby bundle ruby-on-rails bundler docker
我的团队使用 Dockerfile 托管我们的 Rails 应用程序。我们有一些缓慢的 gem,它们确实减慢了我们的构建速度。(我在看着你grpc。)
是否可以在将 Gemfile 复制到我们的 Dockerfile 之前安装一些 gem?这将允许 Docker 缓存这些构建步骤,因此我们不必在每次 Gemfile 更改时重新安装慢速 gem。
我试过了,但bundle install仍在安装grpc,sassc和nokogiri.
RUN gem install grpc --version 1.28.0
RUN gem install sassc --version 2.2.1
RUN gem install nokogiri --version 1.10.9
WORKDIR /app
ADD Gemfile Gemfile.lock .ruby-version /app/
RUN bundle install
Run Code Online (Sandbox Code Playgroud)
您可以考虑拆分您的 gemfile,考虑以下文件。
慢宝石
ruby File.read('.ruby-version').strip
gem 'rubocop'
Run Code Online (Sandbox Code Playgroud)
宝石文件
ruby File.read('.ruby-version').strip
# add the "slow" gems to the gem-bundle so we do not have to redefine them.
instance_eval File.read('slow-gems')
gem 'flay'
Run Code Online (Sandbox Code Playgroud)
docker文件
WORKDIR /app
ADD slow-gems slow-gems.lock .ruby-version /app/
RUN bundle install --gemfile=slow-gems
ADD Gemfile Gemfile.lock /app/
RUN bundle install
Run Code Online (Sandbox Code Playgroud)
这也可以防止您重新定义 docker 镜像和 gemfile 中的所有 gem。您可能遇到的唯一问题是两个锁定文件中的版本会分开。目前,我还没有解决方案,但在使用当前将它们添加到 dockerfile 的方法时也可能会发生这种情况。
第二个bundle install将重新使用slow-gems文件中已安装的 gem,这需要不到一秒钟的时间。
另外: 不要忘记使用docker的内置缓存,否则这不会更快并且对你没有帮助。
| 归档时间: |
|
| 查看次数: |
3280 次 |
| 最近记录: |