본문 바로가기

Cloud/Docker

PaaS 이해를 향한 여정 - (2) 도커 이해하기

 먼저 저번에 포스팅했던 컨테이너에 대해 계속 이야기해본다. 컨테이너를 사용하는 경우와 VM을 사용하는 경우는 어떻게 다를까? 성능치로만 보면 컨테이너가 훨씬 빠르고 배포하기도 편하고 구축하기도 좋다. 하지만 컨테이너는 VM과의 큰 차이점을 가지고 있다.

너무 유명한 차이점이지만 컨테이너는 Host OS의 kernel을 같이 사용하고 있고 VM은 게스트 OS의 kernel을 사용한다. 커널이 뭐하는 놈이냐면 위키발로는 하드웨어의 자원을 나눠주는 역할을 한다는데 잘 모르겠고 중요한 놈이다. 윈도우랑 리눅스는 파일시스템도 다르니까 아예 안되는거겠지... 암튼 두 칭구는 서로 사이가 안좋다.

http://www.opennaru.com/openshift/docker/what-is-the-difference-between-docker-lxd-and-lxc/

 다시 돌아와서, 이제 도커가 등장한 계기에 대해 정리해본다. 도커의 등장 이전에 컨테이너는 다양한 방식이 있었다.

- FreeBSD Jail (2000)

- Solaris Containers (2004)

- Linux Containers(LXC) (2006)

 도커가 2013년도에 발표된 것을 생각하면 꽤나 오랫동안 가상화가 이루어졌다는 것을 알 수 있다. 그렇다면 LXC -> Docker로 변화한 과정이 궁금해진다. 기술이 없었던 것도 아닌데 왜 갑자기 docker는 이렇게 급부상한걸까?

LXC는 오히려 VM에 가깝다고 생각하면 된다. 도커는 컨테이너를 어플리케이션으로 생각할 수 있고 기본적으로 하나의 컨테이너 당 하나의 어플리케이션이다. (물론 아닌 경우도 있다) 패치 방법도 조금 다른데 LXC는 패치를 따르고 도커는 덮어쓰기인 느낌이다. 정확하지 않으니 마음으로 이해하고 넘어간다. 도커의 장점은 다음과 같다.

- 호스트 운영 체제에 영향을 받지 않는 실행 환경

- DSL을 이용한 컨테이너 구성 및 어플리케이션 배포 정의

- 이미지 버전 관리

- 레이어 구조를 갖는 이미지 포맷

- 도커 레지스트리

- 다양한 API

 도커 파일(Dockerfile)은 인스트럭션(명령)을 가지고 있는데 기본적으로 아래와 같다.

- FROM

- COPY

- RUN

- CMD

 이미지를 통해 생성된 컨테이너는 생애주기를 갖는데 실행 중, 정지, 파기의 3가지 상태를 가진다. 도커 컨테이너는 최초 실행한 시점에서 이미 실행 중이다. 도커 이미지는 상태를 갖지 않는 다는 점도 알고 있어야 한다. 도커 프로세스 자체는 이미지 빌드, 컨테이너 실행, 간단한 배포의 형식으로 이루어진다. 컨테이너가 많아질수록 운영에 한계가 생길것이다. 컨테이너의 제어를 오케스트레이션이라고 하는데 이 오케스트레이션의 사실상 표준인 쿠버네티스에 대해 다음에 다시 정리해본다.