Плаваючий тег - тег, що з часом вказує на інші образи: php:8.5-fpm-alpine, node:22, postgres:18. Кожен новий патч PHP, оновлення Alpine чи системних бібліотек перевипускає образ під тим самим тегом.
Що відбувається на практиці:
Dockerfileне змінювався місяць;- CI збирає образ заново (новий коміт у застосунку чи очищений кеш);
FROM php:8.5-fpm-alpineтепер означає новий патч PHP і нові версії системних бібліотек (наприклад, ICU, OpenSSL);- застосунок, що працював, починає падати - сегментаційні помилки в розширенні, зміни поведінки форматування, несумісність бібліотеки.
Найгірше - збій не пов'язаний зі змінами в коді: «ми нічого не міняли, а продакшен упав після деплою». Відкат коду не допомагає, бо старий коміт збирається з тим самим новим базовим образом.
Рівні фіксації:
FROM php:8.5-fpm-alpine # плаваючий: будь-який 8.5.x і будь-який Alpine
FROM php:8.5.6-fpm-alpine3.22 # конкретний патч PHP і версія Alpine
FROM php:8.5.6-fpm-alpine3.22@sha256:... # точний вміст образу
- точна версія тегу - захищає від більшості несподіванок, але й цей тег інколи перевипускають (оновлення системних пакетів);
- дайджест - гарантія, що образ байт у байт той самий. Тег поруч лишається для читабельності.
Але фіксація без оновлень - теж ризик: базові образи отримують виправлення вразливостей. Зафіксований на рік образ накопичує відомі CVE. Тому фіксацію поєднують з керованими оновленнями:
- Renovate чи Dependabot створюють pull-request з новою версією чи дайджестом базового образу;
- CI збирає й тестує образ;
- оновлення потрапляє в продакшен як звичайна зміна - з можливістю відкату й зрозумілою історією.
Те саме для інших залежностей збирання: версії Composer і Node, завантажені бінарники (curl без перевірки версії й контрольної суми), пакети apt/apk без версій. Lock-файли застосунку (composer.lock, package-lock.json) - обов'язкові.
Правило: будь-яке оновлення, що може змінити поведінку продакшену, має бути видимим комітом, а не тихим наслідком повторного збирання.
Докладніше в документації: Найкращі практики: фіксація версій базових образів