Nginx Dockerfile을 arm64로 ECR에 배포하는 방법
ARM64 아키텍처의 Nginx 이미지를 생성하여 AWS ECR에 배포하는 방법은 다음과 같음.
ARM64 지원을 위해 Docker의 multi-platform 빌드 기능을 활용함.
Dockerfile 작성
Nginx 이미지를 기반으로 Dockerfile을 작성함.
# Base image
FROM nginx:1.21
# Copy custom configuration (optional)
COPY nginx.conf /etc/nginx/nginx.conf
# Expose port 80
EXPOSE 80
# Start nginx
CMD ["nginx", "-g", "daemon off;"]
빌드 환경 설정
ARM64 아키텍처 이미지를 생성하려면 Docker의 Buildx 플러그인을 사용해야 함.
1. Buildx 활성화
docker buildx create --use
docker buildx inspect --bootstrap
2. 빌드 환경 확인
docker buildx ls
Buildx가 활성화된 빌더가 표시되어야 함.
AWS ECR 리포지토리 생성
AWS CLI를 사용해 ECR 리포지토리를 생성함.
aws ecr create-repository --repository-name my-nginx-repo
생성 후 리포지토리 URI를 확인함.
<account-id>.dkr.ecr.<region>.amazonaws.com/my-nginx-repo
멀티플랫폼 빌드 및 태그
Docker Buildx를 사용하여 ARM64 아키텍처용 이미지를 생성하고 ECR 리포지토리 URI에 맞게 태그를 지정함.
이미지 빌드
docker buildx build \
--platform linux/arm64 \
-t <account-id>.dkr.ecr.<region>.amazonaws.com/my-nginx-repo:latest \
--push .
1. --platform: 타겟 플랫폼 지정. 여기서는 linux/arm64.
2. --push: 빌드한 이미지를 직접 ECR에 푸시.
AWS CLI로 ECR 로그인
ECR 푸시를 위해 Docker 인증을 설정함.
aws ecr get-login-password \
--region <region> \
| \
docker login --username AWS \
--password-stdin <account-id>.dkr.ecr.<region>.amazonaws.com
확인
ECR 콘솔에 접속하여 ARM64 아키텍처 이미지가 업로드되었는지 확인함.
전체 예제 스크립트
build_and_push_arm64.sh
#!/bin/bash
# 변수 설정
REPO_NAME="my-nginx-repo"
REGION="us-east-1"
ACCOUNT_ID=$(aws sts get-caller-identity --query "Account" --output text)
REPO_URI="$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/$REPO_NAME"
# 리포지토리 생성 (이미 존재하면 무시)
aws ecr describe-repositories --repository-names $REPO_NAME --region $REGION > /dev/null 2>&1 || \
aws ecr create-repository --repository-name $REPO_NAME --region $REGION
# 도커 로그인
aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin $REPO_URI
# Buildx 활성화
docker buildx create --use
docker buildx inspect --bootstrap
# 멀티 플랫폼 빌드 및 푸시
docker buildx build \
--platform linux/arm64 \
-t $REPO_URI:latest \
--push .
echo "ARM64 이미지 푸시 완료: $REPO_URI:latest"
실행
chmod +x build_and_push_arm64.sh
./build_and_push_arm64.sh
참고사항
1. Cross-Compilation 지원
ARM64 환경에서 테스트하려면 실제 ARM64 하드웨어나 에뮬레이터(QEMU)가 필요할 수 있음.
Docker Desktop에는 기본적으로 QEMU가 포함되어 있어 추가 설정 없이 빌드가 가능함.
2. Nginx 버전 확인
사용하는 Nginx 이미지가 ARM64 아키텍처를 지원하는지 확인해야함.
대부분의 최신 Nginx 공식 이미지는 다중 아키텍처를 지원함.
'Operating System > Kubernetes' 카테고리의 다른 글
[Kubernetes] 쿠버네티스 인그레스의 PathType (0) | 2024.12.26 |
---|---|
[Kubernetes] 쿠버네티스 인그레스 개념 (0) | 2024.12.26 |
[Kubernetes] Liveness, Readiness, Startup Probe 정리 (0) | 2024.12.26 |
[Kubernetes] k8s, 파드란? (0) | 2024.12.26 |
[Kubernetes] k8s, 서비스 유형 종류 (0) | 2024.12.24 |