본문 바로가기
강의 실습/비전공자도 이해할 수 있는 Docker 입문 실전

[실습] AWS ECR(Elastic Container Registry) 사용해보기

by jint 2026. 6. 8.

1. AWS CLI 설치
최신 버전의 AWS CLI 설치 또는 업데이트 : https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html

 

최신 버전의 AWS CLI 설치 또는 업데이트 - AWS Command Line Interface

이전 버전에서 업데이트하는 경우 unzip 명령을 실행하면 기존 파일을 덮어쓸지 묻는 메시지가 표시됩니다. 스크립트 자동화와 같은 경우에 이러한 프롬프트를 건너뛰려면 unzip에 대한 -u 업데이

docs.aws.amazon.com

 

맥(Mac OS))
- 터미널

$ brew install awscli
$ aws --version # 잘 출력된다면 정상 설치된 상태


윈도우(Windows))
(1) (https://awscli.amazonaws.com/AWSCLIV2.msi) 다운받아 설치
(2) 설치 후 "aws --version" 명령어를 통해 설치 확인

- Windows PowerShell

PS C:\Users\admin> aws --version # 잘 출력된다면 정상 설치된 상태
aws-cli/2.34.63 Python/3.14.5 Windows/11 exe/AMD64


우분투(Ubuntu))
- 터미널

$ sudo apt install unzip
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install
$ aws --version # 잘 출력된다면 정상 설치된 상태


- Ubuntu

ubuntu@ip-172-31-41-193:~$ sudo apt install unzip
Installing:                     
  unzip

Suggested packages:
  zip

Summary:
  Upgrading: 0, Installing: 1, Removing: 0, Not Upgrading: 39
  Download size: 181 kB
  Space needed: 430 kB / 4207 MB available

Get:1 http://ap-northeast-2.ec2.archive.ubuntu.com/ubuntu resolute/main amd64v3 unzip amd64 6.0-29ubuntu1 [181 kB]
Fetched 181 kB in 0s (6449 kB/s)
Selecting previously unselected package unzip.
(Reading database ... 85542 files and directories currently installed.)
Preparing to unpack .../unzip_6.0-29ubuntu1_amd64v3.deb ...
Unpacking unzip (6.0-29ubuntu1) ...
Setting up unzip (6.0-29ubuntu1) ...
Processing triggers for man-db (2.13.1-1build1) ...
Scanning processes...                                                                                                                                                                                              
Scanning linux images...                                                                                                                                                                                           

Running kernel seems to be up-to-date.

No services need to be restarted.

No containers need to be restarted.

No user sessions are running outdated binaries.

No VM guests are running outdated hypervisor (qemu) binaries on this host.
ubuntu@ip-172-31-41-193:~$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
  % Total    % Received % Xferd  Average Speed  Time    Time    Time   Current
                                 Dload  Upload  Total   Spent   Left   Speed
100 69.02M 100 69.02M   0      0 130.4M      0                              0
ubuntu@ip-172-31-41-193:~$ unzip awscliv2.zip
...
  inflating: aws/dist/prompt_toolkit-3.0.51.dist-info/licenses/LICENSE  
  inflating: aws/dist/prompt_toolkit-3.0.51.dist-info/licenses/AUTHORS.rst
ubuntu@ip-172-31-41-193:~$ sudo ./aws/install
You can now run: /usr/local/bin/aws --version
ubuntu@ip-172-31-41-193:~$ aws --version
aws-cli/2.34.63 Python/3.14.5 Linux/7.0.0-1004-aws exe/x86_64.ubuntu.26 # 잘 출력된다면 정상 설치된 상태



2. IAM 생성
1) IAM 사용자 생성
사용자 : 외부 리소스가 AWS 리소스에 접근하기 위한 권한 할당할 때 생성
-> AWS ECR 에 접근하기 위한 권한을 얻기 위해 생성

IAM 서비스에 들어가 액세스 관리 > IAM 사용자 메뉴 접속 후 "사용자 생성" 버튼 클릭

- 사용자 이름 : my-computer

"다음" 버튼 클릭

