Docker and Container

Container

먼저 컨테이너란 무엇일까요? 컨테이너는 Docker의 정식 홈페이지에서 다음과 같이 정의하고 있습니다.

Package Software into Standardized Units for Development, Shipment and Deployment

컨테이너는 애플리케이션에게 격리된 실행 환경을 제공해주는 가상화 기술입니다. 컨테이너 단위로 OS, Library, Application을 패키징 할 수 있습니다. 컨테이너 기술을 통해 하나의 OS 상에서 여러 애플리케이션을 독립적으로 실행시킬 수 있습니다.

Why container?

그러면 왜 컨테이너 기술을 사용할까요? 그 이유는 다음과 같습니다.

Technology

이러한 컨테이너 기술을 가능하게 하는 기반 기술들이 존재합니다. 그러한 기반 기술들에 대해 살펴보도록 하겠습니다.

Namespace

프로세스에게 격리된 실행 환경을 제공하고 서로가 충돌 나지 않게 하는 기능입니다. 리눅스 커널에선 6가지 namespace 지원하고 있습니다.

cgroups(Control Groups)

cgroups는 자원에 대한 제어를 가능하게 해주는 리눅스 커널의 기능입니다. 제어 가능한 자원은 아래와 같습니다.

cgroup으로 그룹핑된 프로세스들은 리소스별로 정해진 양만 사용 가능합니다.

Union Filesystem

서로 다른 파일 시스템이나 디렉터리를 합쳐서 하나의 논리적인 파일 시스템으로 컨테이너에게 제공됩니다. Union Filesystem을 살펴보기 전에 먼저 Union mount에 대해서 알아야 합니다. Union mount는 다음과 같습니다.

그럼 Union Filesystem에 대해 살펴보도록 하겠습니다.

Docker

Docker는 컨테이너를 이미지 파일로 빌드하고 배포하여 어디서나 실행할 수 있게 해 줄 수 있는 오픈소스 프로젝트입니다. Docker는 클라이언트(docker)와 서버(dockerd)로 구성되어 있습니다. 클라이언트에서 명령어를 서버로 전송해서 실행합니다.

docker의 동작 방식은 다음과 같습니다.

오늘은 docker와 docker의 기반 기술이 되는 container에 대해 알아보았습니다. 다음 시간에는 이러한 container들을 orchestration 할 수 있는 kubernetes에 대해 알아보도록 하겠습니다.



comments powered by Disqus