Я трохи заплутаний у цих двох варіантах. Здається, вони пов’язані між собою. Однак вони насправді не сумісні.
Наприклад, здається, що використання файлів Dockerfiles означає, що ви не повинні насправді робити коміти для зображень, тому що ви насправді повинні просто відстежувати файл Docker у git і вносити в нього зміни. Тоді не виникає двозначності щодо того, що є авторитетним.
Однак, коміти з зображеннями здаються справді приємними. Це настільки чудово, що ви можете просто змінити контейнер безпосередньо і позначити зміни, щоб створити інше зображення. Я розумію, що ви навіть можете отримати щось на зразок файлової системи, що відрізняється від історії фіксації зображень. Приголомшливо Але тоді ви не повинні використовувати Dockerfiles. В іншому випадку, якщо ви зробили коміт зображення, вам доведеться повернутися до вашого файлу Docker і внести деякі зміни, які відображають те, що ви зробили.
Тож я розірвана. Мені подобається ідея комітів зображення: що вам не потрібно представляти стан свого зображення у Dockerfile - ви можете просто відстежувати його безпосередньо. Але мені неприємно відмовлятися від ідеї якогось файлу маніфесту, який дає вам швидкий огляд того, що є на зображенні. Неприємно також бачити дві функції в одному програмному пакеті, які здаються несумісними.
Хтось має якісь думки з цього приводу? Чи вважається поганою практикою використання комітів зображення? Або я повинен просто відмовитись від вкладення, щоб маніфестувати файли з моїх лялькових днів? Що я повинен зробити?
Оновлення :
Я не настільки впевнений у всіх, хто вважає, що це питання, засноване на думках. У цьому є деякі суб’єктивні якості, але я думаю, що це здебільшого об’єктивне питання. Крім того, я вважаю, що хороша дискусія на цю тему буде інформативною.
Врешті-решт, я сподіваюся, що хтось, хто читає цю публікацію, краще зрозуміє, як Dockerfiles та коміти для зображень співвідносяться між собою.
Оновлення - 2017/7/18 :
Нещодавно я виявив правомірне використання комітів зображень. Ми щойно створили конвеєр CI у нашій компанії, і на одному етапі конвеєра наші тести програм запускаються всередині контейнера. Нам потрібно отримати результати покриття з контейнера, що вийшов, після того, як процес тестового запуску їх створив (у файловій системі контейнера) і контейнер перестав працювати. Для цього ми використовуємо коміти image, фіксуючи зупинений контейнер для створення нового зображення, а потім виконуючи команди, які відображають і скидають файл покриття в stdout. Тож зручно це мати. Окрім цього цілком конкретного випадку, ми використовуємо Dockerfiles для визначення нашого середовища.