Amazon ECR은 관리형 컨테이너 이미지 레지스트리 서비스
IAM 권한을 이용하여 리소스 기반 권한을 가진 프라이빗 레포지토리를 지원하여 EC2 인스턴스가 컨테이너 레포지토리 및 이미지에 접근할 수 있다
이 포스트에서는 Ubuntu 환경에서의 Docker 설치를 수행한다
만약 다른 OS를 사용중이라면 위에 있는 도커 공식문서를 참고하자
충돌 가능한 패키지들 uninstall
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
Docker's apt
repository를 사용하여 set up
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
Docker package 설치(최신버전)
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
EC2 인스턴스(Ubuntu)에서 도커 이미지 생성하여 테스트
로컬에서 Dockerfile 생성
FROM ubuntu:latest
# Install dependencies
RUN apt-get update -y && \
apt-get install -y apache2
# Install apache and write hello world message
RUN echo 'Hello World!' > /var/www/html/index.html
# Configure apache
RUN echo 'mkdir -p /var/run/apache2' >> /root/run_apache.sh && \
echo 'mkdir -p /var/lock/apache2' >> /root/run_apache.sh && \
echo '/usr/sbin/apache2ctl -D FOREGROUND' >> /root/run_apache.sh && \
chmod 755 /root/run_apache.sh
EXPOSE 80
CMD /root/run_apache.sh
docker build
명령어를 사용하여 도커 이미지 빌드
docker build -t hello-world .
docker image
명령어로 생성된 이미지 확인
docker images --filter reference=hello-world
docker run
명령어로 빌드된 이미지 실행
docker run -t -i -p 80:80 hello-world
AWS CLI 설치 후, 기본 registry에 대해 Docker CLI 인증 필요
registry 인증이 완료되어야 ECR을 통해 이미지를 푸시하고 가져올 수 있음
aws ecr get-login-password
명령어를 실행하여 인증
get-login-password(AWS CLI)
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin {aws_account_id}.dkr.ecr.ap-northeast-2.amazonaws.com
region, aws_account_id 은 환경에 맞게 입력
푸시할 이미지를 저장할 repository를 생성
aws ecr create-repository \
--repository-name hello-repository \
--region ap-northeast-2
repository 이름, region 등은 환경에 맞게 입력
Docker CLI를 통해 ECR에 이미지 푸시 시 만족해야 하는 조건
repository에 푸시할 이미지에 태그 지정
docker tag hello-world:latest {aws_account_id}.dkr.ecr.ap-northeast-2.amazonaws.com/hello-repository
이미지 푸시
docker push {aws_account_id}.dkr.ecr.ap-northeast-2.amazonaws.com/hello-repository
docker pull {aws_account_id}.dkr.ecr.ap-northeast-2.amazonaws.com/hello-repository:latest
aws ecr batch-delete-image \
--repository-name hello-repository \
--image-ids imageTag=latest \
--region ap-northeast-2
aws ecr delete-repository \
--repository-name hello-repository \
--force \
--region ap-northeast-2
permission denied while trying to connect to the Docker daemon socket at unix
위와 같은 에러 발생 시 다음 명령어를 통해 사용자를 docker group에 포함시킨다
$ sudo usermod -a -G docker $USER
시스템 재구동 시 id
명령어를 입력하면 docker 가 추가된 모습을 볼 수 있다
ECR의 권한 토큰 발급을 위해 IAM 권한에 AmazonEC2ContainerRegistryFullAccess 이 필요