0Pricing
Cloud & IT Cert Prep · Урок

ECR: хранение и извлечение образов контейнеров

Отправляйте образы Docker в Amazon ECR, применяйте политики жизненного цикла для удаления старых образов и безопасно извлекайте образы в задачи ECS.

«ECR: хранение и извлечение образов контейнеров» — бесплатный урок Cloud & IT Cert Prep на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cloud & IT Cert Prep, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cloud & IT Cert Prep содержит 4 уроков всего.

Что такое Amazon ECR

Amazon Elastic Container Registry (ECR) — это полностью управляемый реестр образов контейнеров, совместимый с Docker. Он безопасно хранит, обрабатывает и развёртывает образы контейнеров в AWS. ECR избавляет от необходимости обслуживать собственную инфраструктуру реестра и изначально интегрируется с ECS, EKS, Lambda (образы контейнеров) и CodeBuild. Образы, хранящиеся в ECR, реплицируются для обеспечения высокой доступности и могут автоматически проверяться на наличие уязвимостей.

Частные и публичные репозитории ECR

ECR поддерживает два типа репозиториев: частные репозитории в Amazon ECR требуют аутентификации AWS для получения образов и идеально подходят для проприетарных образов приложений. Доступ контролируется политиками IAM и политиками ресурсов репозитория. Публичные репозитории в ECR Public Gallery (public.ecr.aws) позволяют получать образы без аутентификации из любой точки интернета и идеально подходят для базовых образов с открытым исходным кодом, публичных инструментов и образов, предоставляемых AWS (базовые образы Lambda, оптимизированные для ECS образы AMI). Для публичных репозиториев предусмотрен бесплатный лимит загрузки с ограничениями частоты для запросов без аутентификации.

# Create a private ECR repository
aws ecr create-repository \
  --repository-name 'myapp/backend' \
  --image-scanning-configuration scanOnPush=true \
  --image-tag-mutability IMMUTABLE

Аутентификация Docker в ECR

Чтобы отправлять частные образы ECR или получать их, Docker должен пройти аутентификацию с использованием учётных данных AWS. Используйте aws ecr get-login-password, чтобы получить временный токен аутентификации, и передайте его через конвейер в docker login. Токен действителен в течение 12 часов. В конвейерах CI/CD обновляйте токен перед каждой отправкой образа. Агенты задач ECS, Lambda и рабочие узлы EKS автоматически проходят аутентификацию в ECR с помощью своей роли IAM — при получении образов во время работы в средах AWS ручной вход не требуется.

# Authenticate Docker CLI to ECR
aws ecr get-login-password --region us-east-1 | \
  docker login \
    --username AWS \
    --password-stdin \
    123456789012.dkr.ecr.us-east-1.amazonaws.com

Отправка образов в ECR

Стандартный порядок отправки образа в ECR: (1) локально создайте образ Docker; (2) присвойте тег образу, указав URI репозитория ECR (формат: account.dkr.ecr.region.amazonaws.com/repo-name:tag); (3) отправьте образ с тегом. ECR хранит каждый слой образа отдельно и устраняет дублирование общих слоёв между образами, сокращая расходы на хранение. Использование неизменяемых тегов предотвращает перезапись тега, благодаря чему версии развёрнутых образов остаются стабильными и проверяемыми.

# Build, tag, and push
docker build -t myapp/backend .
docker tag myapp/backend \
  123456789012.dkr.ecr.us-east-1.amazonaws.com/myapp/backend:v1.2.3
docker push \
  123456789012.dkr.ecr.us-east-1.amazonaws.com/myapp/backend:v1.2.3

Изменяемость тегов образов

IMMUTABLE теги не позволяют заменить тег другим образом. Если изменяемость тегов установлена в значение IMMUTABLE, отправка нового образа с уже существующим тегом завершается ошибкой — необходимо использовать новый тег. Это рекомендуемый подход для рабочих сред: он гарантирует, что :v1.2.3 всегда обозначает один и тот же дайджест образа, обеспечивая надёжный откат и аудит. Используйте теги MUTABLE только для веток разработки или удобный тег :latest в средах, не предназначенных для эксплуатации.

Сканирование образов на уязвимости

Включите сканирование при отправке, чтобы автоматически проверять образы на наличие известных CVE при их отправке. ECR использует интеграцию с Amazon Inspector (расширенное сканирование) или встроенное базовое сканирование на основе сканера с открытым исходным кодом Clair. Расширенное сканирование выполняется непрерывно, а не только при отправке, и охватывает пакеты OS и пакеты для конкретных языков (Node.js, Python, Java). Просматривайте результаты сканирования в консоли ECR или через уведомления EventBridge, отправляемые команде безопасности.

# Enable enhanced scanning for a registry
aws ecr put-registry-scanning-configuration \
  --scan-type ENHANCED \
  --rules '[{"repositoryFilters": [{"filter": "*", "filterType": "WILDCARD"}], "scanFrequency": "CONTINUOUS_SCAN"}]'

Политики жизненного цикла для управления расходами на образы

ECR взимает плату за хранение в расчёте на GB в месяц. Без управления старые образы накапливаются бесконечно, увеличивая расходы. Политики жизненного цикла автоматически удаляют образы по истечении срока на основе правил: например, можно сохранять только последние 10 версий с тегами или удалять образы без тегов, которым больше 7 дней. Политики жизненного цикла выполняются ежедневно. Это особенно важно в конвейерах CI/CD, которые отправляют новый образ при каждом изменении кода и могут накапливать сотни образов в неделю.

