Несколько вещей чувствуют себя непродуктивными, как ожидание сборки. Если Docker является частью вашего рабочего процесса развития, вы знаете, как долго Docker Build
может принять, чтобы создать изображение. Можем ли мы ускорить это? Чтобы найти ответ, я оценил его в семафор и Docker Hub с реальным сценарием корпуса.
Я обнаружил, что могу построить свой образ не менее чем в 7 раз быстрее на семафор. Читайте дальше, чтобы узнать, как я это сделал.
10 минут или бюст
Если ваш Непрерывная интеграция Процесс занимает более 10 минут, вы не наслаждаетесь полными преимуществами CI/CD. Около 10 минут барьерной цикл обратной связи, которая разрушается, команды объединяются меньше раз в день, увеличивая риск конфликтов слияния.
Что такое правильная постоянная интеграция?
Марко Анастасов · 4 октября 1918 · 3 мин читать
Docker Hub Включает удобную функцию AUTOBUILD, которая принимает DockerFile из вашего Git Reppo и строит изображение прямо в реестр. Удобство приятно, но мы также должны учитывать, сколько из 10 минут бюджета он ест.
Настройка теста
Вопрос, который я хочу ответить, просто: сколько времени это займет с момента, когда я делаю Git Push до того момента, когда изображение готов к использованию?
Вот мой тарифный план:
- Я настроил репозиторий GitHub с DockerFile. Это источник как для путей сборки.
- Я создал два репозитория на Docker Hub:
- Docker-Build : Я подключил его с Github и включил автобол.
- Семафор — сборка : Я держал AutoBuild отключен в этом и использовал Семафор CI/CD строить и подтолкнуть к нему вместо этого.
- Каждый толкает триггеры оба строятся одновременно.
Я решил построить официальный Couchbase DockerFile. Полученное изображение составляет около 500 МБ. Dockerfile довольно стандартный стандарт, поэтому тест, вероятно, будет представлен многих рабочих нагрузок.
Только репозиторий источника должен иметь только DockerFile и связанные с этим скрипты. Вот как я его настроил:
$ wget https://raw.githubusercontent.com/couchbase/docker/201af2d1fd4988d23d980cef5b91763ee5fdc9b7/enterprise/couchbase-server/6.0.3/Dockerfile $ mkdir scripts $ cd scripts $ wget https://raw.githubusercontent.com/couchbase/docker/201af2d1fd4988d23d980cef5b91763ee5fdc9b7/enterprise/couchbase-server/6.0.3/scripts/run $ wget https://raw.githubusercontent.com/couchbase/docker/201af2d1fd4988d23d980cef5b91763ee5fdc9b7/enterprise/couchbase-server/6.0.3/scripts/entrypoint.sh $ wget https://raw.githubusercontent.com/couchbase/docker/201af2d1fd4988d23d980cef5b91763ee5fdc9b7/enterprise/couchbase-server/6.0.3/scripts/dummy.sh
На курс этого поста я позвоню Построить время в общее время от git push к изображению готов; Это включает в себя Thusp/Tulk Times, время очереди и раздел Docker Stroce.
Я прибегал к Git Refrold измерить точку зрения:
$ git reflog --date=local master
Чтобы измерить время последнего изменения последнего изменения, я запросил API Docker Hub с:
$ curl https://hub.docker.com/v2/repositories/$DOCKER_NAME/$REPO_NAME/ | jq .last_updated
Здание с кэшем
Docker Build может повторно использовать слои из предыдущих изображений, чтобы ускорить время сборки.
В Docker Hub кэш включен по умолчанию. В семафор мы должны использовать Докер тянуть
и кэш-от
опции.
Я использовал это трубопровод построить с кэш:
version: v1.0 name: Docker benchmark agent: machine: type: e1-standard-2 os_image: ubuntu1804 blocks: - name: "Docker build" task: secrets: - name: dockerhub jobs: - name: Pull, Build & Push commands: - echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin - checkout - docker pull "$DOCKER_USERNAME"/semaphore-docker-benchmark-semaphore:latest || true - docker build --cache-from "$DOCKER_USERNAME"/semaphore-docker-benchmark-semaphore:latest -t "$DOCKER_USERNAME"/semaphore-docker-benchmark-semaphore:latest . - docker push "$DOCKER_USERNAME"/semaphore-docker-benchmark-semaphore:latest
Я бегал оба строит одновременно 11 раз. Я отбросил первый пробег. Все тесты были сделаны во время рабочих часов США.
Вот результаты:
Docker Hub потребляет Почти наполовину 10 минут бюджета. В среднем, Docker Hub Windows потратила один или два минуты в очереди перед началом.
Среднее время сборки:
- Docker Hub : 265s.
- Семафор : 35s (x7,5 быстрее)
В среднем 1300 ежемесячных минут включали бесплатный план, чтобы построить 1 900 изображений CouchBase в семафоре. Для плана PRO 100 сборки должны стоить менее 50 центов и занять около часа от вашего дня.
Для сравнения, 100 сборки займется 7:30 часов в Docker Hub — мы можем вернуть целый рабочий день по цене лимонада.
Без кеша
Иногда докер кеш может быть слишком агрессивным. Docker будет повторно использовать кэшированные слои, если только DockerFile изменился, что не всегда то, что мы хотим, чтобы это сделать.
Я отключил кеш на Docker Hub. Я также изменил семафорной трубопровод, чтобы заставить полную сборку.
version: v1.0 name: Docker benchmark agent: machine: type: e1-standard-2 os_image: ubuntu1804 blocks: - name: "Docker build" task: secrets: - name: dockerhub jobs: - name: Pull, Build & Push commands: - echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin - checkout - docker build -t "$DOCKER_USERNAME"/semaphore-docker-benchmark-semaphore:latest . - docker push "$DOCKER_USERNAME"/semaphore-docker-benchmark-semaphore:latest
Это полное время сборки:
- Docker Hub : 665S на изображение — 100 сборки занимают 21 час.
- Семафор : 194-е годы на изображение — 100 сборки забирают 5:30 часов.
Докер Хаб хорошо взял нас за 10-минутный предел. Семафор держится сверху и в 3,4 раза быстрее.
Свободный план позволяет нам построить не менее 380 из этих изображений в месяц. Для тех, кто на Pro Plan 100 Builds устроит вас на 2,50 доллара. Переключаясь с Docker Hub в семафор, мы возвращаем 15 часов по цене чашки кофе.
Здание быстрее с семафором
На семафоре наш девиз «строить отличные продукты при высокой скорости. » Каждая секунда вы получаете обратно, оптимизируя CI/CD, умножены сотен или тысячи раз по жизненному цикле проекта.
Работа с докером много? Не пропустите Docker CI/CD Учебники Отказ
Вы нашли этот пост полезным? Ударил тех ❤️ и 🦄.whotions? Оставьте комментарий ниже.
Спасибо за чтение!
Оригинал: «https://dev.to/semaphore/speeding-up-docker-builds-x7-benchmark-1en4»