[Docker] 1. Docker 개념 및 소개

sightstudio

·

2020. 8. 30. 15:53

[책정리] 최근 스터디에서 k8s를 스터디 하게 되면서 평소에 사용하던 도커를 먼저 정리해보게 되었습니다.

도커란

도커는 컨테이너 기반의 오픈소스 가상화 컨테이너입니다.

기존의 VM 방식은 guest OS가 host OS의 방식을 할당받아 사용하는 방식과 다르게 

Host OS를 공유하며 실행되기 때문에 오버헤드가 적습니다. 

또한 도커 이미지를 통해 도커가 설치되어있는 어떤 환경에서도 작동할 수 있는

immutable infrastructure 구성할 수 있습니다.

 

도커와 도커 이전의 가상화 방식 차이

Type 1, Type 2, Docker

도커 이전의 가상화 기술은 크게 Type1 그리고 Type2 로 구분됩니다.

 

  - Type 1 가상화

 

전가상화와 반가상화를 합쳐서 Type1 이라고 부릅니다. 

전가상화는 말 그대로 하드웨어를 완정히 가상화 하는 방식입니다. ZEN과 KVM이 이에 해당됩니다.

ZEN을 예로 들면, ZEN은 Dom0 이라는 guest os를 생성후 나머지 guest os 들이

Dom0를 통해 자원에 접근하게 됩니다. 

다만 모든 명령을 Dom0를 통해 접근하기 때문에 비교적느립니다. 

 

 반가상화는 전가상화와 달리 하드웨어를 전부 가상화 하지 않습니다. 성능저하를 해결하기 위해 하이퍼 콜을 사용합니다.

 하이퍼콜을 사용하면 인터페이스로써 모든 guest os들이 직접 자원에 접근할 수 있습니다.

 

(OS가 설치되어있지 않은 하드웨어를 베어메탈이라 부릅니다.)

 

  - Type 2 가상화

 

  우리가 일반적으로 가상화를 떠올릴 때 생각하는 vmware나 virtual box가 여기에 속합니다.

하이퍼바이저를 베어메탈에 직접 설치하는것이 아닌 HOST OS 위에 사용함으로써 설치 및

구성이 편리하다는 장점이 있지만, Host OS 위에 Gues OS를 띄우는 형태로 동작하기 때문에

상대적으로 큰 오버헤드가 있습니다.

 

- 컨테이너 가상화 (docker)

도커는 위의 설명과는 달리 가상머신을 사용하지 않습니다. Host OS 상에서

Docker Engine을 통해 컨테이너를 생성하여 작동합니다.

컨테이너의 장점 중 하나는 union filesystem을 사용하여 경량화한 컨테이너를 사용할 수 있습니다.

또한 Gues OS를 사용하지 않기 때문에 가상머신보다 오버헤드가 적습니다.

 

도커를 가능케 하는 리눅스의 주요 기술 

- Chroot

Change Root, 즉 루트 디렉터리를 변경할 수 있습니다. 이렇게 루트 디렉터리를 바꾸게 되면,

내부에서는 외부의 자원에 접근할 수 없습니다.  이 형태를 jail이라고 합니다.

대표적인 예로,  웹서버 등에 적용하여 웹서버 권한으로 외부의 자원을 볼 수 없게 하는 용도로 사용됩니다.

 

이 경우 웹서버 권한을 탈취한 공격자가 아무리 루트에 접근해 봣자, 실제 루트에 접근 할 수 없습니다.

- cgroup

control group은 단일 또는 테스크 단위의 프로세스에 대해 자원을 할당을 제어하는 커널 모듈입니다.

이를 통해 host os 상에서 특정 프로세스의 자원 사용량을 제한할 수 있습니다.

 

더보기

cgroup v1, v2 차이

- namespace

cgroup이 자원을 제한한다면 namespace는 가시성을 제한 할 수 있습니다.

리소스들을 서로 다른 네임스페이스로 나눈다음, 다른 네임스페이스에서 해당 네임스페이스를 볼 수 없도록합니다. 

대표적인 네임스페이스 들로는

 

1. USER 네임스페이스 : 리눅스 어카운트 관리

2. MNT 네임스페이스 : 파일 시스템 마운관리

3. NET  네임스페이스 : 네트워크 자원 관리

4. PID  네임스페이스  : 등이 있습니다.

 

컨테이너의 장점

- 하드웨어 자원 절감

가상머신은 사실상 OS를 포함한 복제본입니다. 그렇기 때문에 실행하지 않고 설치만 해놓은 상태여도

많은 용량을 차지합니다. 하지만 컨테이너의 경우에는 union file system을 사용하기 때문에

컨테이너가 가동하기 전까지 용량을 차지하지 않습니다.

 

- 빠르고 쉬운 실행환경 구축

가상머신은 OS를 재구동하기 때문에 시작 자체가 무겁습니다.  또한 부팅을 하는데에도 상당한 시간이 걸리지만, 

컨테이너는 밀리세컨드 단위로 실행되기 때문에 일반 프로세스를 실행하는것과 차이가 없습니다. (app 구동시간 제외)

 

나머지는 계속 책을 읽으면서 정리해보겠습니다.

 

http://www.yes24.com/Product/Goods/84927385

 

시작하세요! 도커/쿠버네티스

본서는 도커를 처음 접하는 개발자를 위한 도커 컨테이너와 이미지의 기본적인 개념을 먼저 설명한 뒤, 도커 컴포즈와 스웜 모드를 통해 컨테이너 애플리케이션을 YAML 파일로 작성하고 클러스��

www.yes24.com