Docker란 Go언어로 작성된 리눅스 컨테이너 기반으로 하는 오픈소스 가상화 플랫폼이다. 어플리케이션을 신속하게 구축, 테스트 및 배포할 수 있다.
향상된 컴퓨터의 성능을 더욱 효율적으로 사용하기 위해 가상화 기술이 등장했다.
서버 입장에서 CPU 사용률이 낮고 활용도가 적은 서버들은 리소스의 낭비일 수 밖에는 없었다. 하지만 모든 서비스를 하나의 서버 안에 올린다면 안정성에 문제가 생긱 수 있다. 그래서 안정성을 높이며 리소스도 최대한 활용할 수 있는 방법으로 나타난 것이 서버 가상화이다.
컨테이너는 대표적인 가상화 기술 중 하나로 LXC(Linux Container)가 있다. 기존 OS를 가상화 시키던 것과 달리 컨테이너는 OS레벨의 가상화로 프로세스를 격리시켜 동작하는 방식으로 이루어진다.
가상 머신을 생성하는 것이 아닌 Host OS가 사용하는 자원을 분리하여 여러 환경을 만들 수 있도록 하는 것이다.
이미지란 컨테이너를 실행할 수 있는 실행파일, 설정 값 등을 가지고 있는 것이다. 이미지를 컨테이너에 담고 실행을 시키면 프로세스가 동작하게된다.
기존의 VM 가상화는Host OS 위에 Hypervisor(가상화를 위한 엔진)엔진과 Guest OS를 올려서 사용했다. OS위에 OS를 올리기 때문에 무겁고 느릴 수 밖에 없다. 하지만 더 높은 격리 레벨을 지원하여 보안적인 측면에서 유리하고 커널을 공유하지 않아서 멀티 OS가 가능하다.
반면 컨테이너 기반 가상화는 Docker 엔진 위에 Application 실행에 필요한 바이너리만 올린다. Host OS와 Docker 엔진 위에 Host 커널을 공유하여 성능의 효율을 높일 수 있다(io 처리 쉽게 가능).