Где сохранить файл Dockerfile в проекте?

Я набираю знания о Докере, и у меня есть следующие вопросы.

  • Где находится файл Dockerfile в проекте?
    • Сохраняются ли они вместе с источником?
    • Они хранятся вне источника? У вас есть собственный репозиторий Git только для Dockerfile?

Если сервер CI должен создать новое изображение для каждой сборки и запустить его на тестовом сервере, сохраните предыдущее изображение? Я имею в виду, вы отмечаете предыдущее изображение или удаляете предыдущее изображение перед созданием нового?

Я разработчик Java EE, поэтому я использую Maven, Jenkins и т.д., если это важно.

Ответ 1

Единственное ограничение на то, где хранится Dockerfile, - это то, что любые файлы, которые вы ДОБАВЛЯЕТЕ к своему образу, должны находиться ниже Dockerfile в файловой системе. Я обычно вижу их на верхнем уровне проектов, хотя у меня есть репозиторий, который объединяет кучу маленьких изображений, где у меня есть что-то вроде

top/
  project1/
    Dockerfile
    project1_files
  project2/
    Dockerfile
    project2_files  

Плагин док-станции Jenkins может указывать на произвольный каталог с помощью Dockerfile, так что это легко. Что касается CI, наиболее распространенная стратегия, которую я видел, - помечать каждое изображение, созданное с помощью CI, как "последнее". Это значение по умолчанию, если вы не добавляете тег в сборку. Затем релизы получают свои собственные теги. Таким образом, если вы просто запускаете изображение без аргументов, вы получаете последнее изображение, созданное CI, но если вы хотите конкретную версию, это легко сказать.

Ответ 2

Я бы порекомендовал хранить Dockerfile с исходным кодом так же, как и с make файлом.

Проблема контекста сборки означает, что большинство файлов Docker находятся на верхнем уровне проекта или вблизи него. Вы можете обойти это, используя сценарии или инструменты сборки, чтобы копировать файлы Dockerfile или исходные папки, но это становится немного болезненным.

Я не знаю о наилучшей практике в отношении тегов и CI. Пометка с помощью git-хеша или аналогичного может быть хорошим решением. Вы захотите сохранить хотя бы одно поколение старых изображений на случай, если потребуется откат.