- 권한 옵션 : 직접 정책 연결
- 권한 정책 : AmazonEC2ContainerRegistryFullAccess 체크

"다음" 버튼 클릭

권한 요약 확인 후 "사용자 생성" 버튼 클릭

2) 보안 자격 증명에서 액세스 키 만들기
액세스 관리 > 사용자 메뉴 접속 후 my-computer 사용자를 클릭하여 보안 자격 증명 탭의 "액세스 키 만들기" 버튼 클릭

- 액세스 키 모범 사례 및 대안 : AWS 외부에서 실행되는 애플리케이션

"다음" 버튼 클릭 후 "액세스 키 만들기" 버튼 클릭

액세스 키, 비밀 액세스 키를 잘 메모하여 저장한다. 외부에 노출되지 않도록 주의한다.
이후 "완료" 버튼 클릭

3) AWS CLI로 액세스 키 등록
- Windows PowerShell

PS C:\Users\admin> aws configure

Tip: You can deliver temporary credentials to the AWS CLI using your AWS Console session by running the command 'aws login'.

AWS Access Key ID [None]: 액세스 키
AWS Secret Access Key [None]: 비밀 액세스 키
Default region name [None]: ap-northeast-2
Default output format [None]:


- Ubuntu

ubuntu@ip-172-31-41-193:~$ aws configure

Tip: You can deliver temporary credentials to the AWS CLI using your AWS Console session by running the command 'aws login'.

AWS Access Key ID [None]: 액세스 키
AWS Secret Access Key [None]: 비밀 액세스 키
Default region name [None]: ap-northeast-2
Default output format [None]:



3. AWS ECR(Elastic Container Registry) 셋팅
일반적으로 하나의 리포지토리에 한 종류의 이미지만 저장하고 관리

Elastic Container Registry 서비스에 들어가 프라이빗 레지스트리 > 리포지토리 메뉴 접속 후 "리포지토리 생성" 버튼 클릭

- 리포지토리 이름 : 984622551099.dkr.ecr.ap-northeast-2.amazonaws.com/docker-server

"생성" 버튼 클릭


4. 이미지 빌드해서 AWS ECR 에 Push, Pull
1) Dockerfile 작성
- docker-practice/Dockerfile

# FROM openjdk:17-jdk
FROM eclipse-temurin:17-jdk

ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]


2) 이미지 빌드 및 push
* 이미지 Push 할 때 어떤 명령어를 써야 하는지 가르쳐주는 위치
AWS ECR 의 생성한 리포지토리를 클릭하고 들어가서 "푸시 명령 보기" 버튼을 누르면, 어떻게 이미지를 Push 하면 되는지 친절하게 설명이 나와있다.

 

푸시 명령


- Windows PowerShell

cd .\docker-practice\
PS C:\Users\admin\docker-practice> aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 984622551099.dkr.ecr.ap-northeast-2.amazonaws.com
Login Succeeded
PS C:\Users\admin\docker-practice> docker build -t docker-server .
[+] Building 1.8s (6/6) FINISHED                                                                                                                                                            docker:desktop-linux
 => [internal] load build definition from Dockerfile                                                                                                                                                        0.0s
 => => transferring dockerfile: 134B                                                                                                                                                                        0.0s
 => [internal] load metadata for docker.io/library/eclipse-temurin:17-jdk                                                                                                                                   1.3s
 => [auth] library/eclipse-temurin:pull token for registry-1.docker.io                                                                                                                                      0.0s
 => [internal] load .dockerignore                                                                                                                                                                           0.0s
 => => transferring context: 2B                                                                                                                                                                             0.0s
 => CACHED [1/1] FROM docker.io/library/eclipse-temurin:17-jdk@sha256:b04a8c5d46e210873ffd1af6ad5f4d62c69ed3a6736993556eae60bba1373a23                                                                      0.0s
 => => resolve docker.io/library/eclipse-temurin:17-jdk@sha256:b04a8c5d46e210873ffd1af6ad5f4d62c69ed3a6736993556eae60bba1373a23                                                                             0.0s
 => exporting to image                                                                                                                                                                                      0.2s
 => => exporting layers                                                                                                                                                                                     0.0s
 => => exporting manifest sha256:f2d296410575aa20f08fbea0da548af91854b8ab4df7957a0f32c54d0b0f65f0                                                                                                           0.0s
 => => exporting config sha256:6b557b6dc8c1c0440753eef8a7a3e7fb600b7a7c0b0710b7d328e334a50eb547                                                                                                             0.0s
 => => exporting attestation manifest sha256:e0ff6e7f641ba1df7e074e4e3614d922b6476cf067112972d3c5365cd5e09acb                                                                                               0.1s
 => => exporting manifest list sha256:f184b309a56bc86f6e01441d9e866f7bfc8819df0e1d408b76b9b3645e422e76                                                                                                      0.0s
 => => naming to docker.io/library/docker-server:latest                                                                                                                                                     0.0s
 => => unpacking to docker.io/library/docker-server:latest                                                                                                                                                  0.0s

