[Документация Yandex Cloud](../../../index.md) > [Yandex Container Registry](../../index.md) > [Пошаговые инструкции](../index.md) > Управление политиками автоматического удаления Docker-образов > Создать политику удаления

# Создать политику удаления

Задать [политику удаления](../../concepts/lifecycle-policy.md) можно только для [репозитория](../../concepts/repository.md). Чтобы узнать имя репозитория, получите [список репозиториев в реестре](../repository/repository-list.md#repository-get).

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В [консоли управления](https://kz.console.yandex.cloud) выберите [каталог](../../../resource-manager/concepts/resources-hierarchy.md#folder), в котором создан [реестр](../../concepts/registry.md).
  1. Перейдите в сервис **Container Registry**.
  1. Выберите реестр и нажмите на строку с его именем.
  1. Выберите репозиторий и нажмите на строку с его именем.
  1. На панели слева нажмите ![lifecycle](../../../_assets/console-icons/arrows-rotate-right.svg) **Жизненный цикл**.
  1. В правом верхнем углу нажмите кнопку **Создать**.
  1. Задайте параметры политики удаления:
     * (Опционально) **Имя**.
     * (Опционально) **Описание**.
     * **Статус** — статус политики удаления после создания. Не рекомендуется создавать сразу активную политику со статусом `ACTIVE`.
     * В блоке **Правила политики удаления** добавьте правила:
       1. Нажмите кнопку **Добавить**.
       1. Задайте параметры правила:

          * **Тег** — тег Docker-образа для фильтрации. Поддерживаются регулярные выражения языка Java. Например, выражение `test.*` позволяет получить все образы с тегами, начинающимися на `test`.
          * **Образов без тегов** — флаг для применения правила к Docker-образам без тегов.
          * **Время от создания образа, в сутках** — время, через которое Docker-образ может попадать под политику удаления.
          * **Образов оставить** — количество Docker-образов, которые не будут удалены, даже если подходят по правилу.

          * (Опционально) **Описание**.
  1. Нажмите кнопку **Создать**.

- CLI {#cli}

  Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../../cli/quickstart.md#install).

  1. Подготовьте [правила политики](../../concepts/lifecycle-policy.md#lifecycle-rules) и сохраните их в файл `rules.json`.

     Пример содержимого файла с правилами, где:
     * `description` — описание правила политики.
     * `tag_regexp` — тег Docker-образа для фильтрации. Поддерживаются регулярные выражения языка Java. Например, выражение `test.*` позволяет получить все образы с тегами, начинающимися на `test`.
     * `untagged` — флаг для применения правила к Docker-образам без тегов.
     * `expire_period` — время, через которое Docker-образ может попадать под политику удаления. Формат параметра — число и единица измерения `s`, `m`, `h` или `d` (секунды, минуты, часы или дни). `expire_period` должен быть кратен 24 часам.
     * `retained_top` — количество Docker-образов, которые не будут удалены, даже если подходят по правилу.
     
     ```json
     [
       {
         "description": "delete prod Docker images older than 60 days but retain 20 last ones",
         "tag_regexp": "prod",
         "expire_period": "60d",
         "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"
       }
     ]
     ```

  1. Создайте политику удаления, выполнив команду:

     ```bash
     yc container repository lifecycle-policy create \
       --repository-name crp3cpm16edq********/ubuntu \
       --name test-policy \
       --description "disabled lifecycle-policy for tests" \
       --rules ./rules.json
     ```

     Где:
     * `--repository-name` — имя репозитория.
     * `--rules` — путь к файлу с описанием политик.
     * `--description` — (опционально) описание политики удаления.
     * `--name` — (опционально) имя политики. Требования к имени:

       * длина — от 3 до 63 символов;
       * может содержать строчные буквы латинского алфавита, цифры и дефисы;
       * первый символ — буква, последний — не дефис.

     {% note info %}

     Политика по умолчанию создается выключенной (в статусе `DISABLED`). Не рекомендуется создавать сразу активную политику с флагом `--active`.

     {% endnote %}

     Результат:

     ```text
     id: crp6lg1868p3********
     name: test-policy
     repository_id: crp3cpm16edq********
     ...
     - description: delete all untagged Docker images older than 48 hours
       expire_period: 172800s
       untagged: true
     ```

     Значение параметра `expired_period` в ответе отображается в секундах. Это техническое ограничение, формат будет изменен.
  1. Проверьте, что политика создалась, выполнив команду:

     ```bash
     yc container repository lifecycle-policy list --repository-name crp3cpm16edq********/ubuntu
     ```

     Где `repository-name` — имя репозитория.

     Результат:

     ```text
     +----------------------+-------------+----------------------+----------+---------------------+-------------------------------+
     |          ID          |    NAME     |    REPOSITORY ID     |  STATUS  |       CREATED       |          DESCRIPTION          |
     +----------------------+-------------+----------------------+----------+---------------------+-------------------------------+
     | crp6lg1868p3******** | test-policy | crp3cpm16edq******** | DISABLED | 2020-05-28 15:05:58 | disabled lifecycle-policy for |
     |                      |             |                      |          |                     | tests                         |
     +----------------------+-------------+----------------------+----------+---------------------+-------------------------------+
     ```

- Terraform {#tf}

  Если у вас еще нет Terraform, [установите его и настройте провайдер Yandex Cloud](../../../tutorials/infrastructure-management/terraform-quickstart.md#install-terraform).
  
  
  Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, [аутентифицируйтесь](../../../terraform/authentication.md) соответствующим способом.

  1. Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:

     ```hcl
     resource "yandex_container_repository_lifecycle_policy" "my_lifecycle_policy" {
       name          = "<имя_политики>"
       status        = "<статус_политики>"
       repository_id = "<идентификатор_репозитория>"

       rule {
         description   = "<описание_правила>"
         untagged      = true
         tag_regexp    = ".*"
         retained_top  = 1
         expire_period = "48h"
       }
     }
     ```

     Где:
     * `name` — имя политики.
     * `status` — статус политики. Может принимать значения `active` и `disabled`.
     * `repository_id` — идентификатор репозитория.
     * `rule` — блок с правилом политики. Содержит следующие параметры:
       * `description` — описание правила.
       * `untagged` — если значение параметра `true`, правило применяется ко всем [Docker-образам](../../concepts/docker-image.md) без [тега](../../concepts/docker-image.md#version).
       * `tag_regexp` — тег Docker-образа для фильтрации. Поддерживаются регулярные выражения языка Java. Например, выражение `test.*` позволяет получить все образы с тегами, начинающимися на `test`.
       * `retained_top` — количество Docker-образов, которые не будут удалены, даже если подходят под правила политики удаления.
       * `expire_period` — время, через которое Docker-образ попадает под политику удаления. Формат параметра — число и единица измерения `s`, `m`, `h` или `d` (секунды, минуты, часы или дни). `expire_period` должен быть кратен 24 часам.

     Подробнее о параметрах ресурса `yandex_container_repository_lifecycle_policy` в [документации провайдера](../../../terraform/resources/container_repository_lifecycle_policy.md).
  1. Создайте ресурсы:

     1. В терминале перейдите в директорию с конфигурационным файлом.
     1. Проверьте корректность конфигурации с помощью команды:
     
        ```bash
        terraform validate
        ```
     
        Если конфигурация является корректной, появится сообщение:
     
        ```bash
        Success! The configuration is valid.
        ```
     
     1. Выполните команду:
     
        ```bash
        terraform plan
        ```
     
        В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
     1. Примените изменения конфигурации:
     
        ```bash
        terraform apply
        ```
     
     1. Подтвердите изменения: введите в терминале слово `yes` и нажмите **Enter**.

  После этого в указанном репозитории будет создана политика удаления. Проверить появление политики и ее настройки можно в [консоли управления](https://kz.console.yandex.cloud) или с помощью команды [CLI](../../../cli/index.md):

  ```bash
   yc container repository lifecycle-policy list --registry-id <идентификатор_реестра>
  ```

- API {#api}

  Чтобы создать политику удаления, воспользуйтесь методом [Create](../../api-ref/grpc/LifecyclePolicy/create.md) для ресурса [LifecyclePolicyService](../../api-ref/grpc/LifecyclePolicy/index.md).

{% endlist %}

{% note tip %}

Вы можете [протестировать политику удаления](lifecycle-policy-dry-run.md), чтоб проверить, какие [Docker-образы](../../concepts/docker-image.md) соответствуют правилам политики. Реального удаления Docker-образов при тестовом запуске не происходит.

{% endnote %}