강좌
클라우드/리눅스에 관한 강좌입니다.
클라우드 분류

네이버클라우드 실무사용법029 : Docker (Container Registry) 사용하기

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

Docker (Container Registry) 사용하기

 

 

 

1. KubernetesPrivate Subnet 생성

 

KubernetesPrivate Subnet을 먼저 생성한다.

 
  VPC > Subnet Management > +Subnet
생성 >

 
    .Subnet
이름 : ss-vpc-kube-sub2
    .VPC : vpc-test-ss
    .IP
주소범위 : 10.100.4.0/24
    .
가용Zone : KR-2
    .Network ACL : ss-vpc-web-nacl
    .Internet Gateway
전용여부 : N(Private)
    .
용도 : 일반
    >
생성 >

 

 

2. Subnet 생성


 
로드밸런서를 위한 Subnet을 생성한다.

 
  VPC > Subnet Management > +Subnet
생성 >

 
    .Subnet
이름 : ss-vpc-lb-sub3
    .VPC : vpc-test-ss
    .IP
주소범위 : 10.100.5.0/24
    .
가용Zone : KR-2
    .Network ACL : ss-vpc-web-nacl
    .Internet Gateway
전용여부 : N(Private)
    .
용도 : 로더밸런서


    >
생성 >

 

 

3. kubectl 설치

 

 

kubectl이란 쿠버네티스 커맨드라인 도구이고, 쿠버네티스 클러스트에 대해 명령을 실행할 수 있다.

 

 

kubectl설치를 할 수 있는 Install_kubectl.sh의 내용은 다음과 같다.

[root@ss-linux-01 lab1]# cat install_kubectl.sh

#!/bin/sh

cat <<EOF > /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes

baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgcheck=1

repo_gpgcheck=1

gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg

EOF

yum install -y kubectl

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

yum install -y docker-ce

systemctl start docker

[root@ss-linux-01 lab1]#

 

 

위의 install_kubectl.sh 파일의 내용을 보면


   .kubernetes
관련 repo를 생성하고,

 
   .kubectl
을 설치하고 (yum install -y kubectl)


   .docker
관련 패키지(docker-ce)를 설치하고(yum install -y docker-ce)

 
   .docker
를 실행시킨다.(systemctl start docker)


   .
등의 작업들을 수행한다. 이것은 dockerkubernetes를 실습하기 위한 필요한 설치내용이다.

 

kubectl설치를 위해서 먼저 소스를 다운받아서 압축을 푼다.

 

[root@ss-linux-01 ~]# wget https://kr.object.ncloudstorage.com/k8s-edu/lab_source.tar

--2023-08-24 13:43:40--  https://kr.object.ncloudstorage.com/k8s-edu/lab_source.tar

Resolving kr.object.ncloudstorage.com (kr.object.ncloudstorage.com)... 61.97.180.104

Connecting to kr.object.ncloudstorage.com (kr.object.ncloudstorage.com)|61.97.180.104|:443... connected.

HTTP request sent, awaiting response... 200 OK

Length: 40960 (40K) [application/x-tar]

Saving to: ‘lab_source.tar’

 

100%[=======================================================================>] 40,960      --.-K/s   in 0.001s

 

2023-08-24 13:43:40 (69.1 MB/s) - ‘lab_source.tar’ saved [40960/40960]

 

[root@ss-linux-01 ~]#

[root@ss-linux-01 ~]# ls -l lab_source.tar

-rw-r--r-- 1 root root 40960 Oct 27  2020 lab_source.tar

[root@ss-linux-01 ~]#

[root@ss-linux-01 ~]# tar xvf lab_source.tar

lab_source/

lab_source/lab1/

lab_source/lab1/install_kubectl.sh

lab_source/.DS_Store

lab_source/lab5/

lab_source/lab5/apache2-dockerfile/
….

 

 

압축 푼 디렉토리에서 install_kubectl.sh를 실행한다.

 

[root@ss-linux-01 ~]# cd /root/lab_source/lab1/

[root@ss-linux-01 lab1]#

[root@ss-linux-01 lab1]# chmod 755 install_kubectl.sh

[root@ss-linux-01 lab1]#

[root@ss-linux-01 lab1]# bash ./install_kubectl.sh

