Docker: каковы рекомендации по тегированию изображений для среды

У меня есть несколько сред. Это debug, dev и prod. Я хотел бы обратиться к изображению последним dev (последним) или dev (версия 1.1) или prod (последним). Как я буду отмечать сборки и толчки?

моей первой мыслью было создать отдельные репозитории для каждой среды debug, dev и prod. Но я начинаю задаваться вопросом, Могу ли я сделать это только с одним репозиторием. Если это возможно сделать с одним контейнером, каким будет синтаксис при построении и толкает?

3 ответов


это то, что работал лучше для меня и моей команды, и я рекомендую его:

рекомендую одно РЕПО на проект для всех сред, им легче управлять. Особенно если у вас есть микросервисы, то ваш проект состоит из нескольких микросервисов. Управление одним РЕПО на env на проект-это боль.

например, у меня есть api пользователей. РЕПО докера users. И это РЕПО используется alpha, dev и beta.

мы создаем переменную env под названием $DOCKER_TAG в нашем сервисе CI / CD и установите его во время создания сборки, например:

DOCKER_TAG: $(date +%Y%m%d).$BUILD_NUMBER => это в bash.

здесь $BUILD_NUMBER предварительно устанавливается при запуске сборки при запуске CI/CD. Например, когда мы объединяем PR, запускается сборка, как build no. 1, so $BUILD_NUMBER: 1.

полученный тег выглядит так при использовании: 20171612.1 Итак, наш образ докера: users:20171612.1

почему этот формат?

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

Итак, когда мы сливаемся, мы создаем одну сборку. Затем эта сборка развертывается по мере необходимости в разных средах. Мы не создаем независимую сборку для каждой среды. И мы отслеживаем, что где развернуто.

если есть ошибка в среде с определенным тегом, мы вытаскиваем такой тег, строим и trobleshoot и воспроизводим проблему при этом условии. Если мы нашли проблему, у нас есть номер сборки в теге 20171612.1 Итак, мы знаем, что сборки нет. У меня проблема. Мы проверяем наш сервис CI/CD, и это говорит нам, что commit является самым последним. Мы проверяем, что фиксируем хэш из git и отлаживаем и исправляем проблему. Затем мы развертываем его как исправление, например.

если у вас еще нет CI/CD, и вы делаете это вручную, просто установите тег в этом формате вручную (в значительной степени введите полную строку как есть) и вместо номера сборки используйте зафиксируйте короткий хэш git (если вы используете git):

20170612.ed73d4f

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

вы также можете определить любой другой суффикс для вашего тега, который сопоставляется с версией кода, поэтому вы можете легко устранить неполадки (например, сопоставить теги git, если вы их используете).

попробуйте, отрегулируйте его по мере необходимости и сделайте то, что он лучше всего подходит для ты и твоя команда. Есть много способов пометить. Мы пробовали много и это наш любимый до сих пор.

надеюсь, это поможет.


есть две школы мысли, стабильная пометка, где вы обновляете один тег, и уникальная пометка. У каждого свои плюсы и минусы. Стабильные теги могут создавать нестабильность при развертывании в кластерах самоисцеления, так как новый узел может получить новую версию, в то время как остальная часть кластера работает с немного более старой версией. Уникальная маркировка-лучшая практика для развертывания. Однако для управления базовыми обновлениями изображений исправлений OS & Framework необходимо использовать стабильные теги в файле dockerfile, и включите автоматические сборки контейнеров. Для более подробной прогулки, с визуальными эффектами, вот сообщение: https://blogs.msdn.microsoft.com/stevelasker/2018/03/01/docker-tagging-best-practices-for-tagging-and-versioning-docker-images/


Я думаю, что "lastest" для последнего продуктивного изображения. Это то, что я ожидаю в Docker hub, хотя в разработке нет изображений.

с другой стороны, вы можете использовать теги, такие как, например, 0.0.1-dev. Когда это изображение будет закончено, вы можете снова сделать тег и нажать, а затем репозиторий обнаружит, что слои уже находятся в репозитории.

теперь, когда вы о версии кандидата, чтобы выйти на производство, вы должны иметь только семантический версия, несмотря на не будучи в pruduccion среды. Вот что бы я сделал.