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 среды. Вот что бы я сделал.