Post

[AWS] ECR에 이미지 올리고 컨테이너 실행

📌 들어가며

이번 글에서는 AWS의 ECR(Elastic Container Registry)에 컨테이너 이미지를 올리고, 다시 내려받아 실행하는 전체 흐름을 실습한다. Dockerfile 작성 → 이미지 빌드 → ECR push → pull & run의 컨테이너 배포 사이클을 다룬다.

ECR이란? 컨테이너 이미지와 아티팩트를 저장·관리·공유·배포할 수 있는 완전 관리형 컨테이너 레지스트리. Docker Hub의 AWS 버전이라고 보면 되며, 자체 레지스트리 인프라를 운영할 필요 없이 고가용 아키텍처에서 이미지를 안정적으로 배포한다.


1. 전체 흐름

로컬(Cloud9)에서 만든 이미지를 ECR에 올리고, 어디서든 그 이미지를 받아 컨테이너로 실행한다.

flowchart LR
    Dockerfile["📄 Dockerfile"] --> Build["🔨 image build"]
    Build --> Login["🔑 ecr login"]
    Login --> Tag["🏷️ image tag"]
    Tag --> Push["⬆️ push → ECR"]
    Push --> Registry[("📦 ECR")]
    Registry --> Run["▶️ pull & run"]

2. Dockerfile 만들기

먼저 AWS Cloud9 콘솔에서 작업 폴더를 만들고, 정적 웹 자료(index.html + 이미지)를 tar로 압축한다.

1
2
3
4
5
$ sudo mkdir dockerfile-lab && cd $_
$ sudo cp ~/index.html .
$ sudo mkdir images
$ sudo cp ~/two-rabbit.jpg ./images
$ sudo tar -cvf web-site-v1.tar index.html images/    # 웹 자료 압축

이어서 nginx 웹 서버 이미지를 만드는 Dockerfile을 작성한다.

1
2
3
4
FROM ubuntu:latest                          # 베이스 이미지
RUN apt update && apt install -y -q nginx   # nginx 설치
ADD web-site-v1.tar /var/www/html           # ADD는 tar 압축 해제 포함
CMD ["nginx", "-g", "daemon off;"]          # 컨테이너 실행 명령
Dockerfile 명령역할
FROM베이스 이미지 지정
RUN빌드 시 실행할 명령(패키지 설치 등)
ADD파일 복사(+ tar 자동 해제)
CMD컨테이너 시작 시 실행할 명령

이미지를 빌드하고 컨테이너로 실행해 확인한다.

1
2
$ docker image build -t web-site:v1.0 ./
$ docker container run -d -p 80:80 --name webserver web-site:v1.0

Untitled

⚠️ Cloud9 인스턴스의 보안 그룹에서 80 포트를 열어야 브라우저로 접속해 확인할 수 있다.


3. ECR 레포지토리 생성

ECS → ECR → 퍼블릭 레포에서 레포지토리를 생성하고, 생성된 레포 URI(ID)를 확인한다.

Untitled

Untitled


4. 이미지 태깅 & Push

ECR에 로그인 → 이미지 태그(레포 URI로 이름 변경) → push의 순서로 올린다.

1
2
3
4
5
6
7
8
9
10
11
# ① 로그인 (인증 토큰 → docker login)
$ aws ecr-public get-login-password --region us-east-1 \
  | docker login --username AWS --password-stdin public.ecr.aws/h8y2y3u1

# ② 기존 이미지를 ECR 레포 URI로 태깅
$ docker image tag web-site:v1.0 public.ecr.aws/h8y2y3u1/web-site:v1.0
$ docker image tag web-site:v2.0 public.ecr.aws/h8y2y3u1/web-site:v2.0

# ③ ECR에 push
$ docker image push public.ecr.aws/h8y2y3u1/web-site:v1.0
$ docker image push public.ecr.aws/h8y2y3u1/web-site:v2.0

Untitled

💡 push하려면 이미지 이름이 반드시 레지스트리주소/레포:태그 형식이어야 한다. 그래서 로컬 이미지(web-site:v1.0)를 곧바로 push할 수 없고, docker tag로 ECR URI를 붙인 이름으로 다시 태깅한 뒤 올린다.


5. ECR 이미지로 컨테이너 실행

push된 이미지를 받아 새 컨테이너로 실행한다.

1
2
$ docker container run -d -p 8080:80 --name webserver2 \
  public.ecr.aws/h8y2y3u1/web-site:v2.0

📝 정리

1
2
3
4
5
6
ECR 배포 사이클
├─ 빌드   Dockerfile → docker image build
├─ 로그인 aws ecr-public get-login-password | docker login
├─ 태깅   docker tag → 레지스트리/레포:태그
├─ Push   docker push → ECR 저장
└─ 실행   docker run (ECR URI 이미지)
개념한 줄 정의
ECRAWS 관리형 컨테이너 레지스트리
tag이미지에 ECR URI 이름 부여
push/pull레지스트리에 올리고 받기

ECR은 컨테이너 이미지의 중앙 저장소다. 핵심은 로그인 → URI로 태깅 → push 순서이며, 이렇게 올린 이미지는 어느 환경에서든 pull해서 동일하게 실행할 수 있다.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.