kubernetes와 docker

2021. 8. 9. 17:36카테고리 없음

<docker가 나온 배경>

2000년 중반 도커가 나오기 전 라이브러리의 새로운 버전이 나올 때마다 업데이트를 통해 서버를 관리해 주어야 했습니다. 즉, 회원의 수가 많은 서비스 같은 경우 고객의 불편함을 줄이기 위해 새벽 혹은 밤에 서버를 업데이트를 함으로서 고객의 서버접속에 대한 불편을 최소화 시켰습니다.

 

특히 고객의 OS의 버전, 라이브러리의 버전에 맞게끔 서버의 버전도 맞춰서 제공해야 했었는데, 환경에 따라 서버 컴퓨터를 구축하는건 굉장한 자원낭비를 불러왔습니다.

 

클라우드가 발전하면서 "docker"라는 개념이 나오면서 서버를 관리하는 방식이 완전히 바뀌게 됩니다.

 

 

<도커란 ?>

도커는 "컨테이너 기반의 오픈소스 가상화 플랫폼"이란 개념이 존재합니다.

 

컨테이너는 흔히 수출을 위한 물품을 담을 때 사용하며 컨테이너 내부에는 "옷, 신발, 자동차, 약품..."등 수출을 위한 물품을 담아 운송수단을 통해서 최종 목적지(고객의 주거지 주소), 고객에게 물품이 도착하게 됩니다.

 

도커의 컨테이너도 마찬가지로 고객의 주소가 다른것처럼 고객이 사용하는 컴퓨터의 사양, 라이브러리의 버전, 실행환경이 다 다르기 때문에 고객의 실행환경에 맞는 버전을 전달하기 위해 사용합니다. 

정리하면, 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해줍니다.

(추상화 : 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것)

 

<컨테이너란 ?>

위에서 컨테이너를 언급하면서 사용자에게 맞는 버전의 라이브러리를 추상화하여 담는 박스라고 언급하였습니다.

 

즉, 컨테이너라는 격리된 공간에서 고객의 프로세스가 동작하게 되는데... 

어떻게 보면 VMware, VirtualBox같은 OS전체를 가상화하여 사용하는 방식과 헷갈릴 수도 있습니다.

 

VMware와 같은 가상화는 호스트OS위에 게스트OS 전체를 가상화하여 사용하는 방식으로 OS위에 OS가 돌아가다 보니 사용법은 간단하지만 한꺼번에 OS 두개가 돌아가 만약, 무거운라이브러리를 실행하였을 경우 트래픽처리, 프로세스 스케쥴링에 있어서 속도가 많이 느려지는 단점이 있습니다.

 

하지만 Docker의 경우 OS가상화가 아닌 CPU를 파티션으로 나누어 가상화를 진행합니다.

리눅스에서는 이 방식을 리눅스 컨테이너라고 하고 단순히 프로세스를 격리시키기 때문에 가볍고 빠르게 동작합니다. CPU나 메모리는 딱 프로세스가 필요한 만큼만 추가로 사용하고 성능적으로도 손실이 없기 때문에 많은 서버 개발자들이 사용하고 있습니다.

 

 

<이미지>

컨테이너 다음으로 중요한 개념으로 도커 이미지라는 개념이 존재합니다.

 

이미지는 컨테이너 실행에 필요한 파일과 설정값들을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않습니다. 

우리가 흔히 들어본 MySQL은 debian을 기반으로 MYySQL을 실행하는데 필요한 파일과 명령어, 포트 정보들을 가지고 있습니다.

Gitlab은 centos를 기반으로 ruby, go, database, redis, gitlab source, nginx등을 이미지로 가지고 있습니다.

 

 

도커 이미지는 컨테이너를 실행하기 위한 모든 리소스 정보를 가지고 있기 때문에 다른 의존성 파일을 컴파일하고 이것저것 설치할 필요가 없습니다.

 

도커 이미지는 Docker hub, Docker Registry 저장소를 직접 만들어 관리할 수 있습니다.

도커 이미지를 다시 정리하면,

 

라이브러리 설치정보를 담은 컨테이너에 대한 정보를 사진을 찍듯이 이미지로 저장하여 

다음에 사용할 일이 생기면 사진속 정보를 통해 다시 찾아보지 않고 바로 설치할 수 있도록 하는 것입니다.