Docker는 software application의 배포를 자동화할 수 있도록 하는 open-source project이다.
쉽게 말하면 환경에 구애받지 않고 application을 신속하게 배포, 확장 할 수 있도록 도와주는 tool이라고 이해할 수 있다.
Docker와 VM 모두 가상화를 제공한다는 점에서 유사하다. 가상화를 제공한다는 말은 결국 어떤 프로세스가 isolated된 환경에서 동작할 수 있도록 한다는 것이다.
하지만 Docker는 VM에 비해서 빠르고 가볍다.
오른쪽 그림과 같이 VM의 경우 HOST OS 위에 Hypervisor가 올라오고, 그 위에 GUEST OS가 올라온다. 즉, VM은 완전히 분리된 PC를 만드는 느낌이다.
Hypervisor는 여러 운영체제를 관리하기 위한 소프트웨어로 CPU, 메모리, 스토리지 등의 리소스를 나눠주고, 운영체제 간의 다른 command 들을 interpret 해주는 역할을 하기도 한다.
Docker는 이와 달리 process 단위로 isolation이 제공된다. 따라서 리소스의 분할 등으로 인한 overhead가 비교적 적어 성능이 좋다. 반면 보안적인 관점에서는 VM이 더 좋다.
container를 구축하기 위한 blueprint, 즉 스냅샷이라고 할 수 있다.
구축하고자 하는 환경에 대한 setting을 기술한 snapshot이다 ! 정도로 이해할 수 있을 것 같다.
결국 image를 실행하면 그 setting에 맞게 환경이 구축되고, 그게 container가 된다.
Docker image를 기반으로 생성되고 실제로 application을 실행한다.
Docker container의 building, running, distributing을 관리하는 background service다.
Docker daemon은 OS 위에서 동작된다.
client로부터의 명령어를 처리해주는 프로세스라고 할 수 있다.
Command line tool을 통해 user는 daemon과 interact할 수 있다.
Docker image의 저장소다.
덕분에 이미 구현되어 있는 image를 hub에서 가져와 간편하게 container를 올릴 수도 있다 !
https://docker-curriculum.com/#docker-images
https://www.docker.com/resources/what-container/
https://docs.docker.com/get-started/overview/