brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Jan 09. 2022

73.NCP Container Registry-2/5

일반 테스트 시는 이미지를 만들고 쿠버네티스에 올리면 된다.

하지만,  실제 서비스일 때는 레지스트리 저장소인 Container Registry에 마지막 이미지를 올려놓고  가져다 사용한다.


저장소인 버킷을 만들고  Container Registry 생성하자

이미지를 만들자

 Container Registry에 이미지를 올리자

 Container Registry의 이미지를 가져다 쓰자. 이미지로 Pod를 생성해 사용하자.



<1> 버킷을 만들고  Container Registry 생성

<2> 도커 이미지 만들기

<3> 만든 도커 이미지를 레지스트리에 올리기

<4> Container Registry의 이미지 사용해  Pod 생성하기



<1>  버킷을 만들고  Container Registry 생성


1

버킷 만들기?

Storage > Object Storage >  이용신청

Bucket Management

버킷 생성

nginx-web-bucket    

// 버킷 이름은 유일해야 한다.  nginx-web-bucket1



2

Container Registry 생성 ?

Compute > Container Registry  >  레지스트리 생성

nginx-web-reg

레지스트리 이름도 유일해야 한다.   nginx-web-reg1


앞에서 생성한 버킷 지정  nginx-web-bucket1

생성


Private Endpoint 를 복사해 놓는다.

m6n7b87w.kr.private-ncr.ntruss.com




<2> 도커 이미지 만들기


1

리눅스 서버 로그인



2

 kubectl get nodes

[root@s17e3bbc1fd7 ~]# kubectl get nodes

NAME                      STATUS   ROLES    AGE   VERSION

nks-default-pool1-w-voj   Ready    <none>   9h    v1.20.13

nks-default-pool1-w-vok   Ready    <none>   9h    v1.20.13

nks-default-pool1-w-vol   Ready    <none>   9h    v1.20.13

nks-default-pool1-w-vom   Ready    <none>   9h    v1.20.13


kubectl get pods

[root@s17e3bbc1fd7 ~]# kubectl get pods

NAME                               READY   STATUS    RESTARTS   AGE

deployment-2048-79785cfdff-bk6wb   1/1     Running   0          114m

deployment-2048-79785cfdff-vsmsw   1/1     Running   0          114m

nginx-pod                          1/1     Running   0          119m

websrv-684ff84f56-4774n            1/1     Running   0          119m

websrv-684ff84f56-6l626            1/1     Running   0          119m

websrv-684ff84f56-ft97m            1/1     Running   0          119m

websrv-684ff84f56-zs682            1/1     Running   0          119m




3

cat << EOF > Dockerfile

FROM nginx:latest

RUN  echo '<h1> Container Registry  test 1  </h1>'  >> index.html

RUN cp /index.html /usr/share/nginx/html

EOF


설명 ?

FROM : Base Image

RUN : shell command를 docker image에 실행

WORKDIR : 작업 디렉터리

EXPOSE : 호스트와 연결할 포트 번호를 지정

CMD : application을 실행하기 위한 명령어



3

빌드

test-image 를 만들자 

docker build -t test-image .

// 리눅스 서버에 도커가 설치 되어 있어야 한다.

혹, 오류가 발생하면 업데이트 필요

container_linux.go:235: starting container process caused "process_linux.go:258: applying cgroup configuration for process caused \"Cannot set property TasksAccounting, or unknown property.\""


yum -y update

(10분 소요)


docker images


docker run -p 8080:80 --name test-nginx test-image



4

다른  터미널로 로그인 해 확인


docker ps

[root@s17e3bbc1fd7 ~]# docker ps

CONTAINER ID   IMAGE        COMMAND       CREATED          STATUS          PORTS              NAMES

bfa5615ebff7   test-image   "/docker-entrypoint.…"   36 seconds ago   Up 36 seconds   0.0.0.0:8080->80/tcp   test-nginx


5

docker logs -f test-nginx


6

docker exec -it test-nginx /bin/bash


[root@test-web01 ~]# docker exec -it test-nginx /bin/bash

root@e494216f26dd:/#

root@e494216f26dd:/# ls

bin   dev                  docker-entrypoint.sh  home        lib    media  opt   root  sbin  sys  usr

boot  docker-entrypoint.d  etc                   index.html  lib64  mnt    proc  run   srv   tmp  var


root@e494216f26dd:/# exit




