Cloud AWS, Azure, GCP

AWS 인프라 구축 실습 13회 - ECR

SB리치퍼슨 2021. 12. 15. 18:50

AWS 인프라 구축 실습 13회 - ECR

이번 시간에 실습할 내용은 ECR (Elastic Container Registies)입니다.
다음에는 ALB에서 Auto Scaling을 연동해서 실습해 보겠습니다.

준비사항
1. Route53 도메인 : sbrich.shop
2. VPC "default-vpc"
3. subnet : "Default-PublicSubnet-2a", "Default-PublicSubnet-2b", "Default-PublicSubnet-2a", "Default-PublicSubnet-2d"
4. 보안그룹 : SG-DOCKER

실습과정


1. 퍼블릭 레파지토리 등록
2. EC2 도커 호스트 및 AWS CLI 설치
3. 도메인 레코드 생성
4. docker container 생성
5. docker image build
6. AWS 자격증명
7. ECR push



1. 퍼블릭 레파지토리 등록

AWS의 ECS(Amazon Elastic container Service) 페이지로 이동합니다. 왼쪽 메뉴에서 '리포지토리'를 클릭합니다.


'리포지토리'페이지에서 'Public'탭을 클릭합니다. 그리고 '리포지토리 생성' 버튼을 클릭합니다.

리포지토리 이름을 'sbrich'로 입력하고 리포지토리 생성을 클릭합니다.

생성되었습니다.

'sbrich' 라디오 버튼 클릭 후 '푸시 명령 보기'를 클릭합니다.

팝업창이 오픈됩니다.

명령어 3가지를 복사해둡니다.

이미지빌드 푸시 : docker build -t sbrich .
빌드리포지토리 푸시 : docker tag sbrich:latest public.ecr.aws/l1t2e8u9/sbrich:latest
aws리포지토리 푸시 : docker push public.ecr.aws/l1t2e8u9/sbrich:latest

 


2. EC2 도커 호스트 및 AWS CLI 설치

도커 호스트용으로 EC2 인스턴스를 생성합니다.
EC2메뉴로 이동합니다. EC2 '인스턴스 시작'을 클릭합니다.

단계 1: Amazon Machine Image(AMI) 선택
  AMI는 Amazon Linux 2 AMI를 선택합니다.

단계 2: 인스턴스 유형 선택
  t2.micro를 선택합니다.

단계 3: 인스턴스 세부 정보 구성
  VPC는 'default-vpc'를 선택하고 서브넷은 'Default-PublicSubnet-2a'를 선택합니다. 퍼블릭IP자동할당은 '활성화'를 선택하고 사용자데이터는 아래와 같이 입력합니다.

...

단계 4: 스토리지 추가
  8GiB를 입력합니다.

단계 5: 태그 추가
  태그는 'docker'로 입력합니다.

단계 6: 보안 그룹 구성
  보안그룹은 'SG-DOCKER'로 SSH 유형으로 소스는 '위치무관'으로 합니다.

단계 7: 인스턴스 시작 검토
  문제가 없다면 시작하기를 클릭합니다.

기존 키 페어 선택 또는 새 키 페어 생성
키페어를 새로만들거나 선택합니다. 실습에서는 기존에 생성한 키페어를 이용합니다.

인스턴스가 생성되었습니다.


3. 도메인 레코드 생성

Route 53으로 이동하여 호스팅 영역 'sbrich.shop'에 대하여 퍼블릭IP 주소를 입력하고 'docker' 레코드를 생성합니다. 

레코드가 생성되었습니다.

 


4. docker container 생성

생성한 EC2 인스턴스에 SSH로 접속하여 컨테이너를 생성합니다.
ssh 연결정보는 다음에서 복사합니다.

Mac에서 터미널을 실행해서 키페어가 있는 곳으로 이동하거나 현재 경로에 키페어를 복사합니다. 그래야 접속명령이 간단합니다.

docker 를 생성하고 버전을 확인합니다.

aws --version 으로 ver 2 이상 인지 확인

aws 버전이 '2.4.1'이네요
이제 컨테이너를 생성합니다.
$ "docker container run -d -p 80:80 --name webserver nginx"

webserver 컨테이너에 디폴트 웹페이지를 생성합니다.

docker container exec -it webserver /bin/bash
echo 'my-nginx' > /usr/share/nginx/html/index.html
exit

5. docker image build

dockerfile을 만들고 docker image build 명령어로 image 파일 생성합니다. 
이미지 파일을 버전1과 버전2 로 만들어 봅니다.

$ mkdir dockerfile-lab && cd $_
$ vi Dockerfile
FROM nginx:latest
COPY index.html /usr/share/nginx/html/

