본문 바로가기

Deploy/kubernates

Kubernates + Docker 알아보기

※이 글은 brandy가 개인적으로 공부하고 작성한 글이므로, 맞지 않는 내용이 있다면 피드백 부탁드리겠습니다.

 

Kubernates를 공부하기 전에, Docker을 먼저 알아야했다. 

 

Docker은 그림과 같이 고래가 컨테이너를 싣고 있는 모습을 가진 깜찍한 아이콘을 자랑하는데, Docker은 애플리케이션을 Container로 실행하고 관리하는 오픈소스 플랫폼이다. 개발된 응용 프로그램(API 등)을 Container화해 운송하고 실행하는 것이 주 목적이다. 

 

Docker Container은 다음과 같은 특징을 가지고 있다. 

- 크기가 보통 MBytes여서 부팅이 빠르다. 
 - VM같은 가상컴퓨터의 경우 부팅이 몇 분 걸리는데(OS나 커널에 의존하지 않음) 도커는 부팅이 빠르다. 

 

Docker은 Code, Build, Ship, Run의 과정을 거친다. 

Code : 개발자가 코드를 작성 (yml 파일)

Build : 개발자가 작성한 코드를 바탕으로 Docker Image 생성

Ship : 생성된 Docker Image를 이미지 저장소에 저장

Run : 이미지 저장소에서 받은 이미지를 컨테이너로 실행

 

Docker은 Immutable Infrastructure Paradiam 기반이기 때문에, 서비스 환경 부분을 이미지화 하여 배포한 뒤 가급적 변경하지 않고 사용한다는 특징을 가지고 있다.

Docker Image는 서비스 운영에 필요한 서버 프로그램 + 소스코드 및 라이브러리 + 컴파일된 실행 파일을 묶는 형태이다. 이 Docker Image는 public하게 사용이 가능하며, 어떤 컨테이너 플랫폼에서도 실행이 가능하다. 

 

이를 가지고 가상 컴퓨터 역할을 하는 Docker Container가 Docker Image를 실행하며, 격리(분산)된 공간에서 애플리케이션의 프로세스를 동작시킨다. 다시 말해 Docker Container가 Docker Image를 실행하는 주체이다.

 

Docker는 '커널'이라는 운영체제를 공유한다. Linux Container인 LXC 컨테이너를 사용함으로써 이 컨테이너 위의 어떤 종류의 OS 실행이 가능하다. 

참고로, Linux는 같은 커널을 공유하기 때문에 Docker 사용이 가능하지만, Windows는 같은 커널을 공유하지 않는다. 

 

 

출처 https://nickjanetakis.com/blog/what-does-build-ship-and-run-any-app-anywhere-really-mean
출처 : Learn Kubernetes in simple, easy and fun way with hands-on coding exercises. For beginners in DevOps.

 

 

그렇다면 Docker은 어떻게 탄생했을까. 

각 개발자마다 사용하는 OS 환경이 다를 수도 있고, 여러가지 상황이 맞기가 힘들다.

이런 상황에서 개발자끼리 이를 맞추기 위해 환경설정 업데이트를 계속 해주어야 하는데, 여간 쉬운 일이 아니다.

그래서 개발자가 구축한 응용 프로그램이 다른 곳에서도 잘 Running이 되도록 해야 하는데, 이때 호환성을 해결할 무언가가 필요했다. 이를 위해 Docker가 탄생했다. (정리하자면, '호환성'

 

Docker Host 내부에는 Web Container, DB Container 등이 있는데, 이를 한 군데서 관리하는 것이 아닌, 각 역할 별로 분리하여 Container 간의 연결 조정이 가능하다. Container 자동 배포와 관리는 Orchestration이 진행한다. -> Orchestration 역할을 하는 것이 Kubernates다.

 

Kubernates는 GCP, Azure, AWS 등의 모든 공용 클라우드 공급자를 사용할 수 있다.

 

이렇게 Container Orchestration을 하면 뭐가 좋을까? 

응용 프로그램의 경우 하드웨어 사양이 뒷받침 되지 않거나, 하드웨어에서 여러 문제가 발생할 수 있다. 또한 다중 인스턴스로 실행이 엉키거나 느린 경우가 있는 등 여러 경우가 있다. 

이를 Orchestration(여러 대의 컴퓨터 시스템으로, 애플리케이션 및 또는 서비스를 조율하고 관리)을 통해 위와 같은 상황을 방지할 수 있는 것이다. 

 

 

참고 https://hoon93.tistory.com/48