Loaded plugins: fastestmirror

kubernetes/signature                                                                      |  454 B  00:00:00

kubernetes/signature                                                                      | 1.4 kB  00:00:00 !!!

Loading mirror speeds from cached hostfile

 * base: mirror.kakao.com

 * epel: mirror-nrt.yuki.net.uk

 * extras: mirror.kakao.com

 * remi-php55: cdn.centos.no

 * remi-safe: cdn.centos.no

 * updates: mirror.kakao.com
……
Installed:

  docker-ce.x86_64 3:24.0.5-1.el7

 

Dependency Installed:

  audit-libs-python.x86_64 0:2.8.5-4.el7                     checkpolicy.x86_64 0:2.5-8.el7

  container-selinux.noarch 2:2.119.2-1.911c772.el7_8         containerd.io.x86_64 0:1.6.22-3.1.el7

  docker-buildx-plugin.x86_64 0:0.11.2-1.el7                 docker-ce-cli.x86_64 1:24.0.5-1.el7

  docker-ce-rootless-extras.x86_64 0:24.0.5-1.el7            docker-compose-plugin.x86_64 0:2.20.2-1.el7

  fuse-overlayfs.x86_64 0:0.7.2-6.el7_8                      fuse3-libs.x86_64 0:3.6.1-4.el7

  libcgroup.x86_64 0:0.41-21.el7                             libsemanage-python.x86_64 0:2.5-14.el7

  policycoreutils-python.x86_64 0:2.5-34.el7                 python-IPy.noarch 0:0.75-6.el7

  setools-libs.x86_64 0:3.3.8-4.el7                          slirp4netns.x86_64 0:0.4.3-4.el7_8

 

Dependency Updated:

  audit.x86_64 0:2.8.5-4.el7                         audit-libs.x86_64 0:2.8.5-4.el7

  libselinux.x86_64 0:2.5-15.el7                     libselinux-devel.x86_64 0:2.5-15.el7

  libselinux-python.x86_64 0:2.5-15.el7              libselinux-utils.x86_64 0:2.5-15.el7

  libsemanage.x86_64 0:2.5-14.el7                    libsepol.x86_64 0:2.5-10.el7

  libsepol-devel.x86_64 0:2.5-10.el7                 policycoreutils.x86_64 0:2.5-34.el7

  selinux-policy.noarch 0:3.13.1-268.el7_9.2         selinux-policy-targeted.noarch 0:3.13.1-268.el7_9.2

 

Complete!

[root@ss-linux-01 lab1]#

 

 



4. Object Storage Bucket 생성


Container Registry에서 사용할 Object Storage Bucket 생성한다.


Storage > Object Storage > Bucket Management > +
버킷생성 >


  1
단계 : 기본정보


    .
버킷이름 : docker-image-ss-bucket01
    >
다음


  2
단계 : 설정관리


    .
잠금설정과 암호화설정은  기본설정 그대로
    >
다음


  3
단계 : 권한관리


    .
전체공개 : 공개안함
    .
나머지는 기본설정 그대로
    >
다음 > 버킷생성 >

 


  
생성된 버킷 확인

 

d870166d429613beb8a93c8b31b02dea_1695020870_3671.png
 



Object Storage > Bucket Registry > 해당 버킷 선택 > 오른쪽 버킷정보

 

 d870166d429613beb8a93c8b31b02dea_1695020889_2853.png


 

5. Container Registry 생성

 

Docker이미지들을 보관할 수 있는 Container Registry를 생성한다.


Containers > Container Registry > +
레지스트리생성 >


  .
레지스트리 이름 : k8s-ss
  .
버킷 : docker-image-ss-bucket01      *앞단계에서 생성해둔 버킷
  . >
생성 >

 

생성된 레지스트리 확인

 

d870166d429613beb8a93c8b31b02dea_1695020913_3981.png
 


 

여기까지… docker를 사용하기 위한 환경설정 작업을 수행한 것이다.


이제부터 docker image를 만들고(build), 만든 docker image를 실행(container), docker imageRegistry에 업로드(push)하는 작업을 차례대로 할 것이다.

 

 

 

6. Container Image 생성

 

ApacheDockerfile을 생성한다.

1
단계 : Dockerfile을 생성(확인)한다.

 

