빅데이터

docker 이해

CyberI 2017. 7. 7. 13:58


도커(Docker)가 무엇인지 간략하게 알아보려고 합니다.

도커는 응용 프로그램을 쉽고 빠르게 개발, 배포 및 실행하기위한 개방형 플랫폼입니다.

LXC(LinuX Container)라는 커널 컨테이너 기술을 이용하여 만든 기술 중 하나로서 host를 공유하는 것과 어플리케이션이나 프로세스가 해당 컨테이너 안에서 샌드박스 처리되어 외부의 영향을 받을 일 없이 안전한게 구동하는 특징을 가집니다.

아키텍처를 보고 어떤 요소들로 구성이 되어있는지 그리고 우리가 잘 알고 있는 가상머신(VM)과 어떻게 다른지에 대해 알아보겠습니다.


Docker의 아키텍쳐

<그림 출처 : https://docs.docker.com/engine/docker-overview >

Docker daemon : 도커 데몬은 호스트 머신에서 실행되고, 유저는 Docker client를 통해서 데몬과 상호작용합니다.


client : 도커 데몬에 명령(run, ps, commit..)을 내릴 수 있도록 만든 도커의 주된 CLI 입니다.


Docker images : 도커 이미지는 읽기전용 템플릿입니다. centos이미지에 nginx 웹서버를 설치한 것을 하나의 이미지라고 볼 수 있습니다. 도커 이미지는 도커 컨테이너를 만드는데 사용됩니다. 컨테이너를 기반으로 commit, export등의 명령어로 새로운 이미지를 빌드할 수 있고. 혹은 다른 사람이 만든것을 다운받을 수도 있습니다.


Docker registries : 도커 레지스트리는 이미지들을 보관하는 곳입니다. 이미지를 push/pull 명령을 이용하여 업로드/다운로드 할 수 있는 공개 저장소와 사설 저장소가 있습니다. 공개 저장소는 Docker hub에서 제공되고 있습니다.


Docker containers : 간단히 표현하자면 docker image가 프로그램의 파일이면 컨테이너는 프로그램이 실행되고있는 프로세스라고 할 수 있습니다. 도커 컨테이너는 실행될수 있고, 시작 , 중지, 이동, 삭제가 가능합니다.



docker의 기반 기술

- Namespace : namespace를 이용하여 container라는 격리된 영역을 제공합니다.

* pid : 프로세스 격리에 이용

* net : 네트워크 인터페이스 관리에 이용

* ipc : IPC 리소스 접근에 대한 관리에 이용

* mnt : 마운트위치의 관리에 이용

* uts : 커널의 격리와 버전 인식에 이용

- Control groups : control groups(cgroups)라는 기술을 이용하여 프로그램의 자원의 제한 기능을 제공 합니다.

- Union file systems : Union file system(UnionFS)는 파일 시스템은 레이어를 생성하는데 사용되고, 가볍고 빠릅니다.

- container format : 도커는 위와 같은 컴포넌트들을 조합하여 감싸는데 이를 container format이라고 하며 기본 포맷은libcontainer 입니다. 추후에 다른 container format을 지원할 것이라고 합니다.



Virtual Machine & Container

그럼 우리가 흔히 알고있는 vm과 다른 것이 무엇인지 그림 비교를 통해 알아보겠습니다.

                     <Virtual Machine>                                                                       <Container>

vm은 운영체제 자체를 가상화하기 때문에 어플리케이션에 필요한 바이너리와 라이브러리 그리고 guestOS(커널)이 통으로 들어가며 차지하는 자원의 비율이 컨테이너에 비해 큽니다. 반면에 컨테이너는 호스트 운영체제와 어플리케이션을 격리하고 실행에 필요한 의존성이 있는 라이브러리와 바이너리가 포함됩니다.

위 특성으로 미루어 보았을 때 vm대신 컨테이너를 도입 시 guestOS 계층이 없어져 전체 시스템의 부하와 자원 사용률이 낮아 빠른 성능을 기대할 수 있으며 개발자에게 자유로운 개발이 가능한 환경을 제공할 수 있습니다.