네이버클라우드 실무사용법029 : Docker (Container Registry) 사용하기
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 1,487 조회
- 0 추천
- 목록
본문
Docker (Container Registry) 사용하기
1. Kubernetes용 Private Subnet 생성
Kubernetes용 Private 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)
.등의 작업들을 수행한다. 이것은 docker와 kubernetes를
실습하기 위한 필요한 설치내용이다.
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 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단계 : 권한관리
.전체공개 : 공개안함
.나머지는 기본설정 그대로
>다음 > 버킷생성
>
생성된 버킷 확인
Object Storage > Bucket Registry > 해당 버킷 선택 > 오른쪽 “버킷정보”
5. Container Registry 생성
Docker이미지들을 보관할 수 있는 Container Registry를 생성한다.
Containers > Container Registry > +레지스트리생성 >
.레지스트리 이름 : k8s-ss
.버킷 :
docker-image-ss-bucket01 *앞단계에서
생성해둔 버킷
. > 생성 >
생성된 레지스트리 확인
여기까지… docker를 사용하기 위한 환경설정 작업을 수행한 것이다.
이제부터 docker image를 만들고(build),
만든 docker image를 실행(container),
docker image를 Registry에 업로드(push)하는
작업을 차례대로 할 것이다.
6. Container Image 생성
Apache용 Dockerfile을 생성한다.
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 file을 Docker
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 image를 docker 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 image인 docker 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
여기까지 Dockerfile을 이용하여 Docker image를 만들고(build), 만든 Docker image를 실행(run)하고(이렇게 실행된 docker image를 Container라고 한다.), 실행된 Container를 웹브라우즈로 접속해서 확인한 것이다.
7. Container Registry에 이미지 업로드
컨테이너 이미지들을 저장하기 위한 Container Registry 생성하고 Docker 이미지 생성 및 업로드를 실습한다.
앞에서 우리는 이미 Container Registry를 만들어 두었다. (레지스트리 이름 : k8s-ss)
1단계 : Registry의 Public Endpoint를 확인
Containers > Container Registry > 해당Registry 선택 >
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 image에 tag를 붙인다.
[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를 해서 registry에
docker 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 image를 docker registry(도커허브등)에 업로드하는 명령이다.
4단계 업로드한 docker image 확인
Containers > Container Registry > 해당Registry선택 > “항목중 이미지리스트” 아래에 “이동>” 을 클릭한다.
그러면 다음과 같이 좀 전에 push한 docker image를 Registry에서 확인할 수 있다.
관련자료
-
이전
-
다음