<3> 만든 도커 이미지를 레지스트리에 올리기


//  새 버전에 대해 테스트 필요 !!!!!!!!!



1

레지스트리에 올리기 위해  access key 가 필요하다.

access key   확인?

ncloud  콘솔

마이페이지

계정관리

인증키 관리


2

계정으로 레지스트리 로그인 하기

Access key id와 Secret key id는

포털 > 마이페이지 > 인증키 관리에서 확인

<private endpoint>는  컨테이너 레지스트리에서 확인


docker login -u <access key id> < private endpoint>


docker login -u tUBxxxxxxxxxxx  m6n7b87w.kr.private-ncr.ntruss.com

[root@s17e3bbc1fd7 ~]# docker login -u tUBEqkUrqOLafEUmlehw m6n7b87w.kr.private-ncr.ntruss.com

Password:

WARNING! Your password will be stored unencrypted in /root/.docker/config.json.

Configure a credential helper to remove this warning. See

https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded



3

이미지에 태그 추가 ?

docker image tag image_apache <private endpoint>/ image_apache:1.0


docker image tag test-image m6n7b87w.kr.private-ncr.ntruss.com/test-image:1.0


4

docker images

REPOSITORY                                                                    TAG       IMAGE ID       CREATED          SIZE

test-image                                                                     latest    f9b6f1e04c74   56 minutes ago   141MB

m6n7b87w.kr.private-ncr.ntruss.com/test-image   1.0       f9b6f1e04c74   56 minutes ago   141MB

nginx                                           latest    605c77e624dd   10 days ago      141MB


// test-image  를   레파지토리  이미지 태그로 하나더 만든다.  

m6n7b87w.kr.private-ncr.ntruss.com/test-image:1.0




4

도커를 컨테이너 레지스트리에  올리기,  PUSH

docker push m6n7b87w.kr.private-ncr.ntruss.com/test-image:1.0

The push refers to a repository [n0jw34vw.kr.private-ncr.ntruss.com/test-image]

b35a9b6182f4: Pushed

539984d66b34: Pushed

e4b39f949587: Pushed

53db376e88c7: Pushed



// docker push m6n7b87w.kr.private-ncr.ntruss.com/nginx:1.0



5

네이버 클라우드 콘솔에서 확인하자

Container Registry  가서 확인

이미지 리스트 이동

이미지 이름

test-image




<4> Container Registry의 이미지 사용해  Pod 생성하기


1

Container Registry의 Access/ Secret 키를 저장하는 Secret 생성 ?


2

kubectl create secret docker-registry regcred --docker-server=<registry-end-point> --docker-username=<access-key-id> --docker-password=<secret-key> --docker-email=<your-email>

secret/regcred created


kubectl get secret

[root@s17e3bbc1fd7 ~]# kubectl get secret

NAME                  TYPE                                  DATA   AGE

default-token-ngbt8   kubernetes.io/service-account-token   3      10h

regcred               kubernetes.io/dockerconfigjson        1      50s




3

pod 생성 ?  


ex)

 containers:

 - name: apache-pod

 image: <private-endpoint>/image_apache:1.0



vi create_only_pod.yaml


apiVersion: v1

kind: Pod

metadata:

 name: apache-pod

 namespace: default

spec:

 containers:

 - name: apache-pod

 image: m6n7b87w.kr.private-ncr.ntruss.com/nginx:1.0

 imagePullSecrets:

 - name: regcred


kubectl create -f create_only_pod.yaml --validate=false





4

디플로이먼트  생성 ?

vi create_deployment.yaml


apiVersion: apps/v1

kind: Deployment

metadata:

 name: apache-deployment

spec:

 replicas: 3

 selector:

 matchLabels:

 app: apache

 template:

 metadata:

 labels:

 app: apache

 spec:

 containers:

 - name: apache

 image: <private-endpoint >/image_apache:1.0

 ports:

 - containerPort: 80

 imagePullSecrets:

 - name: regcred



5

서비스 생성 ?

vi create_service.yaml


kind: Service

apiVersion: v1

metadata:

 name: example-service

spec:

 ports:

 - port: 80

 targetPort: 80

 selector:

 app: apache

 type: LoadBalancer



kubectl create -f create_service.yaml

kubectl get service



7

LB 접속 테스트



8

참고


https://brunch.co.kr/@topasvga/2035



감사합니다.


        

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari