끄적끄적 아무기록

경량 컨테이너 기반 가상화 - 도커의 개념

by 현생사는갓생지망생
반응형

도커란?



도커는 컨테이너 기반의 오픈소스 가상화 플랫폼이다.

컨테이너라 하면 배에 싣는 화물 수송용 박스를 생각할 수 있는데,

각각의 컨테이너 안에 다양한 화물을 넣을 수 있고 쉽게 옮길 수 있는 특징이 있다.


서버에서 이야기하는 컨테이너도 이와 비슷하다.

다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여

프로그램의 배포 및 관리를 단순하게 해준다.




1. 하이퍼바이저/컨테이너 기반 기술 비교



    

<하이퍼바이저>                                         <도커>



보통 '가상화'를 한다고 하면, 예를 들어 VMware나 VirtualBox같은 것들을 이용하는 OS 가상화를 떠올린다.

VMware나 VirtualBox같은 가상머신은 호스트 OS위에 게스트 OS 전체를 가상화하여 사용하는 방식이다.


이러한 가상화 기술엔 몇 가지 단점들이 있다.


1. 호스트 OS와 게스트 OS 간의 기능 중복 (프로세스 스케줄링)

2. 상대적으로 무겁다 (오버헤드 15~20%)

3. 배치의 어려움


이를 개선하기 위해 프로세스를 격리하는 방식이 등장한다.

도커는 docker engine위에 application이 올라가있다. 즉, 호스트 OS 위에 Docker Engine 위에 컨테이너가 생성된다.


컨테이너 기반의 가상화 기술은 이러한 장점을 가진다.


1. 하드웨어 가상화가 아닌 실행 환경의 분리

2. 각 컨테이너간 영향을 분리

3. 오버헤드가 5% 이내



2. LXC(Linux Container)


도커가 등장하기 전에, 프로세스를 격리하는 방법으로 리눅스의 LXC가 있다.


LXC = cgroups + namespaces


- cgroups(control groups)

CPU, 메모리, 디스크, 네트워크


- Namespaces(Namespace Isolation)

프로세스트리, 사용자계정, 파일시스템, IPC 등

호스트와 별개의 공간 설정





3. Libcontainer


- 컨테이너 최적화 기술 LXC 외에 libcontainer란 별도의 실행 드라이버를 만들어,

  특정 우분투 버전 외에 다양한 리눅스를 지원 가능하다.



도커는 LXC를 기반으로 시작하여 현재는 자체적인 libcontainer 기술을 사용한다.



4. 도커의 특징


- 모든 컨테이너들이 동일 OS 커널 공유한다.(독립적인 스케줄링이나 CPU/메모리/디스크/네트워크를 가상화하지 않는다.)

- 리눅스 컨테이너 가상화(LXC) 기반이다.

- 다른 OS에서는 일반 하이퍼바이저(경량)가 있어야 한다.

- 현재는 LXC → Libcontainer를 사용해 리눅스 의존도를 줄이려 하고 있다.

- 구글에서 만든 Go라는 언어로 작성되었다.



5. 이미지(Image)


도커에서 가장 중요한 개념 중 하나는 이미지이다.

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

컨테이너는 이미지를 실행한 상태라고 볼 수 있고,

컨테이너의 상태가 바뀌거나 컨테이너가 삭제되어도 이미지는 변하지 않고 그대로 남아있다.



반응형

블로그의 정보

현생이네

현생사는갓생지망생

활동하기