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

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

SECR 2019
November 14, 2019

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

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

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

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

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

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

SECR 2019

November 14, 2019
Tweet

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