Я немного запутался в этих двух вариантах. Они, похоже, связаны между собой. Однако они не совсем совместимы.Должен ли я использовать файлы Dockerfiles или изображения?
Например, кажется, что использование Dockerfiles означает, что вы действительно не должны делать снимки, потому что вам действительно нужно просто отслеживать Dockerfile в git и вносить изменения в это. Тогда нет никакой двусмысленности в отношении того, что является авторитетным.
Однако изображения совершают впечатление действительно приятного. Это так здорово, что вы можете просто изменить контейнер непосредственно и пометить изменения, чтобы создать другое изображение. Я понимаю, что вы даже можете получить что-то вроде файловой системы diff от истории фиксации изображения. Потрясающие. Но тогда вы не должны использовать Dockerfiles. В противном случае, если вы сделали фиксацию изображения, вам придется вернуться к файлу Docker и внести некоторые изменения, которые представляют собой то, что вы сделали.
Так что я разорван. Мне нравится идея фиксации изображения: вам не нужно представлять ваше состояние изображения в файле Docker - вы можете просто отслеживать его напрямую. Но мне нелегко отказаться от идеи какого-либо файла манифеста, который дает вам краткий обзор того, что находится в изображении. Это также смущает видеть две функции в одном программном пакете, которые кажутся несовместимыми.
У кого-нибудь есть мысли по этому поводу? Является ли плохая практика использовать коммиты изображения? Или я должен просто отпустить мою привязанность к файлам манифеста из моих кукольных дней? Что мне делать?
Update:
Всем тем, кто думает, что это вопрос на основе мнений, я не так уверен. Есть некоторые субъективные качества, но я думаю, что это в основном объективный вопрос. Кроме того, я считаю, что хорошее обсуждение этой темы будет информативным.
В конце концов, я надеюсь, что кто-нибудь, кто прочитает это сообщение, уйдет с лучшим пониманием того, как Dockerfiles и изображение совершают связь друг с другом.
Update - 2017/7/18:
Я только недавно обнаружил законное использование для изображения совершает. Мы только создали трубопровод CI в нашей компании, и на одном этапе трубопровода наши тесты приложений запускаются внутри контейнера. Нам нужно получить результаты покрытия из выходящего контейнера после того, как процесс тестового запуска выполнил их (в файловой системе контейнера), и контейнер перестает работать. Мы используем фиксацию изображения, чтобы сделать это, совершив остановленный контейнер для создания нового изображения, а затем запустив команды, которые отображают и выгружают файл покрытия в stdout. Так что это удобно для этого. Помимо этого особого случая, мы используем Dockerfiles для определения нашей среды.
Здесь есть много философии, и философия народов отличается, что делает этот, возможно, плохим вопросом для SO. Однако моя собственная философия - вы всегда хотите точно знать, как воспроизвести данный образ, и быть уверенным, что вы это сделаете. Используя золотые изображения, очень легко не знать, как кто-то получил от состояния А до состояния В, тогда как с автоматизацией, которая управляет процессом сборки, не существует способа забыть. Итак, лично, да, я называю Dockerfiles the Right Thing, и изображение совершает (как * любой * вид золотого образа, который полагается на ручное вмешательство, чтобы строить) зло. Но это я, и YMMV. –
@CharlesDuffy Где этот вопрос идти, если он не принадлежит на SO? –
@CharlesDuffy Кстати, я не согласен с тем, что это вопрос, основанный на мнениях. Здесь должен быть правильный ответ, если не правильный ответ, который зависит от немного большего контекста. FYI, я голосовал, чтобы передать свой вопрос на Serverfault. –