Dev/DevOps, Infra

[Docker] 도커의 기본 이해

HJChung 2021. 1. 27. 23:04

도커란 

한 마디로 정의하긴 어렵지만 컨테이너를 사용하여 응용프로그램을 더 쉽게 만들고, 배포하고, 실행할 수 있도록 설계된 도구.

즉, 컨테이너 기반의 오픈소스 가상화 플랫폼이며 생태계

 

핵심은 

도커 이미지는 프로그램을 실행하는데 필요한 설정이나 종속성을 가지고 있으며, 

도커 이미지를 이용해서 컨테이너를 생성하며, 

도커 컨테이너를 이용하여 프로그램을 실행한다. 

따라하며 배우는 도커와 CI환경출처: 

도커 사용의 흐름

도커 Client(CLI)에서 명령어를 입력하면 -> 도커 Server로 명령 요청이 가고, 처리된다. 

예를 들어 docker run hello-world 명령어가 도커 Client에 입력이 되면 => 도커 Server는 이미지 Cache 보관 저장소에 해당 이미지가 있는지 찾아본다. 만약 캐시 보관 장소에 hello-world 이미지가 없다면 이미지들을 보관하고 있는 도커 허브에서 가져와준다. 

 

도커와 가상화 기술과의 차이

일반적인 하이퍼바이저 기반의 VM 구조는 아래와 같은 형태이다. 

먼저 호스트형 하이퍼바이저란? 호스트 OS에서 다수의 게스트 OS를 구동(호스팅)할 수 있게 하는 SW로, 하드 웨어 자원을 게스트OS에 에뮬레이트, 가상화하면서도 각각의 게스트 OS를 관리하는 중간 관리자 이다. 

 

그럼 호스트 OS, 게스트 OS란? 

하나 이상의 가상 머신을 실행하는 컴퓨터가 호스트OS가 되고, 각 가상 머신들은 게스트 OS이다. 

 

그래서 각각의 가상 머신(게스트 OS)에게 호스트 OS의 하드웨어의 프로세서, 메모리, 리소스를 제공하는 것은 하이퍼바이저이며 이로써 여러 컴퓨터가 단일 컴퓨터 하드웨어에서 최적으로 작동할 수 있게 된는 것이다. 

 

 

 

반면 도커의 컨테이너형 구조는 

 

호스트 OS 위에 각각의 컨테이너로 동작한다. 이 각각의 컨테이너는 게스트 OS가 아니며 호스트 OS를 공유하며 동작한다. 그리고 필요한 것은 종속 패키지 코드를 통해 동작하면 된다. 

 

호스트 OS는 공유하면서 각 컨테이너들은 어떻게 격리시킬 수 있을까?

각 컨테이너, 그리고 호스트에서 실행되는 다른 프로세스 사이에 벽을 만들어 격리시키는 리눅스 커널 기능들이 있기 때문이다. (도커는 리눅스 환경에서 돌아가고 있다.)

C Group: CPU, 메모리 등 프로세스 그룹의 시스템 리소스 사용량을 관리

네임스페이스: 하나의 시스템에서 프로세스를 격리시킬 수 있는 가상화 기술

 

 

 

이렇게 하는 것의 장점은 

1. 하이퍼바이저 기반의 VM 구조는 각 가상 머신이 OS를 가져야 하므로, 저장 공간이 추가로 필요하고, 실행시에도 할당한 OS를 부팅하는 것부터 시작해야해서 무겁게 실행해야한다. 반면 도커는 하이퍼바이저와 게스트OS가 필요하지 않아서 가볍다.

2. 컨테이너에는 필요한 프로그램, 실행 환경을 지정해줄 수 있고, 이 자체를 실행시킴으로써 배포 및 관리를 쉽게 해줄 수 있다. 

 

 

 

 

reference

Docker란? VM과 차이, Docker 설치 및 기본 명령어를 중심으로

하이퍼바이저 개념 정리 - Hypervisor란?

따라하며 배우는 도커와 CI환경

Docker란 무엇인가? 도커에 대해 알아보기