AWS ECR jako prywatne repozytorium obrazów docker

Jak wykorzystać AWS ECR jako prywatne repozytorium obrazów Docker? W tym artykule pokaże, jak utworzyć repozytorium, zbudować obraz, wysłać go do repozytorium oraz spullować.Aby móc działać przy pomocy AWS CLI, musimy mieć już skonfigurowane, ale jak to zrobić odsyłam do dokumentacji AWS.

Tworzenie repozytorium

W pierwszej kolejności musimy utworzyć sobie prywatne repozytorum, więc wykonujemy polecenie

aws ecr create-repository --repository-name cloud-devops-repo

W odpowiedzi powinniśmy otrzymać wynik podobny do poniższego

{
  "repository": {
    "repositoryArn": "arn:aws:ecr:eu-central-1:111111111111:repository/cloud-devops-repo",
    "registryId": "111111111111",
    "repositoryName": "cloud-devops-repo",
    "repositoryUri": "111111111111.dkr.ecr.eu-central-1.amazonaws.com/cloud-devops-repo",
    "createdAt": "2022-11-23T10:32:20+01:00",
    "imageTagMutability": "MUTABLE",
    "imageScanningConfiguration": {
      "scanOnPush": false
    },
    "encryptionConfiguration": {
      "encryptionType": "AES256"
    }
  }
}

Tworzenie skryptu oraz Dockerfile

Mamy utworzone repozytorium, teraz czas na utworzenie prostego skryptu, który wyświetli nam np. Hello AWS ECR. Do utworzenia skryptu wykorzystajmy Python, a więc, tworzymy skrypt app.py z prostym print

print("Hello AWS ECR")

Następnie musimy utworzyć plik Dockerfile

FROM python:3.9.15-slim-buster

COPY app.py /

CMD [ "python", "app.py" ]

W dockerfile pobieramy python 3.9.15-slim-buster, kopiujemy plik app.py do kontenera i uruchamiamy go przy pomocy polecenia python app.py.

Budowanie obrazu

Mamy utworzone repozytorium oraz przykładową aplikację, czas zbudować obraz, w tym celu wykonujemy polecenie

docker build -t 111111111111.dkr.ecr.eu-central-1.amazonaws.com/cloud-devops-repo:latest .

Efekt polecenia powinien być jak poniżej

~/aws-workspace/ecr  docker build -t 111111111111.dkr.ecr.eu-central-1.amazonaws.com/cloud-devops-repo:latest . 
Sending build context to Docker daemon  3.072kB
Step 1/3 : FROM python:3.9.15-slim-buster
3.9.15-slim-buster: Pulling from library/python
32820e52a00e: Pull complete 
6563993b0507: Pull complete 
0a2ae8fe2234: Pull complete 
387a2ed9549a: Pull complete 
1d00b2d9e1d3: Pull complete 
Digest: sha256:c52820000fca6d55f26b8b22bd8f2a9266f42a9cc24e003d920c9625bb80d359
Status: Downloaded newer image for python:3.9.15-slim-buster
 ---> 70fa42c638b3
Step 2/3 : COPY app.py /
 ---> ae87cba4045e
Step 3/3 : CMD [ "python", "app.py" ]
 ---> Running in ca8b2bddaa7e
Removing intermediate container ca8b2bddaa7e
 ---> b29b7e3c5ff3
Successfully built b29b7e3c5ff3
Successfully tagged 111111111111.dkr.ecr.eu-central-1.amazonaws.com/cloud-devops-repo:latest

Pushowanie obrazu do repozytorium

Teraz musimy wysłać obraz do repozytorium, ale aby móc w ogóle to zrobić, musimy się zalogować do naszego repozytorium, bez tego nic nie zdziałamy. Aby się zalogować trzeba wykonać poniższe polecenie

aws ecr get-login-password --region eu-central-1 | docker login --username AWS --password-stdin 111111111111.dkr.ecr.eu-central-1.amazonaws.com

W odpowiedzi powinniśmy dostać komunikat

Login Succeeded

Teraz możemy wysłać nasz obraz do repozytorium, robimy to przy pomocy polecenie

docker push 111111111111.dkr.ecr.eu-central-1.amazonaws.com/cloud-devops-repo:latest

Po pomyślnym wysłaniu obrazu, możemy sprawdzić czy nasz obraz jest w repozytorium, robimy to przy pomocy polecenia

aws ecr list-images --repository-name cloud-devops-repo  

Co wygeneruje nam podstawowe informacje odnośnie obrazów, jeżeli chcecie więcej szczegółów, można wykonać polecenie

aws ecr describe-images --repository-name cloud-devops-rep

Uruchomienie obrazu z repozytorium

Zanim zbudujemy obraz z repozytorium, wyczyścmy wszystkie obrazy przy pomocy polecenia

docker image prune

Następnie pobierzmy na nowo obraz z repozytorium, aby sprawdzić czy wszystko działa tak jak powinno, wykonajmy polecenie

docker pull 111111111111.dkr.ecr.eu-central-1.amazonaws.com/cloud-devops-repo 

Ostatnim krokiem jest uruchomienie obrazu za pomocą polecenia

docker run 111111111111.dkr.ecr.eu-central-1.amazonaws.com/cloud-devops-repo

Wynikiem poprawnego uruchomienia obrazu powinien być wyświetlony napis „Hello AWS ECR”, jak poniżej

~/aws-workspace/ecr  docker run 111111111111.dkr.ecr.eu-central-1.amazonaws.com/cloud-devops-repo
Hello AWS ECR

Dodatkowe funkcje

Image scanning – jest to bardzo fajna i bardzo przydatna funkcja, która pozwala nam na skanowanie obrazów pod kątem wykrywania luk bezpieczeństwa w oprogramowaniu, które wykorzystujemy w obrazie.

Tag immutability – funkcja która blokuje nam możliwość nadpisania obrazu z konkretnym tagiem, tzn jak mamy np w repozytorium obraz z tagiem v2, to przy próbie jego nadpisania dostaniemy błąd „ImageTagAlreadyExistsException”.

Lifecycle policies – bardzo przydatna funkcja, która daje nam możliwość zarządzanie cyklem życia danego obrazu, po więcej informacji odsyłam do dokumentacji AWS https://docs.aws.amazon.com/AmazonECR/latest/userguide/LifecyclePolicies.html gdzie można również znaleźć przykłady

Private image replication – dzięki tej funkcjonalności, możemy skonfigurować replikację swojego prywatnego repozytorium. AWS ECR daje nam możliwość replikacji pomiędzy regionami(cross-region) oraz pomiędzy kontami(cross-account).

Helm Chart – oprócz obrazów dockerowych AWS ECR daje nam możliwość publikowanie artefaktów OCI w postaci helm chartów.

Mam nadzieję, że artykuł choć trochę skłonił Was do wypróbowania AWS ECR 🙂

Related Posts