$ echo 'my-nginx' > index.html

$ docker image build -t my-nginx:v1.0 .
$ docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
my-nginx     v1.0      51aaa6722c3c   4 minutes ago   141MB
nginx        latest    ea335eea17ab   7 days ago      141MB
$ docker container run -d -p 80:80 --name webserver my-nginx:v1.0
$ docker container ls
CONTAINER ID   IMAGE           COMMAND                  CREATED         STATUS         PORTS                               NAMES
e69710ae27c9   my-nginx:v1.0   "/docker-entrypoint.…"   8 seconds ago   Up 7 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   webserver
$ docker container rm -f webserver

$ vi Dockerfile
FROM nginx:latest
COPY html /usr/share/nginx/html

$ cp -r ../html .

$ docker image build -t my-nginx:v2.0 .
$ docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
my-nginx     v2.0      e3339ce0cacc   2 hours ago   142MB
my-nginx     v1.0      51aaa6722c3c   2 hours ago   141MB
nginx        latest    ea335eea17ab   7 days ago    141MB
$ docker container run -d -p 80:80 --name webserver my-nginx:v2.0
$ docker container ls
CONTAINER ID   IMAGE           COMMAND                  CREATED       STATUS       PORTS                               NAMES
fe6aacf09a30   my-nginx:v2.0   "/docker-entrypoint.…"   2 hours ago   Up 2 hours   0.0.0.0:80->80/tcp, :::80->80/tcp   webserver

 


6. AWS 자격증명

Docker Machine을 사용하여 정의를 해두면 자격증명을 유지하거나 로드하여 사용할 수 있습니다. 연재 이외에 기회가 되면 스핀오프로로 포스팅을 하겠습니다.
EC2 ssh 연결 후 cli 상태에서 aws cli 로그인을 합니다.
기존에 등록된 사용자가 있어서 그 사용자의 ascces key, secret key, region 을 이용하여 자격증명을 하겠습니다.
$ aws configure

$ aws configure
AWS Access Key ID [None]: 사용자액세스키
AWS Secret Access Key [None]: 사용자비밀키
Default region name [None]: ap-northeast-2
Default output format [None]: json
$ aws s3 ls

 


7. ECR push

이제 aws에 로그인 합니다.
(리전을 ap-northeast-2 --> us-east-1 로 변경하고 아래걸로 로그인이 되었습니다)
$ aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/b3h1g9o6
sbrich 도커 이미지 빌드 : docker build -t sbrich .
sbrich 빌드리포지토리 푸시 : docker tag sbrich:latest public.ecr.aws/l1t2e8u9/sbrich:latest
sbrich AWS 리포지토리 푸시 : docker push public.ecr.aws/l1t2e8u9/sbrich:latest

# AWS 로그인
$ aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/l1t2e8u9

# 이미지 빌드
$ docker build -t sbrich .
Sending build context to Docker daemon    577kB
Step 1/2 : FROM nginx:latest
 ---> ea335eea17ab
Step 2/2 : COPY html /usr/share/nginx/html
 ---> Using cache
 ---> e3339ce0cacc
Successfully built e3339ce0cacc
Successfully tagged sbrich:latest

# 이미지에 태그를 지정하여 이 리포지토리에 푸시
$ docker tag sbrich:latest public.ecr.aws/l1t2e8u9/sbrich:latest

# 이미지를 새로 생성한 AWS 리포지토리로 푸시
$ docker push public.ecr.aws/l1t2e8u9/sbrich:latest
The push refers to repository [public.ecr.aws/l1t2e8u9/sbrich]
2a11a11893b8: Pushed 
8525cde30b22: Pushed 
1e8ad06c81b6: Pushed 
49eeddd2150f: Pushed 
ff4c72779430: Pushed 
37380c5830fe: Pushed 
e1bbcf243d0e: Pushed 
latest: digest: sha256:d75e0d5590f90129aaf064a7c6aade52a49d2eb07065ad10dd2aa2795944ee58 size: 1780

이미지를 AWS 리포지토리로 푸시한 후의 퍼블릭 리포지토리를 리프레시해서 결과를 확인합니다.

이미지 상세정보입니다.

- ECR 이미지로 컨테이너 실행
  도커 이미지를 등록한 퍼블릭 ECR로부터 다운받아서 EC2 인스턴스로 다운받아 설치하는 방법입니다.

$ docker container run -d -p 80:80 --name webserver public.ecr.aws/l1t2e8u9/sbrich:latest

 



AWS 인프라 구축 실습 13회 - ECR에 대하여 실습해 보았습니다. 다음 과정에서는 ECS에 대하여 실습해 보도록 하겠습니다.

반응형