Skip to content
Dmitry Ponyatov edited this page Aug 21, 2019 · 24 revisions

Использование docker для воспроизводимой компиляции

Dockerпрограмма, позволяющая операционной системе запускать процессы в изолированном окружении на базе специально созданных образов. Несмотря на то, что технологии, лежащие в основа Докера появились до него, именно Докер произвел революцию в том, как сегодня создается инфраструктура проектов, собираются и запускаются сервисы.

У каждого разработчика в команде на рабочей станции свое собственное рабочее окружение, установленный набор ПО, разные версии компиляторов и библиотек. При групповой работе вполне вероятна ситуация, когда сборка пакета ПО успешно отрабатывает не у всех членов группы разработчиков. Другая ситуация -- для некоторых проектов необходимо обеспечить повторяемость компиляции с точностью до версий всех инструментов и библиотек. Это может потребоваться для банковской сферы, систем безопасности, и т.п. для проведения аттестации одной конкретной сборки, и ее фиксации.

С течением времени рабочие системы обновляются, добавляются новые разработчики со свежими дистрибутивами, с новыми версиями компиляторов. В какой-то момент требуется пересобрать прошивку, добавить одну-две новые фичи, или обновить ПО для закрытия дыр в безопасности. На задачу отводится всего пару часов, но внезапно сборка начинает падать в ошибки, перестают компилироваться какие-то программы, скомпилированное ядро Linux перестает находить устройства, или возникают непонятные глюки, при том что раньше все работало идеально, и вы не поменяли ни одного файла.

Хорошим решением будет изолировать нашу среду для сборки внутри docker-контейнера. Сам docker-файл будет содержать самодостаточный набор инструкций по развертыванию среды на рабочей станции любого разработчика, а наличие контейнера позволит избежать захламления домашней системы лишними библиотеками и неявными зависимостями.

Clone this wiki locally