brunch

73.NCP Container Registry-2/5

by Master Seo

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

하지만, 실제 서비스일 때는 레지스트리 저장소인 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


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

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



5

도커를 컨테이너 레지스트리에 올리기, 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



6

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

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


Pod2.png


감사합니다.



keyword
매거진의 이전글NCE- 네이버 클라우드 리소스 삭제법-25/25