[root@ss-linux-01 ~]# cd /root/lab_source/lab2

[root@ss-linux-01 lab2]#

[root@ss-linux-01 lab2]# cat Dockerfile

FROM centos:7

 

# Install Apache

RUN yum -y update && yum install -y httpd httpd-tools && yum install -y telnet

 

# chnage index.html

RUN echo '<!DOCTYPE html> \

<head> \

    <title>NCP</title> \

</head>\

    <body style="text-align:center">\

    <h2> NCP TEST에 오신걸 환영합니다! </h2>\

    <div><b>Subject :</b> Kubernetes Service를 활용한 컨테이너 관리 </div>\

    <div style="color:#fff;background:#F68657;"><b>Version</b> : 2.0.0</div>\

    </body>\

</html>'  > /var/www/html/index.html

 

CMD ["systemctl","restart","httpd"]

 

 

#Start Apache

CMD ["/usr/sbin/httpd","-D","FOREGROUND"]

[root@ss-linux-01 lab2]#

 

 

 

2단계 : Docker Image를 만든다.(build)


위의 Docker fileDocker Image로 만들기 위해 docker build를 실행한다.

 

[root@ss-linux-01 lab2]# ls -l

total 4

-rw-r--r-- 1 501 games 630 Apr 21  2020 Dockerfile

[root@ss-linux-01 lab2]#

[root@ss-linux-01 lab2]# docker build -t image_apache .

[+] Building 37.5s (7/7) FINISHED                                                                 docker:default

 => [internal] load build definition from Dockerfile                                                        0.0s

 => => transferring dockerfile: 669B                                                                        0.0s

 => [internal] load .dockerignore                                                                           0.0s

 => => transferring context: 2B                                                                             0.0s

 => [internal] load metadata for docker.io/library/centos:7                                                 2.5s

 => [1/3] FROM docker.io/library/centos:7@sha256:be65f488ad3638f236b7b515b3678369a5124c47b8d32916d648  5.4s

 => => resolve docker.io/library/centos:7@sha256:be65f4884ad3638f236b7b515b3678369a5124c47b8d32916d648  0.0s

 => => sha256:be65f488b7764ad3638f236b7b515b367124c47b8d32916d6487418ea4 1.20kB / 1.20kB              0.0s

 => => sha256:dead07b4d8ed7e29e98de0f4504dd4347859d839686a31da35a3b532f 529B / 529B                  0.0s

 => => sha256:eeb6ee3f44bd0b5103bb561b82328cfe5809ab675bb17ab3a16c517c9 2.75kB / 2.75kB              0.0s

 => => sha256:2d473b07cdd5f0912cd6f1c82b512407db6b05b43f2553732b55df3bc 76.10MB / 76.10MB            1.3s

 => => extracting sha273b07cdd5f0912cd6f1a703352c82b512407db6b05b43f2553732b55df3bc                   4.0s

 => [2/3] RUN yum -y update && yum install -y httpd httpd-tools && yum install -y telnet                   26.6s

 => [3/3] RUN echo '<!DOCTYPE html> <head>     <title>NCP</title> </head>    <body style="text-ali          0.2s

 => exporting to image                                                                                    2.6s

=> exporting layers                                                                                     2.6s

=>writing image sha256:e6093efa16513805a97914c5a17e2c1d16a0d85c9f5cab56ab355c5ebc618                0.0s

=> naming to docker.io/library/image_apache                                                             0.0s

[root@ss-linux-01 lab2]#

 

 

3단계 : 생성된 docker image 리스트 확인


“docker images”
는 생성된 docker image를 확인하는 명령어이다.

 

[root@ss-linux-01 lab2]# docker images

REPOSITORY     TAG       IMAGE ID       CREATED         SIZE

image_apache   latest    e6093efa11fc   6 minutes ago   593MB

[root@ss-linux-01 lab2]#

 


생성한 image_apache이름의 docker image를 실행한다.


