Позволяет ли какая-либо служба CI создавать контейнеры Docker и использовать кеш сборки Docker?

У меня есть несколько контейнеров Docker, подключенных с помощью docker-compose (ранее рис.). Я обнаружил, что службы, которые рекламируют себя как службы Docker CI, обычно просто говорят об использовании Docker для запуска своих рабочих процессов сборки.

Мне нужна служба непрерывной интеграции, которая сохраняет кеш сборки Docker между запусками, вместо того, чтобы запускать совершенно новый рабочий / файловую систему / контекст сборки. В противном случае сборки будут длиться вечно. Идеально управляемый (в отличие от https://github.com/groupon/DotCi, который не поставляется с готовым к использованию CircleCI база данных для каждой сборки).

Единственное, что я нашел, это TeamCity (старый, вы не можете легко создавать задачи сборки версий в файле yaml, как вы можете с CircleCI, вам нужно поддерживать инфраструктуру и т. Д.). Quay.io не предоставляет базу данных, как это делают CircleCI и Travis, поэтому вам нужно разделить dev и prod и установить один внутри контейнера и запускать модульные тесты во время сборки контейнера (ew - вы не можете создать в незанятом контейнере, чтобы отлаживать вещи!).

Как запустить непрерывную интеграцию в кластере контейнеров Docker?


person user3906849    schedule 28.01.2015    source источник
comment
Обратите внимание, что теперь можно создавать образы докеров и на Travis, blog.travis-ci.com/2015-08-19-using-docker-on-travis-ci   -  person cboettig    schedule 19.07.2016


Ответы (5)


CircleCI 1.0

CircleCI позволяет создавать контейнеры Docker как часть вашей сборки: https://circleci.com/integrations/docker

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

Между тем, ряд клиентов кэшировали его, используя встроенное (не-Docker) кеширование CircleCI, используя _1 _ / _ 2_: https://circleci.com/docs/docker#caching-docker-Layers. Это не идеально, но это должно вас поддержать, пока мы не сможем поддерживать это намного лучше.

Обновлено для CircleCI 2.0

CircleCI 2.0 ориентирован на Docker. Вы можете создавать образы Docker, использовать кеширование слоев, использовать Docker Compose и даже использовать официальные и пользовательские образы Docker в качестве среды сборки.

person Paul Biggar    schedule 28.01.2015
comment
Я бы хотел, чтобы docker load сделал это, но это не сохраняет кеш сборки. docker load занимает примерно столько же времени, как получение полностью построенного образа из частного репозитория, поэтому это не помогает. - person user3906849; 29.01.2015
comment
Пол, не могли бы вы рассказать о планах решения этой проблемы в ближайшее время? Это было бы интересно. - person user2707671; 18.02.2016
comment
Основываясь на моем тестировании, я понял, что даже связанная стратегия docker save/load не работает (команды сборки докеров полностью выполняются при каждой сборке), согласно этому комментарию здесь: обсудить.circleci.com/t/docker-1-10-0-is-available-beta / 2100/15 @ paul-biggar, или кто-нибудь - есть рабочий пример? - person thisjustin; 19.08.2016

В настоящее время я использую CircleCI, см. http://tschottdorf.github.io/cockroach-docker-circleci-continuous-integration, чтобы получить хорошее руководство по использованию кеша докеров.

shippable также стоит проверить, поскольку вся их инфраструктура основана на докере и оркестровке нескольких контейнеров докеров с помощью готовых формирований.

person d3ming    schedule 21.08.2015
comment
просто быстрое исправление, похоже, URL-адрес сообщения в блоге работает только без косой черты, так как он вернет 404: tschottdorf.github.io/ - person fagiani; 27.10.2016

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

https://codeship.com/documentation/docker/caching/

person Aidan Feldman    schedule 26.11.2015

Возникает связанный с этим вопрос «Как я могу позволить gitlab-ci-runner кэшировать промежуточные изображения изображений DinD?».

Даже если наше решение требует минимального обслуживания инфраструктуры (нам нужно запустить собственный бегун), я думаю, что это того стоит взгляд.

В основном мы не запускаем Docker в Docker, но мы создаем отдельную виртуальную машину только для бегунов. Это имеет некоторые последствия для задач безопасности и очистки, см. Также README нашего бегуна .

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

person schmunk    schedule 12.12.2016

Вы видели wercker? Он поддерживает «принесите свой собственный контейнер», будет кэшировать ваши изображения (я думаю, для каждого рабочего, но после нескольких сборок обычно запуск сокращается до нескольких секунд с настраиваемым изображением), а afaik также позволяет создавать образы Docker.

Оборотная сторона: требуется слишком много разрешений GitHub.

person krlmlr    schedule 05.02.2016
comment
Он даже не позволяет вам использовать свой собственный Dockerfile, так что это не лучшее решение. - person Steffen Brem; 05.03.2016
comment
@SteffenBrem: вы можете создавать свои образы из файлов Docker в Docker Hub и использовать их в wercker. Работает на меня. - person krlmlr; 05.03.2016