aws ecr put-lifecycle-policy \
  --repository-name 'myapp/backend' \
  --lifecycle-policy-text '{
    "rules": [
      {
        "rulePriority": 1,
        "description": "Keep last 10 tagged images",
        "selection": {"tagStatus": "tagged", "tagPrefixList": ["v"], "countType": "imageCountMoreThan", "countNumber": 10},
        "action": {"type": "expire"}
      },
      {
        "rulePriority": 2,
        "description": "Delete untagged images after 7 days",
        "selection": {"tagStatus": "untagged", "countType": "sinceImagePushed", "countUnit": "days", "countNumber": 7},
        "action": {"type": "expire"}
      }
    ]
  }'

Доступ к образам между аккаунтами

Чтобы получать образы из репозитория ECR в аккаунте A в ECS/EKS/Lambda аккаунта B, настройте политику репозитория (политику на основе ресурсов) для репозитория ECR в аккаунте A и предоставьте субъекту IAM из аккаунта B разрешения на вызов ecr:GetDownloadUrlForLayer, ecr:BatchGetImage и ecr:BatchCheckLayerAvailability. Это избавляет от необходимости копировать образы между аккаунтами и позволяет централизованно управлять образами при распределённом использовании.

Репликация ECR для развёртываний в нескольких регионах

Репликация ECR автоматически копирует образы из основного реестра в реестры других регионов AWS (и, при необходимости, в другие аккаунты). Когда задачи ECS в другом регионе получают образ, они используют локальный региональный реестр, что снижает расходы на передачу данных и задержку получения образа. Настройте правила репликации на уровне реестра, указав репозитории для репликации, а также целевые регионы и аккаунты. Репликация выполняется асинхронно и почти в реальном времени.

aws ecr put-replication-configuration \
  --replication-configuration '{
    "rules": [{
      "destinations": [
        {"region": "eu-west-1", "registryId": "123456789012"},
        {"region": "ap-southeast-1", "registryId": "123456789012"}
      ],
      "repositoryFilters": [{"filter": "prod/*", "filterType": "PREFIX_MATCH"}]
    }]
  }'

Шифрование ECR

ECR шифрует образы в состоянии покоя с помощью шифрования на стороне сервера. По умолчанию используется ключ, управляемый AWS (AWS_MANAGED_KEY). Для дополнительного контроля и возможности аудита настройте управляемый клиентом ключ KMS (CMK). При использовании CMK Вы контролируете ротацию ключа, можете отозвать доступ, отключив ключ, и проверять все операции расшифровки в CloudTrail. Включите шифрование KMS, если требования нормативного соответствия (PCI-DSS, HIPAA, FedRAMP) предусматривают использование ключей шифрования, контролируемых клиентом.

Использование ECR с ECS в конвейерах CI/CD

Полный конвейер CI/CD для ECS с ECR выглядит так: (1) разработчик отправляет код в Git; (2) CodeBuild создаёт образ Docker и отправляет его в ECR с тегом, содержащим SHA фиксации; (3) CodePipeline обновляет определение задачи ECS, указывая URI нового образа; (4) ECS выполняет поэтапное обновление сервиса, получая новый образ из ECR. Задачи ECS используют роль выполнения задачи для автоматической аутентификации в ECR — для получения образов во время работы конвейеру не нужно управлять учётными данными.

Быстрая проверка

Проверьте, насколько хорошо Вы усвоили концепции AWS Solutions Architect (SAA-C03) из этого урока.

Итоги урока

В этом уроке Вы узнали, что частные репозитории ECR хранят образы контейнеров с доступом под управлением IAM, неизменяемыми тегами для стабильности рабочих сред и автоматическим сканированием уязвимостей с помощью Inspector; политики жизненного цикла автоматически удаляют старые образы и образы без тегов, помогая контролировать расходы на хранение в активно работающих средах CI/CD; репликация ECR копирует образы в другие регионы и аккаунты, снижая задержку получения при развёртываниях в нескольких регионах. Далее Вы узнаете об автоматическом масштабировании сервисов ECS и интеграции с балансировкой нагрузки.

Часто задаваемые вопросы

Урок «ECR: хранение и извлечение образов контейнеров» бесплатный?

Да — полный текст урока «ECR: хранение и извлечение образов контейнеров» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cloud & IT Cert Prep, подпишись на CoddyKit PRO. Курс Cloud & IT Cert Prep содержит 4 уроков всего.

Чему я научусь в уроке «ECR: хранение и извлечение образов контейнеров»?

Отправляйте образы Docker в Amazon ECR, применяйте политики жизненного цикла для удаления старых образов и безопасно извлекайте образы в задачи ECS. Ты практикуешь Cloud & IT Cert Prep с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cloud & IT Cert Prep?

Предыдущий опыт не требуется. Cloud & IT Cert Prep на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «ECR: хранение и извлечение образов контейнеров»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cloud & IT Cert Prep?

Да. Каждый урок Cloud & IT Cert Prep включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Кластеры ECS, определения задач и сервисы
  2. Тип запуска EC2 и Fargate
  3. ECR: хранение и извлечение образов контейнеров
  4. Автоматическое масштабирование сервисов ECS и балансировка нагрузки
← Назад к Cloud & IT Cert Prep