“docker run”
은 생성된 docker image를 실행하는 명령어이다. (실행된 docker imagedocker container라고 한다.

 

[root@ss-linux-01 lab2]# docker run -tid -p 4000:80 --name=helo_apache image_apache

724b9176c28cf4b5d8283148053c4380faf3ce6cb5b40a1f527a8f43098691e6

[root@ss-linux-01 lab2]#

 

 

4단계 : 컨테이너 목록을 확인


docker container ls
명령과 docker ps 명령은  실행된 docker imagedocker container 목록을  보여주는 명령어로서 이 둘은 완전 동일한 명령이다.

 

[root@ss-linux-01 lab2]# docker container ls

CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                   NAMES

724b9176c28c   image_apache   "/usr/sbin/httpd -D …"   49 seconds ago   Up 49 seconds   0.0.0.0:4000->80/tcp, :::4000->80/tcp   helo_apache

[root@ss-linux-01 lab2]#

[root@ss-linux-01 lab2]# docker ps

CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS              PORTS                                   NAMES

724b9176c28c   image_apache   "/usr/sbin/httpd -D …"   About a minute ago   Up About a minute   0.0.0.0:4000->80/tcp, :::4000->80/tcp   helo_apache

[root@ss-linux-01 lab2]#

 

 

Docker 이미지가 Container의 형태로 실행이 되어 있는 것을 확인할 수 있다.

 

 

5단계 : 웹브라우즈에서 접속확인


위의 docker image를 실행할 때에 포트번호를 4000번으로 했기 때문에 접속 방법은 다음과 같다.

http://
해당서버IP주소:4000

 


d870166d429613beb8a93c8b31b02dea_1695020939_8399.png
 



 

여기까지  Dockerfile을 이용하여 Docker image를 만들고(build), 만든 Docker image를 실행(run)하고(이렇게 실행된 docker imageContainer라고 한다.), 실행된 Container를 웹브라우즈로 접속해서 확인한 것이다.

 

 

 

7. Container Registry에 이미지 업로드

 

컨테이너 이미지들을 저장하기 위한 Container Registry 생성하고 Docker 이미지 생성 및 업로드를 실습한다.

 

앞에서 우리는 이미 Container Registry를 만들어 두었다. (레지스트리 이름 : k8s-ss)

 

1단계 : RegistryPublic Endpoint를 확인


Containers > Container Registry >
해당Registry 선택 >



 


d870166d429613beb8a93c8b31b02dea_1695020966_3073.png
 




 

2단계 : Container Registry로 로그인


앞에서 확인한 public endpoint로 다음과 같이 Registry에 접속한다.

 

[root@ss-linux-01 lab2]# docker login k8s--ss.kr.ncr.ntruss.com

Username: <access-key-id>

Password: <secret-key>

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@ss-linux-01 lab2]#

 

 

3단계 : Docker 이미지 업로드

 

Container Registry에 앞에서 만든 Docker image를 업로드한다.

 

먼저 docker imagetag를 붙인다.

 

[root@ss-linux-01 lab2]# docker image tag image_apache k8s--ss.kr.ncr.ntruss.com/image_apache:1.0

[root@ss-linux-01 lab2]#

 

 

docker image tag는 기존의 docker image명을 새로운 이름으로 변경하거나 새로운 태그명을 붙일때 사용하는 명령이다.

 


그런다음 docker push를 해서 registrydocker image를 업로드한다.

 

[root@ss-linux-01 lab2]# docker push k8s--ss.kr.ncr.ntruss.com/image_apache:1.0

The push refers to repository [k8s--ss.kr.ncr.ntruss.com/image_apache]

f16f11193ef6: Pushed

8a1a4127e6da: Pushed

174f56854903: Pushed

1.0: digest: sha256:dbeaa833c11abf7000db47e2128e780827e3c42eb84f72acde756d560f449bf8 size: 949

[root@ss-linux-01 lab2]#

 

 

docker push는 생성해둔 docker imagedocker registry(도커허브등)에 업로드하는 명령이다.

 



4단계 업로드한 docker image 확인

 

Containers > Container Registry > 해당Registry선택 > “항목중 이미지리스트아래에 이동>” 을 클릭한다.

 

 


d870166d429613beb8a93c8b31b02dea_1695021004_9607.png
 


 

그러면 다음과 같이 좀 전에 pushdocker image Registry에서 확인할 수 있다.

 

 d870166d429613beb8a93c8b31b02dea_1695021012_122.png


관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,050 명
  • 현재 강좌수 :  35,885 개
  • 현재 접속자 :  105 명