Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Cлои Docker для ускорения сборки проекта

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for SECR 2019 SECR 2019
November 14, 2019

Cлои Docker для ускорения сборки проекта

Николай Пасынков
Frontend Teamlead, Usetech
SECR 2019

Технически-сложные проекты рано или поздно сталкиваются со скоростью сборки. Над нашим проектом в пике работало больше 10 разработчиков, а проект собирался около 25 минут.

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

В докладе я расскажу о том, как мы пришли к этому решению, и в качестве бонуса покажу, как у мы научились изящно возвращать предыдущую версию проекта после релиза.

Доклад будет полезен техническим лидам и DevOps-инженерам больших проектов, а также разработчикам, желающим оптимизировать время сборки и деплой.

Avatar for SECR 2019

SECR 2019

November 14, 2019

More Decks by SECR 2019

Other Decks in Programming

Transcript

  1. 10 коммитов в день 13 22 34 52 80 123

    179 0 45 90 135 180 225 10 15 20 25 30 35 40
  2. 20 коммитов в день 17 40 114 285 400 516

    761 0 200 400 600 800 10 15 20 25 30 35 40
  3. 10 коммитов в день 13 22 34 52 80 123

    179 0 45 90 135 180 225 10 15 20 25 30 35 40
  4. 10 коммитов, 35 минут сборки, 2 часа ожидания 13 22

    34 52 80 123 179 0 45 90 135 180 225 10 15 20 25 30 35 40
  5. dependencies.Dockerfile FROM node:stable WORKDIR application COPY package.json package-lock.json ./ RUN

    npm install docker build -f dependecies.Dockerfile -t dependencies:${env} . docker push dependencies:${env}
  6. sources.Dockerfile ARG dependencies_image FROM $dependencies_image WORKDIR application COPY src ./

    RUN npm run tests docker build -f sources.Dockerfile -t sources:${env} . —build-arg dependencies_image=dependencies:${env} docker push sources:${env}
  7. application.Dockerfile ARG sources_image ARG app ARG env FROM $sources_image as

    sources WORKDIR application RUN npm run build:$app:$env FROM nginx:stable COPY —from=sources dist/$app /artifacts
  8. application.Dockerfile docker build -f application.Dockerfile -t app1:${env} . —build-arg app=app1

    —build-arg env=prod —build-arg sources- image=sources:prod docker push app1:prod
  9. 10 коммитов, 35 минут сборки, 2 часа ожидания 13 22

    34 52 80 123 179 0 45 90 135 180 225 10 15 20 25 30 35 40
  10. 10 коммитов, 15 минут сборки, 22 минуты ожидания 13 22

    34 52 80 123 179 0 45 90 135 180 225 10 15 20 25 30 35 40