개인 docker hub에서 벗어나 공동으로 관리하는 cloud docker image hub 구성이 목표
cli 환경 내에서 docker image를 ECR에서 관리할 수 있도록 구성
IAM을 인증과정을 거쳐 ECR 서비스 이용 가능
docker에 aws 계정 인증과정을 추가하면 직접 ECR 접근 가능
ubuntu 20.04 lts
docker 설치됨
AWS ECR 서비스 접속
생성할 때 private/public 여부 선택 및 이름 작성
기타 옵션들 설정 후 생성
생성 완료!
.
.
.
기존의 사용자나 새로 생성한 IAM에 AmazonEC2ContainerResistry...
관련된 권한중 필요한 권한 부여
기존의 엑세스 키를 사용하거나 새로 생성
.
.
.
$ sudo apt install awscli
(aws 서비스에 대한 명령어 사용을 위해 설치)
$ sudo apt install amazon-ecr-credential-helper
(ecr 인증을 위한 모듈)
~/.docker/config.json
파일에 아래에 맞게 작성 (파일 존재하지 않으면 새로 생성)
docker version 1.13.0 미만인 경우
{ "auths" : { "credsStore": "ecr-login" } }
docker version 1.13.0 이상인 경우
public과 각 계정에 대한 인증을 다르게 설정 가능{ "auths" : { "credHelpers": { "public.ecr.aws": "ecr-login", "<aws_account_id>.dkr.ecr.<region>.amazonaws.com": "ecr-login" } } }
$ aws configure
명령어 실행 > 계정의 default 옵션 설정
AWS Access key ID / AWS Secret access key / region name / output format 설정
앞의 2개 옵션은 ~/.aws/credentials
에 뒤의 2개 옵션은 ~/.aws/config
에 저장됨
aws cli version 1.17.10 이전
$ aws ecr get-login --region <region> --no-include-email
aws cli version 1.17.10 이후
$ aws ecr get-login-password --region <region>
명렁어 이후 출력되는 텍스트를 복사 붙여넣기로 작성
$ docker login -u AWS -p XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX https://[user_specific_uri].dkr.ecr.[region_name].amazonaws.com
Login Succeeded
해당 결과 출력되면 성공
.
.
에러 케이스
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
현재 입력한 로그인 값이 파일에 저장되는 것에 대한 에러
(저장을 원하지 않을 경우 로그인시 -p대신 --password-stdin 옵션을 이용)
.
.
.
파일에 값을 저장한 이후 ~/.docker/config.json
파일을 열어보면 값이 변경되어 있는것을 확인 가능
.
.
.
$ docker images
통해 로컬의 docker image 확인
image 리스트 중 push 원하는 docker image 찾은 후에 tagging
$ docker tag <docker_image_id 또는 repository:tag> <aws_account_id>.dkr.ecr.<region>.amazonaws.com/<my-repository:tag>
(git의 commit 같은 느낌으로 생각하면 좋음)
image push
$ docker push <aws_account_id>.dkr.ecr.<region>.amazonaws.com/<my-repository:tag>
이후 AWS ECR내의 push한 repository안에 image가 저장된 것을 확인할 수 있음
$ docker pull <aws_account_id>.dkr.ecr.<region>.amazonaws.com/<my-repository:tag>
$ docker images
로 확인해보면 해당 image pull 된 것 확인 가능