컨테이너가 등장하기 이전에는 가상화를 통해 운영체제와 독립적으로 동작하는 가상머신에 하드웨어 자원을 할당해 여러 앱들이 각각 다른 환경에서 실행될 수 있었다.
하지만 이러한 방식은 각각의 가상머신에 운영체제가 포함되어 지나치게 무거워지는 문제가 있었기 때문에 리눅스에서 컨테이너라는 개념이 등장했다.
컨테이너는 운영체제 레벨 가상화를 통해 리눅스 커널을 공유함으로서 기존 가상머신의 단점을 극복하면서 독립된 환경은 그대로 유지할 수 있게 되었다. 하지만 리눅스 컨테이너는 사용하기 어려웠기 때문에 이를 위한 도구로서 등장한 것이 Docker이다. 또한 Docker Hub를 통해 컨테이너 환경을 공유하고 설치하는 기능을 제공함으로서 높은 이식성과 사용성을 갖게 되었다.