ahnnyung ,/Docker

[Docker] 1. Docker? 컨테이너와 VM

hi,ho 2020. 11. 25. 13:41
반응형

docker

도커의 정의

도커는 리눅스의 응용 프로그램들을 소프트웨어 컨테이너 안에 배치시키는 일을 자동화하는 오픈 소스 프로젝트이다. 도커 웹 페이지의 기능을 인용하면 다음과 같다: 도커 컨테이너는 일종의 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 감싼다. - 위키백과

도커를 google에 검색하면 가장 먼저 뜨는 도커의 정의이다. 처음 듣는 사람이 이 문장을 본다면 생소할 것이다. 리눅스는 OS.. 들어봤고, 컨테이너? Spring IoC? 선박에 싣는 거? 배치? batch파일? 아니면 排置(물건을 놓는 것)? 자동화? 알아서 해주는 건가...

하나씩 풀어 얘기해보아야 할 듯싶다. 우선 왜 리눅스가 나왔는지부터 알아보도록 하자.

1. 리눅스와 컨테이너

VM(Virtual Machines)과 비교되는 기술로, 기존 VM은 하이퍼바이저(Hypervisor) 위에서 돌아가는 구조이다. [하이퍼바이저(Hypervisor)란👀?] 기본 시스템 위에 VM이 올라간 구조를 그려보면 다음과 같다.

 

Virtual Machines

그림을 보게 되면 VM은 Hypervisor로 하드웨어를 가상화하고 그 위에 Guest OS가 설치된 Virtual Machine들이 구동 되게 된다. 호스트 운영체제와 완벽하게 격리가 되어 보안성이 좋다는 이점이 있지만, 이는 실제 OS의 이미지도 설치되게 되고, 그에 따른 자체 커널까지 포함하게 되므로 더 많은 시스템 리소스(CPU, 메모리 및 스토리지)가 필요하게 된다.

하지만 이와는 다르게 Container는 VM처럼 프로세싱을 위한 별도의 공간(private space), 루트 권한, 사설 네트워크, IP 주소, custom route/iptable 규칙, 파일 시스템 마운트 등의 기능을 갖추고 있지만 호스트 시스템의 커널을 다른 컨테이너들과 공유한다는 점에서 크게 차이가 난다. 컨테이너의 구조를 보면 다음 그림과 같다.

 

Container

위의 그림처럼 컨테이너는 유저 공간만을 포함하고, VM에는 포함되는 커널이나 버추얼 하드웨어가 포함되지 않는다. 여러 개의 컨테이너가 하나의 호스트 머신에서 돌아갈 수 있도록 각 컨테이너는 자신만의 격리된 유저 공간을 가지고 있다. 즉, 운영체제 단계의 아키텍처를 모든 컨테이너가 공유하고 있는 것이다. 때문에 컨테이너는 가볍고 빠르게 동작한다. CPU나 메모리는 딱 프로세스가 필요한 만큼만 추가로 사용하고 성능적으로도 거어어어어의 손실이 없다.

 

이러한 리눅스의 컨테이너 기술을 기반으로 하는 Docker는 네임스페이스, 컨트롤 그룹과 같은 리눅스 커널 기능을 이용해서 운영체제 위에 컨테이너들을 생성하고 관리하며 공유하는 기술이다. (물론 도커가 최초는 아니다. 도커 이전에도 Solaris Zones, BSD jails, LXC 등등 수많은 컨테이너 기술들이 존재해 왔다.)

 

2부에서 계속

반응형

'ahnnyung , > Docker' 카테고리의 다른 글

[Docker] 2. Docker 설치 (Windows 10)  (0) 2020.11.25