Yandex Container Registry
Кратко:
- Yandex Container Registry предлагает бесплатный внутренний трафик, приватный реестр и автоматическое удаление образов.
- Реестр, репозиторий и теги используются для управления образами в Yandex Container Registry.
- Автоматическое удаление образов настраивается для каждого репозитория отдельно с помощью JSON-файла.
- Container Optimized Image позволяет создать виртуальную машину с предварительно установленным Docker-контейнером.
Yandex Container Registry
На прошлом уроке мы говорили о том, что Docker-образы хранятся в хранилищах. Если вы работаете с Yandex.Cloud, лучше всего использовать сервис Yandex Container Registry.
Преимущества Yandex Container Registry
- Бесплатный внутренний трафик. Для создания контейнеров придётся скачивать образы, которые могут весить несколько гигабайтов. Если вы берёте образы из Docker Hub или другого внешнего реестра, трафик тарифицируется. А если из Yandex Container Registry — такой трафик считается внутренним и не оплачивается.
- Приватный реестр. В Docker Hub это платная возможность. В Yandex Container Registry ваш реестр по умолчанию приватный. Чтобы сделать его публичным, предоставьте права системной группе
allUsers. - Политика автоматического удаления. При CI/CD после каждого изменения исходного кода создаётся новый образ. В итоге образов становится слишком много, приходится вручную управлять ими и удалять лишние. В Yandex Container Registry можно настроить автоматическое удаление. Это упростит управление образами в рамках CI/CD и сэкономит дисковые ресурсы и деньги, ведь стоимость хранения образов зависит от их объёма.
- Удобство. С Yandex Container Registry вы будете работать в привычном интерфейсе консоли управления и с командами утилиты
yc.
Реестр, репозиторий и теги
Реестр в Yandex Container Registry — это хранилище Docker-образов, а репозиторий — набор образов с одинаковыми именами (т. е. версий образа).
Чтобы различать образы в репозитории и отбирать их по правилам, добавляйте к имени образа уникальный в рамках репозитория тег. Если тег не задан — последней версии образа автоматически присваивается тег
latest.При обращении к образу используется префикс
cr.yandex. Он означает, что образ хранится Yandex Container Registry.Так выглядит запись для обращения к образу:
cr.yandex/<реестр>/<имя образа>:<тег>.
Пример полного имени:
cr.yandex/my-registry/my-app:latest.Регулярные выражения позволяют выбирать образы по правилам. Например, если тестовые образы приложения
my-app создавались с тегами testVersion1, testVersion2, testVersion3 и т. д., то вы отберёте все тестовые образы вот так:
cr.yandex/my-registry/my-app:test.*
Автоматическое удаление
Политики автоматического удаления настраиваются для каждого репозитория отдельно. Политика — это правила, по которым Docker-образы будут удаляться. Например, можно удалять все образы с тегами
test.* и все образы с тегами prod.*, созданные более месяца назад. При этом вы можете на всякий случай сохранить несколько образов, подходящих под условия.Политики удаления описываются в JSON-файле в виде списка опций и их значений. Обычно используются опции:
tag_regexp— тег Docker-образа для фильтрации.untagged— флаг для применения правила к Docker-образам без тегов.expire_period— время, кратное 24 часам, через которое Docker-образ попадает под политику удаления.retained_top— количество Docker-образов, которые не будут удалены, даже если подходят по правилу.
Вот пример файла
rules.json:
[
{
"description": "Delete prod Docker images older than 30 days but retain 20 last ones",
"tag_regexp": "prod",
"expire_period": "30d",
"retained_top": 20
},
{
"description": "delete all test Docker images except 10 last ones",
"tag_regexp": "test.*",
"retained_top": 10
},
{
"description": "delete all untagged Docker images older than 48 hours",
"untagged": true,
"expire_period": "48h"
}
]
Для репозитория можно настроить несколько политик, но активной будет только одна. Включайте и отключайте политики в зависимости от своих задач.
Container Optimized Image
Yandex Cloud позволяет создать из специального образа Container Optimized Image виртуальную машину, чтобы запустить на ней Docker-контейнер. При использовании Container Optimized Image не нужно устанавливать на машину Docker и скачивать образ с помощью команды
docker pull. Мы опробуем эту возможность в следующей практической работе.