티스토리 뷰
도커란?
도커(Docker)는 리눅스 컨테이너에 여러 기능을 추가함으로써 애플리케이션을 컨테이너로서 조금 더 쉽게 사용할 수 있게 만들어진 오프소스 프로젝트이다.
Go 언어로 작성돼 있으며, 2013년 3월에 처음 발표된 이후 지금까지 꾸준히 개발되고 있다.
일반적으로 도커라 함은, 도커 엔진(Docker Engine) 또는 도커에 관련된 모든 프로젝트를 의미하지만, 도커 엔진이라는 의미로 더 많이 사용된다. (도커 엔진은 컨테이너를 생성하고 관리하는 주체로서, 그 자체로도 컨테이너를 제어할 수 있고 다양한 기능을 제공하는 도커의 주 프로젝트이기 때문)
컨테이너(Container) vs. 가상 머신(Virtual Machine)
컨테이너와 가상 머신은 호스트 운영체제(Host OS) 위에서 가상화를 통한 격리 환경을 구성한다는 공통점이 있다.
하지만 격리 환경을 구성하기 위해 기술적인 차이가 있다. 두 가상화 기술의 차이점을 살펴보도록 하자.
컨테이너 (Container)
컨테이너는 코드와 그 종속성들을 함께 패키징 하는 애플리케이션 계층의 추상화이다. 여러 컨테이너가 동일한 시스템에서 실행될 수 있고 OS 커널을 다른 컨테이너와 공유할 수 있으며, 각각은 사용자 공간에서 격리된 프로세스로 실행된다. 컨테이너는 VM보다 더 적은 공간을 차지하며(컨테이너 이미지의 크기는 일반적으로 수십 MB이다), 더 많은 애플리케이션을 처리할 수 있고, 더 적은 VM과 운영체제를 요구한다.
가상 머신 (Virtual Machine)
가상 머신(이하 VM)은 물리적 하드웨어를 추상화하여 한 개의 서버를 여러 서버로 전환하는 것이다. 하이퍼바이저(Hypervisor)를 통해 단일 시스템에서 여러 VM을 실행할 수 있다. 각 VM에는 운영체제, 애플리케이션, 필수적인 이진 파일과 라이브러리가 포함되며, 이는 수십 GB를 차지한다. VM은 부팅 속도 또한 느릴 수 있다.
위는 도커 공식 홈페이지에서 발췌하고 번역한 내용이다.
위의 설명만 읽었을 때에는 컨테이너와 가상 머신의 가장 큰 차이점은 애플리케이션의 경량화와 디스크 용량뿐이라고 느껴진다.
하지만 그뿐만 아니라, 컨테이너를 사용함으로써 다음과 같은 장점을 가질 수 있다.
- 일관된 환경
- 컨테이너는 호스트 OS 위에서 실행되는 격리된 공간이다. 따라서 컨테이너 자체에 특별한 권한을 주지 않는 이상, 컨테이너 내부의 작업은 호스트 OS에 영향을 끼치지 않는다. 즉, 호스트 OS에는 일관된 환경을, 컨테이너에는 독립된 환경을 보장받을 수 있다.
- 애플리케이션의 독립성 및 확장성
- 하나의 서비스는 여러 모듈이 상호작용하는 로직을 포함하고 있으며, 모든 로직을 하나의 프로그램에서 실행하는 것을 모놀리틱 애플리케이션(Monolithic Application)이라고 한다. 모놀리틱 애플리케이션은 서비스가 복잡해지고 커질수록 애플리케이션 자체의 확장성과 유연성이 줄어든다.
- 이러한 단점을 해결하기 위한 개념이 바로 마이크로서비스(Microservice) 구조이다. 마이크로서비스는 여러 모듈을 독립된 형태로 구성하기 때문에 언어에 종속되지 않고, 빠르고 쉽게 모듈을 관리하고 확장할 수 있다는 장점이 있다. 컨테이너는 빠른 시간 내에 생성 및 실행이 가능하며, 여러 모듈에게 독립적인 환경을 동시에 제공할 수 있기 때문에 마이크로서비스 구조에서 가장 많이 사용되는 가상화 기술이다.
References
본 포스트는 다음 주소를 참고하였습니다.
'Cloud Computing > Docker' 카테고리의 다른 글
[Docker] 컨테이너 외부로 노출하기 (docker0, veth) (0) | 2020.06.16 |
---|---|
[Docker] Ubuntu 18.04 도커 엔진(Docker Engine) 설치하기 (0) | 2020.06.08 |
- Total
- Today
- Yesterday