NCP

[NCP] Naver CLoud Kubernetes – Container Registry로 컨테이너 이미지를 관리하자

안녕하세요. ManVSCloud 김수현입니다.

오늘은 이전 포스팅인 “[NCP] NAVER CLOUD에서 KUBERNETES를 사용해보자 – NKS“에 이어 컨테이너로 이미지를 관리하는 방법을 알아보도록 하겠습니다.


Object Storage 생성

Container Registry를 생성하기 전에 Object Storage가 먼저 생성되어야합니다.
Container Registry에 저장될 컨테이너 이미지는 Object Storage에 저장되기 때문입니다.

이후 Container Registry에 이미지를 저장하고 오브젝트 스토리지에 어떻게 저장되는지도 함께 보도록합시다.

Object Storage 생성은 어렵지 않습니다.
우선 버킷 이름을 적어주고 [다음]을 누릅시다. 참고로 버킷 이름은 유니크한 값으로 이름이 중복될 수 없습니다.

권한은 공개하지 않도록 해두고 계정 설정은 추가적으로 하지 않겠습니다.

버킷 하나가 쉽게 생성이 되었습니다.
Object Storage에 대해 자세히 알고 싶으시다면 아래 사용 가이드도 참고해보시기 바랍니다.


Container Registry 생성

Container Registry를 생성해보겠습니다.
Container Registry 를 이용하면 컨테이너 이미지를 쉽게 업로드 및 배포할 수 있습니다.

[이용 가이드]가 있어 사용하기 쉬운 편입니다.
아래에서 생성한 Container Registry로 이미지 업로드를 해볼 것입니다.


컨테이너 이미지(Dockerfile) 만들기

간단하게 Dockerfile을 만들어보도록 하겠습니다.

vi Dockerfile

FROM centos:7

RUN yum -y update && yum install -y httpd*
CMD ["systemctl","restart","httpd"]
CMD ["/usr/sbin/httpd","-D","FOREGROUND"]

위에서 생성한 이미지를 아래와 같이 빌드해줍시다.

[root@kubernetes-server-kr2 ~]# docker build -t manvscloud-apache .
Sending build context to Docker daemon  179.7kB
Step 1/4 : FROM centos:7
7: Pulling from library/centos
2d473b07cdd5: Pull complete 
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:7
.
.
.
Complete!
Removing intermediate container 47ec6561ff67
 ---> 70b6f6999f0d
Step 3/4 : CMD ["systemctl","restart","httpd"]
 ---> Running in fa442e0e6f10
Removing intermediate container fa442e0e6f10
 ---> 8196868e79b0
Step 4/4 : CMD ["/usr/sbin/httpd","-D","FOREGROUND"]
 ---> Running in 0a08c642dcc6
Removing intermediate container 0a08c642dcc6
 ---> 2171dc304b08
Successfully built 2171dc304b08
Successfully tagged manvscloud-apache:latest

docker images 명령어로 확인해보면 빌드한 이미지를 확인하실 수 있습니다.
이제 빌드된 이미지를 run 해보도록합시다.

[root@kubernetes-server-kr2 ~]# docker images
REPOSITORY          TAG       IMAGE ID       CREATED          SIZE
manvscloud-apache   latest    2171dc304b08   17 seconds ago   517MB
centos              7         8652b9f0cb4c   7 months ago     204MB

[root@kubernetes-server-kr2 ~]# docker run -tid -p 8080:80 --name manvscloud-apache01 manvscloud-apache
0edc715160a959582dd085f54ec7c384d278648f5377c2cad15816f83a252c7d

[root@kubernetes-server-kr2 ~]# docker ps
CONTAINER ID   IMAGE               COMMAND                  CREATED         STATUS         PORTS                  NAMES
0edc715160a9   manvscloud-apache   "/usr/sbin/httpd -D …"   7 seconds ago   Up 6 seconds   0.0.0.0:8080->80/tcp   manvscloud-apache01

IP : 8080 또는 서버 내부에서는 curl localhost:8080 로 확인할 수 있습니다.

[root@kubernetes-server-kr2 ~]# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      929/sshd            
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      593/rpcbind         
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      40020/docker-proxy  
tcp6       0      0 :::22                   :::*                    LISTEN      929/sshd            
tcp6       0      0 :::111                  :::*                    LISTEN      593/rpcbind  

이미지 업로드

이제 위에서 생성한 이미지를 Container Registry로 업로드 해보겠습니다.
Container Registry에 업로드 하기위해서 [마이페이지]-[인증키 관리]에서 미리 API 인증키를 생성 해놓으시기 바랍니다.

위에서 생성한 API 키를 이용하여 업로드를 해볼텐데
1) docker login -u [생성한 API Key ID] [생성한 Container Registry의 엔드포인트]를 입력한 후 API Key의 패스워드를 입력하여 로그인을 해줍니다.
2) 이후 docker image tag로 태그를 정해줍시다.
3) 마지막으로 docker push 명령어를 이용하여 아래와 같이 push 해줍니다.

[root@kubernetes-server-kr2 ~]# docker login -u [Access Key ID] manvscloud-k8s-cr.kr.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

[root@kubernetes-server-kr2 ~]# docker image tag manvscloud-apache manvscloud-k8s-cr.kr.ncr.ntruss.com/manvscloud-apache:1.0

[root@kubernetes-server-kr2 ~]# docker push manvscloud-k8s-cr.kr.ncr.ntruss.com/manvscloud-apache:1.0
The push refers to repository [manvscloud-k8s-cr.kr.ncr.ntruss.com/manvscloud-apache]
d4208dd0734c: Pushed 
174f56854903: Pushed 
1.0: digest: sha256:b2e60515712f6c5d4f155e9d234299fa82640d8dc7766405fe997c1b80658c07 size: 742

아래 Container Registry가 보이시나요?
push했던 manvscloud-apache 이미지가 업로드 되었습니다.

Object Storage에 들어가서 해당 버킷으로 들어가보면 해당 이미지 파일이 저장되고 있는 것도 확인해볼 수 있습니다.


Personal Comments

요즘 컨테이너 환경을 사용하는 유저가 많이 늘었습니다.
저희 고객님들도 점점 컨테이너화된 어플리케이션 서비스를 구성하는 모습이 자주 보이기 시작합니다.

특히 다수의 컨테이너 사용자들은 퍼블릭 클라우드 환경에서 컨테이너 서비스를 운영중이며 요즘은 하이브리드 클라우드를 상당히 많이 보았습니다.
네이버 클라우드에서는 한국인이 쉽게 접근할 수 있도록 가이드들이 한글로 자세히 안내되고 있어 서비스들을 사용할 때 다른 플랫폼 보다 크게 부담이 느껴지지 않는 점이 가장 좋은 것같습니다.

긴 글 읽어주셔서 감사합니다.

Previous Post Next Post

You Might Also Like

No Comments

Leave a Reply