ECR: хранение и извлечение образов контейнеров
Отправляйте образы Docker в Amazon ECR, применяйте политики жизненного цикла для удаления старых образов и безопасно извлекайте образы в задачи ECS.
«ECR: хранение и извлечение образов контейнеров» — бесплатный урок AWS Solutions Architect на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AWS Solutions Architect, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AWS Solutions Architect содержит 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 и интеграции с балансировкой нагрузки.
Изучай AWS Solutions Architect с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 30
- Уроки
- 120
Часто задаваемые вопросы
Урок «ECR: хранение и извлечение образов контейнеров» бесплатный?
Да — полный текст урока «ECR: хранение и извлечение образов контейнеров» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AWS Solutions Architect, подпишись на CoddyKit PRO. Курс AWS Solutions Architect содержит 4 уроков всего.
Чему я научусь в уроке «ECR: хранение и извлечение образов контейнеров»?
Отправляйте образы Docker в Amazon ECR, применяйте политики жизненного цикла для удаления старых образов и безопасно извлекайте образы в задачи ECS. Ты практикуешь AWS Solutions Architect с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AWS Solutions Architect?
Предыдущий опыт не требуется. AWS Solutions Architect на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «ECR: хранение и извлечение образов контейнеров»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AWS Solutions Architect?
Да. Каждый урок AWS Solutions Architect включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Кластеры ECS, определения задач и сервисы
- Тип запуска EC2 и Fargate
- ECR: хранение и извлечение образов контейнеров
- Автоматическое масштабирование сервисов ECS и балансировка нагрузки