ECR: przechowywanie i pobieranie obrazów kontenerów
Przesyłać obrazy Docker do Amazon ECR, stosować zasady cyklu życia do usuwania starych obrazów oraz bezpiecznie pobierać obrazy do zadań ECS.
ECR: przechowywanie i pobieranie obrazów kontenerów to bezpłatna lekcja AWS Solutions Architect na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AWS Solutions Architect, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AWS Solutions Architect zawiera 4 lekcji w sumie.
Czym jest Amazon ECR?
Amazon Elastic Container Registry (ECR) to w pełni zarządzany rejestr obrazów kontenerów zgodny z Dockerem. Bezpiecznie przechowuje obrazy kontenerów w AWS, zarządza nimi i wdraża je. ECR eliminuje potrzebę obsługi własnej infrastruktury rejestru i natywnie integruje się z ECS, EKS, Lambda (obrazy kontenerów) oraz CodeBuild. Obrazy przechowywane w ECR są replikowane w celu zapewnienia wysokiej dostępności i mogą być automatycznie skanowane pod kątem luk w zabezpieczeniach.
Prywatne a publiczne repozytoria ECR
ECR obsługuje dwa typy repozytoriów: Prywatne repozytoria w Amazon ECR wymagają uwierzytelnienia AWS podczas pobierania obrazów — idealnie nadają się do zastrzeżonych obrazów aplikacji. Dostęp jest kontrolowany przez zasady IAM i zasady zasobów repozytorium. Publiczne repozytoria w ECR Public Gallery (public.ecr.aws) pozwalają na nieuwierzytelnione pobieranie z dowolnego miejsca w internecie — idealnie nadają się do bazowych obrazów open source, publicznych narzędzi i obrazów dostarczanych przez AWS (bazowych obrazów Lambda oraz obrazów AMI zoptymalizowanych pod kątem ECS). Publiczne repozytoria zapewniają bezpłatny limit pobrań, a nieuwierzytelnione żądania podlegają limitom częstotliwości.
# Create a private ECR repository
aws ecr create-repository \
--repository-name 'myapp/backend' \
--image-scanning-configuration scanOnPush=true \
--image-tag-mutability IMMUTABLEUwierzytelnianie Dockera w ECR
Aby przesyłać prywatne obrazy ECR lub je pobierać, Docker musi uwierzytelnić się za pomocą poświadczeń AWS. Należy użyć aws ecr get-login-password, aby uzyskać tymczasowy token uwierzytelniający, a następnie przekazać go potokiem do docker login. Token jest ważny przez 12 godzin. W potokach CI/CD należy odświeżać token przed każdym przesłaniem obrazu. Agenty zadań ECS, Lambda i węzły robocze EKS uwierzytelniają się w ECR automatycznie za pomocą swojej roli IAM — w środowiskach AWS nie jest wymagane ręczne logowanie podczas pobierania obrazów w czasie działania.
# 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.comPrzesyłanie obrazów do ECR
Standardowy przebieg przesyłania obrazu do ECR: (1) Utworzenie obrazu Dockera lokalnie; (2) Otagowanie obrazu za pomocą URI repozytorium ECR (format: account.dkr.ecr.region.amazonaws.com/repo-name:tag); (3) Przesłanie otagowanego obrazu. ECR przechowuje każdą warstwę obrazu osobno i eliminuje duplikaty wspólnych warstw między obrazami, ograniczając koszty przechowywania. Używanie niezmiennych tagów zapobiega nadpisywaniu tagu, dzięki czemu wdrożone wersje obrazów są stabilne i możliwe do prześledzenia.
# 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.3Zmienność tagów obrazów
Tagi IMMUTABLE uniemożliwiają zastąpienie tagu innym obrazem. Gdy zmienność tagów jest ustawiona na IMMUTABLE, przesłanie nowego obrazu z istniejącym tagiem kończy się niepowodzeniem — trzeba użyć nowego tagu. Jest to dobra praktyka w środowisku produkcyjnym: gwarantuje, że :v1.2.3 zawsze wskazuje dokładnie ten sam skrót obrazu, co umożliwia niezawodne wycofywanie zmian i audyt. Tagów MUTABLE należy używać wyłącznie dla gałęzi programistycznych lub wygodnego tagu :latest w środowiskach nieprodukcyjnych.
Skanowanie obrazów pod kątem luk
Należy włączyć funkcję scan on push, aby automatycznie skanować obrazy pod kątem znanych CVE podczas ich przesyłania. ECR korzysta z integracji z Amazon Inspector (skanowanie rozszerzonego typu) albo z wbudowanego skanowania podstawowego opartego na skanerze open source Clair. Skanowanie rozszerzone zapewnia skanowanie ciągłe (nie tylko podczas przesyłania) i obejmuje pakiety systemu operacyjnego oraz pakiety charakterystyczne dla języków programowania (Node.js, Python, Java). Wyniki skanowania można przeglądać w konsoli ECR lub za pośrednictwem powiadomień EventBridge kierowanych do zespołu bezpieczeństwa.
# Enable enhanced scanning for a registry
aws ecr put-registry-scanning-configuration \
--scan-type ENHANCED \
--rules '[{"repositoryFilters": [{"filter": "*", "filterType": "WILDCARD"}], "scanFrequency": "CONTINUOUS_SCAN"}]'Zasady cyklu życia do zarządzania kosztami obrazów
ECR pobiera opłaty za przechowywanie danych w przeliczeniu na GB miesięcznie. Bez odpowiedniego zarządzania stare obrazy gromadzą się bezterminowo, zwiększając koszty. Zasady cyklu życia automatycznie wygaszają i usuwają obrazy na podstawie reguł, na przykład pozostawiając tylko 10 ostatnich otagowanych wydań lub usuwając nieotagowane obrazy starsze niż 7 dni. Zasady cyklu życia są uruchamiane codziennie. Jest to szczególnie ważne w potokach CI/CD, które przesyłają nowe obrazy przy każdym zatwierdzeniu zmian, przez co w ciągu tygodnia może zgromadzić się ich setki.
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"}
}
]
}'Dostęp do obrazów między kontami
Aby pobierać obrazy z repozytorium ECR na koncie A do ECS/EKS/Lambda na koncie B, należy skonfigurować zasadę repozytorium (zasadę opartą na zasobie) w repozytorium ECR na koncie A i nadać podmiotowi IAM z konta B uprawnienia do wywoływania ecr:GetDownloadUrlForLayer, ecr:BatchGetImage oraz ecr:BatchCheckLayerAvailability. Eliminuje to potrzebę kopiowania obrazów między kontami i umożliwia centralne zarządzanie obrazami przy rozproszonym ich użyciu.
Replikacja ECR na potrzeby wdrożeń w wielu regionach
Replikacja ECR automatycznie kopiuje obrazy z głównego rejestru do rejestrów w innych regionach AWS (opcjonalnie także na inne konta). Gdy zadania ECS w innym regionie pobierają obraz, korzystają z lokalnego rejestru regionalnego, co ogranicza koszty transferu danych i opóźnienie pobierania obrazu. Reguły replikacji konfiguruje się na poziomie rejestru, określając repozytoria do replikowania oraz docelowe regiony i konta. Replikacja jest asynchroniczna i odbywa się niemal w czasie rzeczywistym.
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"}]
}]
}'Szyfrowanie ECR
ECR szyfruje obrazy w spoczynku za pomocą szyfrowania po stronie serwera. Domyślnie używa klucza zarządzanego przez AWS (AWS_MANAGED_KEY). Aby uzyskać większą kontrolę i możliwość audytu, należy skonfigurować klucz KMS zarządzany przez klienta (CMK). W przypadku CMK można kontrolować rotację klucza, odbierać dostęp przez jego wyłączenie oraz audytować wszystkie operacje deszyfrowania w CloudTrail. Szyfrowanie KMS należy włączyć, gdy zgodność z przepisami (PCI-DSS, HIPAA, FedRAMP) wymaga kluczy szyfrujących kontrolowanych przez klienta.
Używanie ECR z ECS w potokach CI/CD
Kompletny potok CI/CD dla ECS z ECR: (1) programista przesyła kod do Git; (2) CodeBuild tworzy obraz Dockera i przesyła go do ECR z tagiem zawierającym SHA zatwierdzenia; (3) CodePipeline aktualizuje definicję zadania ECS za pomocą nowego URI obrazu; (4) ECS wykonuje aktualizację kroczącą usługi, pobierając nowy obraz z ECR. Zadania ECS używają roli wykonywania zadania do automatycznego uwierzytelniania w ECR — podczas pobierania obrazów w czasie działania nie trzeba zarządzać poświadczeniami w potoku.
Szybkie sprawdzenie
Sprawdź swoją znajomość zagadnień AWS Solutions Architect (SAA-C03) omówionych w tej lekcji.
Podsumowanie lekcji
W tej lekcji poznano: prywatne repozytoria ECR, które przechowują obrazy kontenerów z dostępem kontrolowanym przez IAM, niezmiennymi tagami zapewniającymi stabilność środowiska produkcyjnego oraz automatycznym skanowaniem luk za pomocą Inspector; zasady cyklu życia, które automatycznie wygaszają stare i nieotagowane obrazy, aby kontrolować koszty przechowywania w aktywnych środowiskach CI/CD; oraz replikację ECR, która kopiuje obrazy do innych regionów i kont, zapewniając wdrożenia wieloregionowe przy mniejszym opóźnieniu pobierania. Następnie omówimy automatyczne skalowanie usług ECS i integrację z równoważeniem obciążenia.
Często zadawane pytania
Czy lekcja „ECR: przechowywanie i pobieranie obrazów kontenerów” jest bezpłatna?
Tak — pełny tekst „ECR: przechowywanie i pobieranie obrazów kontenerów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AWS Solutions Architect, przejdź na CoddyKit PRO. Kurs AWS Solutions Architect zawiera 4 lekcji w sumie.
Co nauczysz się w „ECR: przechowywanie i pobieranie obrazów kontenerów”?
Przesyłać obrazy Docker do Amazon ECR, stosować zasady cyklu życia do usuwania starych obrazów oraz bezpiecznie pobierać obrazy do zadań ECS. Ćwiczysz AWS Solutions Architect z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć AWS Solutions Architect?
Nie wymagamy żadnego doświadczenia. AWS Solutions Architect w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „ECR: przechowywanie i pobieranie obrazów kontenerów”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji AWS Solutions Architect?
Tak. Każda lekcja AWS Solutions Architect zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Klastry ECS, definicje zadań i usługi
- Typ uruchomienia EC2 a Fargate
- ECR: przechowywanie i pobieranie obrazów kontenerów
- Automatyczne skalowanie usług ECS i równoważenie obciążenia