Улучшение времени сборки Dockerfile с использованием нескольких операторов FROM - PullRequest
0 голосов
/ 30 марта 2019

Можно ли сделать так, чтобы мой докер собирался быстрее.

Я видел в Dockerfile несколько операторов FROM, имеет ли это смысл делать с моим Dockerfile?

FROM ruby:2.5-alpine

RUN apk update && apk --update add \
 build-base \
 nodejs \
 postgresql-dev \
 tzdata \
 imagemagick \
 ruby-dev \
 libxml2-dev \
 libxslt-dev \
 pcre-dev \
 libffi-dev  

# yarn
ENV PATH=/root/.yarn/bin:$PATH
RUN apk add --virtual build-yarn curl && \
    touch ~/.bashrc && \
    curl -o- -L https://yarnpkg.com/install.sh | sh && \
    apk del build-yarn

# app
RUN mkdir /app
WORKDIR /app

COPY Gemfile ./
RUN gem install bundler -v 2.0.1
RUN gem uninstall bundler --version '<2.0.0'
RUN gem install nokogiri -v '1.10.1' --source 'https://rubygems.org/'
RUN bundle install --binstubs

Я использую Google Cloud build и реестр, поэтому я могу хранитьпромежуточный образ докера и сохраните его вместе с реестром.

1 Ответ

1 голос
/ 30 марта 2019

Docker многоэтапные сборки могут помочь уменьшить размер конечного изображения, но не уменьшат время вашей сборки.


Что сокращает время созданияСборка заключается в том, чтобы понять, как работает кэш сборки Docker.Прочитайте Использование кэша сборки из Docker Рекомендации по написанию документации Dockerfiles .

Я не знаком с Ruby, но мне кажется, что Gemfileполезно только для команды bundle install и игнорируется для команд gem install.Если это так, вам лучше переместить линию COPY Gemfile ./, чтобы она отображалась прямо перед RUN bundle install --binstubs.Причина в том, что каждый раз, когда изменяется ваш Gemfile, сборка докера распознает ситуацию и делает недействительным любой слой, следуя этой инструкции из кэша сборки.


Теперь все, что я говорил ранее, действительнодо тех пор, пока вы запускаете последовательные сборки на одной и той же машине.

Поскольку вы используете Google Cloud Build, вы будете запускать каждую сборку каждый раз в новой чистой среде и, следовательно, не будете иметь промежуточные слои докера в кэше ... если вы не сконфигурируете Google Cloud Build для сохраненияи восстановите ваш кеш.

Из Google Cloud Build Лучшие практики для ускорения сборки документации вы найдете инструкции о том, как включить кэш Kaniko , который позаботитсясохранить эти докеры построить промежуточные слои.

...