Я немного запутался в этих двух вариантах. Похоже, они связаны. Однако они не совсем совместимы.
Например, кажется, что использование Dockerfiles означает, что вам не следует делать фиксацию на изображениях, потому что вам действительно нужно просто отслеживать Dockerfile в git и вносить в него изменения. Тогда нет никакой двусмысленности в том, что является авторитетным.
Однако фиксации изображений кажутся действительно хорошими. Это так здорово, что вы можете просто изменить контейнер напрямую и пометить изменения, чтобы создать другое изображение. Я понимаю, что вы даже можете получить что-то вроде различия файловой системы из истории фиксации изображения. Потрясающе. Но тогда вам не следует использовать Dockerfiles. В противном случае, если вы сделали фиксацию образа, вам придется вернуться в свой Dockerfile и внести некоторые изменения, отражающие то, что вы сделали.
Так что я разорван. Мне нравится идея коммитов изображений: вам не нужно представлять состояние вашего изображения в Dockerfile - вы можете просто отслеживать его напрямую. Но мне не нравится отказываться от идеи какого-то файла манифеста, который дает вам быстрый обзор того, что находится на изображении. Также неприятно видеть в одном программном пакете две функции, которые кажутся несовместимыми.
Есть ли у кого-нибудь мысли по этому поводу? Считается ли плохой практикой использование коммитов изображений? Или я должен просто отпустить мою привязанность к файлам манифеста со времен Puppet? Что я должен делать?
Обновление :
Для всех тех, кто думает, что это вопрос, основанный на мнении, я не уверен. В этом есть некоторые субъективные качества, но я думаю, что это в основном объективный вопрос. Кроме того, я считаю, что хорошее обсуждение этой темы будет информативным.
В конце концов, я надеюсь, что любой, кто прочитает этот пост, сможет лучше понять, как файлы Dockerfiles и коммиты изображений связаны друг с другом.
Обновление - 2017/7/18 :
Я только недавно обнаружил законное использование коммитов изображений. Мы только что настроили конвейер CI в нашей компании, и на одном из этапов конвейера наши тесты приложения запускаются внутри контейнера. Нам нужно получить результаты покрытия из завершенного контейнера после того, как процесс запуска тестов сгенерировал их (в файловой системе контейнера) и контейнер прекратил работу. Для этого мы используем фиксацию изображений, фиксируя остановленный контейнер для создания нового изображения, а затем выполняя команды, которые отображают и выгружают файл покрытия в стандартный вывод. Так что это удобно. Помимо этого очень конкретного случая, мы используем файлы Docker для определения наших сред.