본문 바로가기
Amazon AWS/ECS

도커 이미지를 빌드해서 ECR에 Push 하기

by 홍띠 2022. 9. 25.

회사에서 AWS 서비스 내에서 도커 이미지가 필요한 경우 대부분 저장소로써 AWS ECR(Elastic Container Registry)에 저장해 놓고 불러서 쓴다. 이번에 AWS Batch를 이용하기 위해 도커 이미지를 빌드해서 사용해야 해서 그 과정을 기록해 놓으려 한다.


원하는 도커 이미지를 빌드해보자.

이번에는 AWS Batch에서 주기적으로 JAR 파일을 실행할 수 있도록 하는 이미지가 필요 했다. 

JAR 파일을 실행하기 위해서는 JAVA 설치가 필요했고, JAR파일을 다운받을 수 있도록 S3 접근이 가능해야 했다.

 

1. Dockerfile 작성

FROM amazonlinux:2
RUN \
	yum update -y && \
# java-11-amazon-corretto : 아마존 리눅스 용 자바 설치
	yum install -y which unzip curl java-11-amazon-corretto &&\
# AWS CLI 설치
	curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \
	unzip awscliv2.zip && \
	./aws/install
ADD demo-build.sh /usr/local/bin/demo-build.sh
ENTRYPOINT ["/usr/local/bin/test.sh"]

 

2. 도커파일에서 실행 될 실행 스크립트 작성

#!/bin/bash

JAR_S3_URL="s3://bucketname/"
JAR_FILE_NAME="filename.jar"
JAR_DIR="~/jar directory in docker/"

# Check that necessary programs are available
which unzip >/dev/null 2>&1 || echo "Unable to find unzip executable."
which curl >/dev/null 2>&1 || echo "Unable to find curl executable."
which java >/dev/null 2>&1 || echo "Unable to find java executable."

# Check aws cli available
which aws >/dev/null 2>&1 || echo "Unable to find AWS CLI executable."

#download jar file from S3
aws s3 cp ${JAR_S3_URL}${JAR_FILE_NAME} ${JAR_DIR} || echo "Failed to download jar file from $JAR_S3_URL$JAR_FILE_NAME"
ls ${JAR_DIR}
#run jar file
java -cp ${JAR_DIR}${JAR_FILE_NAME} ${CLASS_PATH}

3. 도커 이미지 빌드

이때!! 도커파일과 실행스크립트가 같이 위치한 디렉토리에서 빌드해주어야 한다.

#파일 확인
$ ls
Dockerfile  demo-build.sh
#이미지 빌드
#docker build -t <레지스트리 URI/레포지토리이름:tag> .
$ docker build -t <aws_account_id>.dkr.ecr.<region>.amazonaws.com/<repository>:<tag> .
만약, 준비된 레포지토리가 없다면 아래 AWS CLI명령어를 이용해서 새로 생성해준다.
aws ecr create-repository \
--repository-name <repository name> \
--image-scanning-configuration scanOnPush=true \
--region <AWS_REGION>​

빌드한 이미지를 레지스트리에 Push 한다.

위에서 빌드 할때부터 ECR의 형식에 맞도록 태그를 지정하여 빌드 하였으므로, 바로 빌드 된 이미지를 업로드 할 수 있다.

 

4. 이미지 푸시를 위한 ECR 로그인

여기서 username은 개인 유저이름이 아닌 AWS로 작성해야 한다!

$ aws ecr get-login-password --region <AWS_REGION> | docker login --username AWS --password-stdin <ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com

5. 빌드한 이미지를 ECR에 Push

$ docker push <ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/<Repository name>:<tag>

'Amazon AWS > ECS' 카테고리의 다른 글

ECR 레포지토리의 이미지를 로컬에서 가져오기  (0) 2022.07.10