Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni
🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!09.11.2023
Docker - це не система збірки
…Взагалі, вчорашні відкриття наштовхнули мене на наступний хід міркувань.
Раніше я дивився на Docker як на верхній рівень скриптів збірки. Тобто, щоб ми запускали docker build
або docker compose
, а все інше витікало звідти. А якщо так не виходить, то це погано, та треба докладати зусиль, щоб затягти всі аспекти збірки всередину Dockerfile
. Наприклад, використовувати проміжні контейнери, монтування кешу, як я вчора писав, та інші засоби.
Але насправді, Dockerfile
та docker buld не є гарною реалізацією системи збірки, тобто аналогом make
, rake
, чи просто скриптів оболонки.
-
Збірка потребує інструментів, які не потрібні в остаточному образі, а також утворює зайві артефакти. Наприклад, файли журналів можна знайти в багатьох публічно доступних образах, що не тільки збільшує їх розмір, але й може вести до витоку інформації.
-
Кеш, доступний в Docker через
RUN --cache
, є обмеженим та потребує особливих дій. Наприклад, до нього немає доступу з хосту. -
Підготовка до збірки
Dockerfile
- той крок, що називаєтьсяtransferring context
- відбувається через копіювання файлів, що досить неефективно та може тривати десятки секунд. Можна замість того монтувати залежності черезRUN --mount
, але то, як і кеш, потребує особливого ставлення.
Одним словом, відтепер буду використовувати Dockerfile
тільки для створення образу з вже готових артефактів. Та нічого страшного, якщо docker build
буде лише частиною більшого скрипту збірки.