Docker는 컨테이너 기술 기반의 오픈소스 가상화 플랫폼이다. 좀 더 자세하게 말하자면, 애플리케이션 런타임을 지향하는 컨테이너 런타임이다.
참고. 컨테이너에는 시스템 컨테이너와 애플리케이션 컨테이너가 있다. 궁금하다면 추가적으로 찾아볼 것.
변화하지 않는 실행환경으로 멱등성을 확보 할 수 있다.
코드를 통한 실행환경 구축 및 어플리케이션 구성이 쉽다.
실행환경과 어플리케이션의 일체화로 이식성이 향상된다.
시스템을 구성하는 어플리케이션 및 미들웨어의 관리 용이성이 높아진다.
도커이미지(Dockerfile)로 구성을 코드로 관리 할 수 있기에 빠르고 쉽게 기존 컨테이너를 폐기 및 재구축 할 수 있다.
도커는 도커가 설치된 머신 이라면 어디에서든지 실행 할 수 있다.
여러서버에 걸쳐있는 여러 컨테이너를 관리 할 수 있는 도커 스웜(Docker Swarm) 및 쿠버네티스 같은 도구들을 사용하여 관리를 할 수도 있다.
이러한 장점들을 가진 도커는 운영측면에서나, 배포 및 관리 측면에서나 기존의 가상머신보다 월등하게 편리한 점이 많고, 성능면에서도 스케일 아웃이 쉽고 오버헤드가 적다는 장점이 있다.
운영체제 수준의 가상화 기술로 리눅스 커널을 공유하면서 프로세스를 격리된 환경에서 실행하는 기술이다.
이러한 컨테이너 기술이 필요한 이유는 무엇일까? 혹은 컨테이너 기술을 사용함으로써 얻을 수 있는 장점이 뭐가 있길래 모두 도커를 사용하려고 하는 것일까?
결론적으로 리눅스 컨테이너 기술을 사용하면, 격리 기술덕에 호스트 머신에게는 프로세스로 인식되지만 컨테이너 관점에서는 독립적인 환경을 가진 가상 머신처럼 보인다.(하지만, 실제로는 가상머신이 아님) 또한, 운영체제 수준의 가상화 기술로 리눅스 커널을 공유하기 때문에 하드웨어를 가상화하는 가상머신과는 달리 오버헤드가 매우 적다.
https://jsqna.com/linux-namespaces-1/
https://www.44bits.io/ko/post/is-docker-container-a-virtual-machine-or-a-process