На прошлом уроке мы говорили о том, что 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"
}
]
Удаление образа — это ответственное действие. Поэтому после настройки правил проверьте, как они будут работать в автоматическом режиме. Вам поможет тестовый запуск политики: dry-run.Для репозитория можно настроить несколько политик, но активной будет только одна. Включайте и отключайте политики в зависимости от своих задач.
Container Optimized Image
Yandex.Cloud позволяет создать из специального образа Container Optimized Image виртуальную машину, чтобы запустить на ней Docker-контейнер. При использовании Container Optimized Image не нужно устанавливать на машину Docker и скачивать образ с помощью команды docker pull
. Мы опробуем эту возможность на следующей практической работе.