티스토리 뷰

1탄!! 쿠버네티스 구성준비/Master & Node

2탄!! 쿠버네티스와 컨테이너를 쉽게 이해하기

3탄!! Kubernetes 구성도 알아보자!

4탄!! NFS 설정입니다.

5탄!! helm install 방법

6탄 !! 도커 컴포즈 VS 쿠버네티스 컴포즈

7탄!! 쿠버네티스에 pod 올리자! pod? 뭐에요?

8탄!! K8S 대시보드 설치

9탄!! 쿠버네티스 오토스케일링(kubernetes autoscaling)

10탄!! K8S Namespace 생성방법

11탄!! 쿠버네티스 용어 정리

12탄!! 도커 깔끔히 삭제하기

# 부록!! 쿠버네티스 장애 처리5탄부록!! 쿠버네티스 장애 처리

#기타 참고하기  

마이크로 쿠버네티스 설치 해보기

쿠버네티스(컨테이너) 환경 구축의 어려운점~!

쿠버네티스(튜토리얼 실습)

쿠버네티스 초기설치및  볼트 디비 올리기[샘플]

헬름챠트로 올리기[샘플]11) 쿠버네티스 가상스토리지(Ceph) 설치

도커란?

Docker는 응용 프로그램을 개발, 배포 및 실행하기 위한 개방형 플랫폼입니다.

Docker는 응용 프로그램을 격리된 컨테이너 단위로 관리하여 인프라 의존성에 대한 걱정없이 실행하고 제거할 수 있습니다.

또한 기존에 쓰이던 가상화 방법인 하이퍼바이저 기반의 가상 머신과는 달리 도커 컨테이너는 리눅스 자체기능을 이용해서 프로세스 단위의 격리된 환경을 만들기 때문에 성능의 손실이 거의 없습니다.

정리하면, 격리되어서 실행가능하지만 성능 손실이 거의 없기 때문에 도커만 설치되어 있다면 현재 주어진 컴퓨팅 자원 위에서 깔끔하고, 효율적인 운영이 가능해집니다.

도커 엔진

우리가 흔히 말하는 도커는 일반적으로 도커 엔진을 의미합니다. 도커를 설치하고 실행하면 dockerd라는 데몬 프로그램이 서버로서 실행되며, REST API, CLI(docker)도구들이 클라이언트가 되어서 도커 데몬에게 작업을 지시합니다.

도커 아키텍처

좀더 자세히 도커 아키텍처에 대해서 알아보겠습니다.

도커 데몬

도커 데몬 (dockerd)은 도커 API 요청을 수신하고 이미지, 컨테이너, 네트워크 및 볼륨과 같은 도커 객체를 관리합니다. 데몬은 도커 서비스를 관리하기 위해 다른 데몬과 통신 할 수도 있습니다.

도커 클라이언트

도커 클라이언트 (docker)는 많은 도커 사용자가 Docker와 상호 작용하는 주요 방법입니다. 와 같은 명령을 사용 docker run하면 클라이언트가 이 명령을 전송하여 dockerd를 수행합니다. 이 docker명령은 도커 API를 사용합니다. 도커 클라이언트는 둘 이상의 데몬과 통신 할 수 있습니다.

도커 레지스트리

도커 레지스트리 는 도커 이미지를 저장합니다. 도커 허브는 누구나 사용할 수 있는 공용 레지스트리이며 도커는 기본적으로 도커 허브에서 이미지를 찾도록 구성되어 있습니다. 자신의 개인 레지스트리를 실행할 수도 있습니다. DDC(Docker Datacenter)을 사용하는 경우 DTR(Docker Trusted Registry)이 포함됩니다.

docker pull 또는 docker run 명령을 사용하면 구성된 레지스트리에서 필요한 이미지를 가져옵니다. docker push 명령을 사용하면 이미지가 구성된 레지스트리로 푸시됩니다.

도커 오브젝트

도커 이미지

도커 컨테이너를 만들기 위한(실행하기 위한) 읽기 전용 템플릿입니다. 가상머신을 생성할 때 사용하는 iso 파일과 비슷한 개념입니다. 이미지는 여러개의 계층으로 된 바이너리 파일로 존재하며, 컨테이너를 생성하고 실행할 때 읽기 전용으로 사용됩니다. 이미지는 쉽게 내려받을 수 있고, 내려받은 이미지에 계층을 더 씌워서 새로운 이미지를 만들 수도 있습니다.

 

  • REPOSITORY_NAME : 레파지토리 이름은 이미지가 저정된 장소를 의미합니다. 레파지토리 이름이 명시되지 않은 경우에는 도커 허브의 공식(Official) 이미지를 뜻합니다.
  • IMAGE_NAME : 도커 이미지의 이름입니다.
  • IMAGE_TAG : 이미지의 버전 관리 혹은 Revision 관리에 사용됩니다. 생략하게 되면 latest 태그로 인식합니다.

도커 레지스트리 vs 도커 레파지토리

  • 도커 레지스트리(Docker Registry) : 도커 이미지를 저장하는 서비스, 에를 들어 도커 허브, Quay, ECR 등 실제 이미지를 저장하고 관리하는 서비스.
  • 도커 레파지토리(Docker Repository) : 이름이 같지만 태그가 다른 도커 이미지의 논리적 모음

 

 

