0

practicum

Yandex Container Registry

26.04.2022

На прошлом уроке мы говорили о том, что 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. Мы опробуем эту возможность на следующей практической работе.

Свежие комментарии

Подписка

Лучшие статьи


Fatal error: Uncaught Error: Call to a member function have_posts() on null in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php:380 Stack trace: #0 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/widget.php(257): fox56_blog_grid(NULL, Array) #1 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/register.php(33): include('/home/host18670...') #2 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/class-wp-widget.php(394): Wi_Widget_Latest_Posts->widget(Array, Array) #3 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/widgets.php(837): WP_Widget->display_callback(Array, Array) #4 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(417): dynamic_sidebar('sidebar') #5 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(136): fox56_single_sidebar() #6 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(7): fox56_single_inner() #7 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/single.php(23): fox56_single() #8 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/template-loader.php(106): include('/home/host18670...') #9 /home/host1867038/the-devops.ru/htdocs/www/wp-blog-header.php(19): require_once('/home/host18670...') #10 /home/host1867038/the-devops.ru/htdocs/www/index.php(17): require('/home/host18670...') #11 {main} thrown in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php on line 380