회사에서 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 |
---|