-
[udemy] Azure Container Registry for AKSkubernetes/udemy 2025. 2. 26. 10:22
Azure container Registry
Docker image 빌드 후,
이를 ACR에 push해서 해당 이미지로 컨테이너까지 배포해보자
사전 작업
# AKS 자격증명 획득
az aks get-credentials --name <aks 명> --resource-group <리소스 그룹명>
# ACR 생성 후 연결
az aks update --name <aks 명> --resource-group <리소스 그룹명> --attach-acr <acr 명>
Docker image 생성
먼저, 이미지를 생성하기 위한 Dockerfile과 index.html 파일을 작성하자.
docker-manifests 폴더 내에 파일을 작성한다.
# docker-manifests 폴더 생성
mkdir docker-manifests cd docker manifests
# Dockerfile 파일 작성
vi Dockerfile
FROM nginx COPY index.html /usr/share/nginx/html
# index.html 파일 작성
vi index.html
<!DOCTYPE html> <html> <body style="background-color:rgb(127, 178, 210);"> <h1>Welcome to Stack Simplify - Azure Container Registry (ACR)</h1> <h2>Build and Push Image from Local Docker Desktop to ACR</h2> <p>Application Version: V1</p> </body> </html>
# Docker image 빌드
docker build -t kube-nginx-acr:v1 .
# Docker image 생성 확인
docker images --- REPOSITORY TAG IMAGE ID CREATED SIZE kube-nginx-acr v1 c30ee20a0a6a 3 minutes ago 192MB
# 해당 image로 컨테이너 실행
docker run --name kube-nginx-acr --rm -p 80:80 -d kube-nginx-acr:v1 1a0d145e1b28120684b35650518225f7601ec5db98ae7cad3a0a6bd03a0db179
kube-nginx-acr 컨테이너를 80포트로 실행한다. (kube-nginx-acr:v1 image 사용)
# 컨테이너 확인
http://localhost
컨테이너가 정상적으로 실행되었다.
# 컨테이너 중단
docker stop kube-nginx-acr
Docker image를 ACR로 push
# ACR > 설정 > 액세스 키의 관리 사용자 활성화
ACR > 설정 > 액세스 키의 관리 사용자 활성화 후
사용자 이름과 password를 기록해둔다.
# 환경 변수 지정
export ACR_REGISTRY=serahpacr.azurecr.io export ACR_NAMESPACE=app1 export ACR_IMAGE_NAME=kube-nginx-acr export ACR_IMAGE_TAG=v1 echo $ACR_REGISTRY, $ACR_NAMESPACE, $ACR_IMAGE_NAME, $ACR_IMAGE_TAG
# Docker 명령어를 통해 ACR에 로그인
docker login $ACR_REGISTRY
로그인 후, 사용자는 ACR에 이미지를 푸시하거나 풀 수 있는 권한을 가지게 된다.
여기서 Username은 ACR 액세스 키의 사용자 이름, Password는 ACR 액세스 키의 패스워드를 입력한다.
# Docker tag
docker tag kube-nginx-acr:v1 $ACR_REGISTRY/$ACR_NAMESPACE/$ACR_IMAGE_NAME:$ACR_IMAGE_TAG
kube-nginx-acr:v1 이미지를 $ACR_REGISTRY/$ACR_NAMESPACE/$ACR_IMAGE_NAME:$ACR_IMAGE_TAG 형식의 새로운 태그로 지정하게 됩니다.
# 확인
docker images $ACR_REGISTRY/$ACR_NAMESPACE/$ACR_IMAGE_NAME:$ACR_IMAGE_TAG REPOSITORY TAG IMAGE ID CREATED SIZE serahpacr.azurecr.io/app1/kube-nginx-acr v1 c30ee20a0a6a 38 minutes ago 192MB
# Docker image를 ACR로 push
docker push $ACR_REGISTRY/$ACR_NAMESPACE/$ACR_IMAGE_NAME:$ACR_IMAGE_TAG
# ACR에서 확인
정상적으로 Docker image가 ACR에 push 된 것을 확인할 수 있다.
ACR에 있는 이미지를 활용하여 샘플 애플리케이션 배포
# 01-acr-Deployment.yaml 파일 작성
apiVersion: apps/v1 kind: Deployment metadata: name: acrdemo-localdocker-deployment labels: app: acrdemo-localdocker spec: replicas: 1 selector: matchLabels: app: acrdemo-localdocker template: metadata: labels: app: acrdemo-localdocker spec: containers: - name: acrdemo-localdocker image: serahpacr.azurecr.io/app1/kube-nginx-acr:v1 imagePullPolicy: Always ports: - containerPort: 80
acr에 있는 image를 불러와 컨테이너 배포를 할 것이기 때문에
image 값을 변경해준다.
# 02-acr-LoadBalancer-Service.yaml 파일 작성
apiVersion: v1 kind: Service metadata: name: acrdemo-localdocker-service labels: app: acrdemo-localdocker spec: type: LoadBalancer selector: app: acrdemo-localdocker ports: - port: 80 targetPort: 80
# 생성
kubectl apply -f 01-acr-Deployment.yaml
kubectl apply -f 02-acr-LoadBalancer-Service.yaml
# 확인
kubectl get all --- NAME READY STATUS RESTARTS AGE pod/acrdemo-localdocker-deployment-848b96b758-kvn64 1/1 Running 0 93s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/acrdemo-localdocker-service LoadBalancer 10.0.124.226 4.230.152.254 80:32327/TCP 93s service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 4h1m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/acrdemo-localdocker-deployment 1/1 1 1 93s NAME DESIRED CURRENT READY AGE replicaset.apps/acrdemo-localdocker-deployment-848b96b758 1 1 1 93s
# 샘플 애플리케이션 접근
로드밸런서 외부 IP로 접속하면
ACR 내 이미지로 컨테이너까지 잘 배포되어 있는 것을 확인 가능하다.
[참고 영상]
Udemy - Azure Kubernetes Service with Azure DevOps and Terraform
섹션 19 : Azure Contaienr Registry for Azure AKS
[참고 문서]
'kubernetes > udemy' 카테고리의 다른 글
[udemy] Azure Container Registry for AKS (2) (0) 2025.02.26 [udemy] Namespace (0) 2025.02.23 [udemy] Ingress - SSL with Let's Encrypt (0) 2025.02.23 [udemy] Ingress - ExternalDNS (2) (0) 2025.02.22 [udemy] Ingress - ExternalDNS (0) 2025.02.22