ㅍㅍㅋㄷ

AWS EC2 Container Registry(ECR) 어렵지 않아요 본문

IT/AWS

AWS EC2 Container Registry(ECR) 어렵지 않아요

클쏭 2016. 6. 20. 18:08

AWS EC2 Container Registry(ECR) 어렵지 않아요




 ECR (EC2 Container Registry) 은 Docker Container 의 이미지를 저장하는 Repository 서비스이다. 기능은 Docker hub 의 Repository 서비스와 동일하다. 특별한건 없다. Docker Private Repository 구축하고 관리 하는 수고를 AWS 에 맡기는 Managed 서비스일 뿐이다. 


 장점이라고 한다면,

 Container 이미지를 S3 에 저장하기 때문에 고가용성이 유지되고, AWS IAM 인증을 통해 이미지 push/pull 에 대한 권한 관리가 가능하다는 것이다. 

 

 하지만, 아직 Seoul 리전뿐 아니라 Tokyo 에서도 미지원 되고 있고 Virginia 나 Oregon, Ireland 에서만 가능하다. (2016.6.24 기준) 하지만 이미지를 push/pull 할때만 access 하기 때문에 리전이 멀더라도 큰 불편함은 없다. (어차피 Docker hub 도 해외에 있다. 체감상 차이 없다;)



이제 실제 ECR을 사용해 보자.

 




ECR 설정



1. 먼저 Virginia 리전(또는 Oregon, Ireland 리전) 에 접속한다. 




2. ECR 은 따로 메뉴가 있지 않고 ECS(EC2 Container Service) 하위 메뉴에 있다. ECS 메뉴로 go. 

    아마 처음 ECS 를 사용하면 아래와 같이 Wizard 로 연결된다. 일단 Get Started 클릭






3.  Wizard에서는 먼저 ECS(EC2 Container Service) 를 만들게끔 유도하는데 ECR 만 사용하려면 ECS 는 나중에 만들어도 된다. 일단 wizard 는 cancel 한다. 




4. Cancel 하고 나면 왼쪽 메뉴에서 Repositories 를 선택할 수 있다. Repositories 를 선택 후 Create 한다. 





5. Repository 이름을 지정후 Create 한다. 

    테스트로 repo-test 라는 이름으로 생성하였다.






6. 이제 Docker host 에서 ECR 로 이미지를 업로드할 수 있도록 설정을 해야한다. 

     먼저 Docker host 에 aws cli 툴을 설치하고 ECR 로 접근 할 수 있도록 user를 생성해 cli 에 설정해 주자. 


     user 명은 ecs_user 로 생성하였고, 아래와 같이 permission에 policy를 주었다. 

     ECR 만 쓰려면, AmazonEC2ContainerRegistryFullAccess Policy 만 적용해 주면 된다. 


    




7. docker host 에 aws cli를 설치한다. aws ecr 명령을 사용하려면 최신 cli 버전을 설치해야 한다. 최신 버전을 설치 하려면 pip 로 설치하면 된다. 


root@~~# pip install awscli


  ecr 을 사용할 수 있는지 확인하려면 아래와 같이 help 를 했을때 manual 이 나오는지 확인한다. 


 root@~~# aws ecr help




8. 이제 aws cli 에 access key 와 secret key 를 설정한다. 위에서 ecs_user 만들때 생성된 key 값을 넣어준다. 


root@~~# aws configure

AWS Access Key ID [None]: YOURACCESSKEY

AWS Secret Access Key [None]: YOURSECRETKEY

Default region name [None]: us-east-1 (virginia 로 가정)

Default output format [None]: json




9. aws cli 설정을 완료 했다면, 위에서 생성한 repository 에 접근할 수 있도록 설정한다. 먼저 ecr 에 login 한다. region 은 virginia 를 기준으로 us-east-1 로 하였다. 


root@~~# aws ecr get-login --region us-east-1

docker login -u AWS -p XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -e none https://XYZXYZXYZXYZ.dkr.ecr.us-east-1.amazonaws.com


 위와 같이 login 을 요청하면, 위에서 생성한 ECR repository에 접속할 수 있는 docker login 명령어를 암호화 키값과 함께 리턴해 준다. 이것을 그대로 복사해 repository 에 접속하도록 한다. 


root@~~# docker login -u AWS -p XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -e none https://XYZXYZXYZXYZ.dkr.ecr.us-east-1.amazonaws.com

Warning: '-e' is deprecated, it will be removed soon. See usage.

Login Succeeded


 위와 같이 Login 에 성공 했다는 메시지가 나오면 성공. 




10. 이제 image 를 ECR repository 에 업로드 해보자. 그러려면 docker host 의 Local 에 먼저 image 를 만든 후 이 image를 ECR Repository에 올려야 한다. 아래는 local 에 ubuntu image 가 있음을 가정 후 이 image 를 ECR 에 올리는 작업을 해보자.


root@~~# docker images

REPOSITORY                                                  TAG                 IMAGE ID            CREATED             SIZE

ubuntu                                                      latest              54060fb55e83        15 months ago       188.3 MB



먼저 이 ubuntu image 의 repository 정보를 ECR Repository URL 로 변경한다. 변경은 docker tag 명령을 이용하면 된다. 


root@~~# docker tag ubuntu:latest XYZXYZXYZXYZ.dkr.ecr.us-east-1.amazonaws.com/repo-test:latest



변경 후 image 정보를 다시 확인해 보면, 아래와 같이 image 의 repository 정보가 ECR Repository URL로 변경된 것을 확인할 수 있다. 


root@~~# docker images

REPOSITORY                                                  TAG                 IMAGE ID            CREATED             SIZE

XYZXYZXYZXYZ.dkr.ecr.us-east-1.amazonaws.com/repo-test      latest              54060fb55e83        15 months ago       188.3 MB



이제 image 를 ECR repository로 업로드 하자. 

업로드 명령은 docker push 를 사용한다. 


root@~~# docker push XYZXYZXYZXYZ.dkr.ecr.us-east-1.amazonaws.com/repo-test:latest

The push refers to a repository [XYZXYZXYZXYZ.dkr.ecr.us-east-1.amazonaws.com/repo-test]

5f70bf18a086: Pushed 

e8061ac24ae3: Pushed 

3c84ae1bbde2: Pushed 

8ceab61e5aa8: Pushing [===============>                                   ] 56.58 MB/188.1 MB


위와 같이 image 가 upload 되는 것을 볼 수 있다. 

이제 AWS console 을 통해 업로드된 image를 확인해 보자.



위와 같이 repo-test 에 latest 로 tag된 image 가 업로드된 것을 볼 수 있다. 




11. ECR 에 있는 image 를 dokcer host 에 내려 받으려면 아래와 같이 이용하면 된다. 


root@~~# docker pull XYZXYZXYZXYZ.dkr.ecr.us-east-1.amazonaws.com/repo-test:latest





[ 참고 ]


  • http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_Console_Repositories.html


Comments