View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/r29m4pjkf0hv0691fv6h0w221
PS C:\Users\admin\docker-practice> docker tag docker-server:latest 984622551099.dkr.ecr.ap-northeast-2.amazonaws.com/docker-server:latest # 이렇게 이미지명 바꿔야 AWS ECR 에 올릴 수 있다.
PS C:\Users\admin\docker-practice> docker push 984622551099.dkr.ecr.ap-northeast-2.amazonaws.com/docker-server:latest
The push refers to repository [984622551099.dkr.ecr.ap-northeast-2.amazonaws.com/docker-server]
0179dfb07a7d: Pushed
1c24335ddd46: Pushed
1074d15b60c9: Pushed
f2355d8d10e0: Pushed
6f5c5aa4e145: Pushed
ce6347bc82f2: Pushed
a32c42059121: Pushed
latest: digest: sha256:f184b309a56bc86f6e01441d9e866f7bfc8819df0e1d408b76b9b3645e422e76 size: 856


docker tag 기존이미지명:태그명 바꿀이미지명:태그명 : 이미지명:태그명을 바꿈
docker push 이미지명:태그명 : 로컬 환경의 도커 이미지를 원격 레지스트리에 업로드

3) 이미지 pull 받기
- Windows PowerShell

PS C:\Users\admin\docker-practice> docker image ls
                                                                                                                                                                                             i Info →   U  In Use