도커(Docker) 설치

 

Centos7에서 도커를 설치하는 방법은 매우 쉽다.

 

 1. 이전 버전 제거

 

1. 이전 버전 제거
$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

2. 필수 패키지 설치

 

$ sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

 

3. 저장소 설정

 

docker docs를 보면 Docker CE 설치 방법으로 3가지 방법을 제공한다.

가장 쉽고 권장되는 방법으로는 저장소를 설정하고 설치하는 방법이다.

 

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

 

4. Docker CE 설치

$ sudo yum install docker-ce

 

위의 방식으로 설치하면 docker-ce의 최신 버전으로 다운로드가 된다.

 

혹시 특정 버전 설치를 원한다면 

 

을 사용하여 원하는 버전을 설치할 수 있다.

 

5. 도커 실행

 

설치를 하였다면 

 

$ sudo systemctl start docker

$ sudo systemctl start docker

systemctl을 사용하여 docker 프로세스를 실행시킬 수 있다.

 

6. 설치 확인

 

설치 후 도커가 올바르게 설치되었는지 확인하기 위해서 기본으로 제공되는 hello-world이미지를 실행

$ sudo docker run hello-world

$ sudo docker run hello-world

도커가 정상적으로 설치되었다면, hello-world 이미지를 실행시켰을 경우 컨테이너가 실행되며 정보 메시지를 인쇄하고 종료한다.

 

 

 

도커(Docker) Volume이란?

 

도커(Docker)는 container 안의 파일 변경 사항을 UnionFS을 통해 관리

UnionFS은 이미지 layer와 write layer를 합쳐 container의 데이터를 관리하는 데, container 삭제 시 write layer도 삭제 됨

-> write layer에는 이미지 layer의 데이터에서 변경된 사항을 저장하므로 write layer 삭제 시 데이터가 사라짐(데이터 휘발성)

 

container의 데이터 휘발성 때문에 데이터를 container가 아닌 호스트에 저장할 때,

또는 container끼리 데이터를 공유할 때 Volume를 사용

 

 

 

도커(Docker) Volume 사용법 1

 

이 방법은 container의 데이터를 호스트에 유지할 때 사용할 수 있음

하지만 Volume이 /var/lib/docker/volumes/에 생기며 이름이 docker에서 자동으로 생성한 hash값을 사용

container가 삭제되면 데이터를 찾기 힘들기 때문에 추천하지 않음

$ docker run -it -v /data centos /bin/bash

$ docker run -it -v (컨테이너의 volume 디렉토리) (이미지) /bin/bash

 

이를 통해 컨테이너를 생성 시

/var/lib/docker/volumes에 hash값을 가지는 디렉토리가 생성되고, _data 디렉토리 안에 컨테이너의 /data 디렉토리가 매핑

 

즉, 컨테이너에서 /data 디렉토리에 파일을 생성/삭제/변경 등의 작업을 하게되면, 호스트의 /var/lib/docker/volumes/xxxx 디렉토리에 같은 내용이 있음

 

 

 

도커(Docker) Volume 사용법 2 - 1

 

이 방법을 사용하면 호스트의 특정 디렉토리(or 파일)을 container와 매핑

Volume의 위치를 사용자가 정할 수 있으므로 데이터를 찾기 쉬움

$ docker run -it -v /data centos /bin/bash
$ docker run -it -v (컨테이너의 volume 디렉토리) (이미지) /bin/bash

 

위의 명령어는 호스트의 /root/data 디렉토리를 container의 volume 디렉토리로 사용할 수 있도록 한다.

 

호스트에서 /root/data 디렉토리에 파일을 생성하게 된다면, container에서도 파일이 존재하고 사용할 수 있다.

 

반대의 경우(container에서 파일을 생성)에도 호스트에서 파일이 존재

 

 

 

도커(Docker) Volume 사용법 2 - 1

 

여러개의 container에서 파일을 공유하고자 할때에도 사용 가능

호스트의 같은 디렉토리(파일)을 -v옵션으로 Volume로 지정하면 같은 디렉토리(파일)를 공유

 $ docker run -it --name container1 -v /root/data:/data1 centos /bin/bash 
 $ docker run -it --name container2 -v /root/data:/data2 centos /bin/bash

 

container1의 /data 디렉토리와 container2의 /data 디렉토리를 호스트의 /root/data 디렉토리와 매핑 함으로써

각 각의 container에서 호스트의 디렉토리(파일)을 공유 가능

 

아래 내용을 요약해보자면. 로컬에 /root/data 폴더에는 contaner1 도커 /data1 의 데이터와 contaner2 의 /data2 의 

데이터가 로컬 /root/data 폴더 공유 되는 모습을 볼수가 있다. 

 

 

 

도커(Docker) Volume 사용법 3 (파일 하나를 컨테이너에 연결)

 

디렉토리 뿐만 아니라 호스트의 파일 하나도 container와 매핑 가능

 

$ docker run -it -v /root/test.txt:/root/test.txt centos /bin/bash 
$ docker run -it -v (호스트 파일):(컨테이너의 파일) centos /bin/bash 

 

댓글