ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [udemy] Azure Container Registry for AKS
    kubernetes/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

     

    [참고 문서]

    https://github.com/stacksimplify/azure-aks-kubernetes-masterclass/tree/master/18-Azure-Container-Registry-ACR/18-01-ACR-attach-to-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
Designed by Tistory.