IMAGE                                                                    ID             DISK USAGE   CONTENT SIZE   EXTRA
984622551099.dkr.ecr.ap-northeast-2.amazonaws.com/docker-server:latest   f184b309a56b        682MB          212MB    U
compose-nest-server-compose-nest-server:latest                           c50411fed584        2.1GB          502MB
compose-next-server-compose-next-server:latest                           4e26f54e6c8c       1.41GB          398MB
compose-spring-boot-server-my-server:latest                              51e8370f2b6d        806MB          271MB
compose-web-server-compose-web-server:latest                             c70bd0ddda1f        238MB         63.1MB
docker-server:latest                                                     f184b309a56b        682MB          212MB    U
my-jdk17-server:beta                                                     18e650b59b52        682MB          212MB
my-jdk17-server:latest                                                   09a2803e5d8e        682MB          212MB    U
my-node-server:latest                                                    9a1e49574c81       1.77GB          442MB    U
my-server:latest                                                         c8dad74bef6b        157MB         41.6MB    U
mysql:latest                                                             c11782aa2a96        1.3GB          290MB
nginx:latest                                                             5aca99593157        241MB           66MB
redis:latest                                                             4d25e2fe601f        204MB         55.3MB
PS C:\Users\admin\docker-practice> docker image rm -f $(docker images -q) # 기존 갖고있던 이미지 지우기
Untagged: compose-spring-boot-server-my-server:latest
Deleted: sha256:51e8370f2b6d2b8b074e610eaeaccccd84ab20c9a2dc6b612fc477060f219f20
Untagged: compose-web-server-compose-web-server:latest
Deleted: sha256:c70bd0ddda1fd80a66025f481768013f6bef02edacae3c5b5b5efa352f3db857
Untagged: compose-next-server-compose-next-server:latest
Deleted: sha256:4e26f54e6c8c2872c4fb1ffd8b91647b2ba614467c8e63a46154200ac55e94c4
Untagged: compose-nest-server-compose-nest-server:latest
Deleted: sha256:c50411fed584221e5a6532cc2b60cbd6693a25f3a3b2edefbf60037fe035c80f
Untagged: nginx:latest
Deleted: sha256:5aca99593157f4ae539a5dec1092a0ad8762f8e2eb1789085a13a0f5622369f6
Untagged: redis:latest
Deleted: sha256:4d25e2fe601f7ffaeb4437cb6ced3518bc36edf34ebe98863c80836943d94529
Untagged: my-server:latest
Deleted: sha256:c8dad74bef6b8db0c28fa7d01724f432e1f0cd68211891360c1d209e4d2bc374
Untagged: mysql:latest
Deleted: sha256:c11782aa2a96624c1efc121768641d96954faa136d6aa82751b032d8c426ffbc
Untagged: my-node-server:latest
Deleted: sha256:9a1e49574c81a560be2cf78e6f1dc9cd563603ff75fb4072d081332e87641cb6
Untagged: 984622551099.dkr.ecr.ap-northeast-2.amazonaws.com/docker-server:latest
Untagged: docker-server:latest
Deleted: sha256:f184b309a56bc86f6e01441d9e866f7bfc8819df0e1d408b76b9b3645e422e76
Untagged: my-jdk17-server:latest
Deleted: sha256:09a2803e5d8e5b527e84210244101dfdf945e6ae377415502201a403a67350d1
Untagged: my-jdk17-server:beta
Deleted: sha256:18e650b59b5262c26301011aba55222e10700bb83dbe84e35dff3ca856ffc728
Error response from daemon: No such image: f184b309a56b:latest
PS C:\Users\admin\docker-practice> docker image ls
                                                                                                                                                                                             i Info →   U  In Use
IMAGE   ID             DISK USAGE   CONTENT SIZE   EXTRA
PS C:\Users\admin\docker-practice> docker pull 984622551099.dkr.ecr.ap-northeast-2.amazonaws.com/docker-server:latest
latest: Pulling from docker-server
ce6347bc82f2: Download complete
Digest: sha256:f184b309a56bc86f6e01441d9e866f7bfc8819df0e1d408b76b9b3645e422e76
Status: Downloaded newer image for 984622551099.dkr.ecr.ap-northeast-2.amazonaws.com/docker-server:latest
984622551099.dkr.ecr.ap-northeast-2.amazonaws.com/docker-server:latest

What's next:
    View a summary of image vulnerabilities and recommendations → docker scout quickview 984622551099.dkr.ecr.ap-northeast-2.amazonaws.com/docker-server:latest
PS C:\Users\admin\docker-practice> docker image ls
                                                                                                                                                                                             i Info →   U  In Use
IMAGE                                                                    ID             DISK USAGE   CONTENT SIZE   EXTRA
984622551099.dkr.ecr.ap-northeast-2.amazonaws.com/docker-server:latest   f184b309a56b        682MB          212MB


docker pull 이미지명:태그명 : 원격 레지스트리에서 로컬 환경으로 도커 이미지 다운로드

해당 리포지토리의 이미지를 클릭하면, 이미지의 URI 를 복사하여 이미지명:태그명을 쉽게 가져올 수 있다.
다만, 이미지 이름이 길어서 어색해 보일 수 있다.


참고링크 : https://www.inflearn.com/course/%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-docker-%EC%9E%85%EB%AC%B8-%EC%8B%A4%EC%A0%84?cid=334085

 

비전공자도 이해할 수 있는 Docker 입문/실전| JSCODE 박재성 - 인프런 강의

현재 평점 4.9점 수강생 14,495명인 강의를 만나보세요. 비전공자 입장에서도 쉽게 이해할 수 있고, 실전에서 바로 적용 가능한 Docker 입문/실전 강의를 만들어봤습니다! Docker 기본 개념, Spring Boot를

www.inflearn.com

댓글