마이크로서비스는 한 서비스에서 기능별로 물리적인 서버의 위치를 다르게 하여 서비스를 구성하기 위한 기능들을 여러 서버로 쪼개서 운영하는 아키텍처이다. 마이크로서비스는 특히 소스, 서버 등의 구성 요소를 모놀리식보다 가볍게 구성할 수 있다는 장점이 있다. 또한 기능별로 서버가 분산되어 있기 때문에 장애가 생기면 발생 부분을 쉽게 찾을 수 있고, 물리적인 서버의 위치가 기능별로 가누어져 있다. 그래서 많이 쓰는 기능의 경우 서비스의 규모가 커짐에 따라 해당 기능에 대한 리소스만 늘려주면 되며 자원을 좀 더 효율적으로 사용할 수 있다.
아키텍처를 구성하는데 많은 시간이 소요되며, 서비스 간의 호출 또한 많아지면서 전체적으로 아키텍처의 복잡도가 높아지는 상황이 발생한다.
하나의 큰 서버를 가상화 기술을 통해 잘게 쪼개서 마이크로서빗의 해당 기능들을 격리된 가상화 공간에 배치하면 서버는 한 대만 유지, 보수하지만 여러 대의 서버를 사용하는 효과를 얻을 수 있다. 이런 가상화 방식을 전가상화라고 한다. 전가상화는 하이퍼바이저를 통해 나누어진 게스트 운영체제와 통신할 수 있다. 하지만 하이퍼바이저는 무겁다는 단점이 있다. 이후 하이퍼바이저를 거치는 서능 저하를 막기 위해 컨테이너 방식의 가상화가 각광 받기 시작했고, 컨테이너 방식의 솔수션으로 구현한 것이 바로 도커이다.
도커는 이렇게 여러 마이크로 서비스를 한 대의 물리적인 서버에 운영할 수 있도록 만들어 준다. 심지어 언어의 제한도 없다. 모든 언어의 애플리케이션을 한 대의 물리적인 서버에서 운영할 수 있다. 이를 가능하도록 해 주는 것이 바로 커널 기술인 Cgroup, Namespace이다.
Control Group의 약자로, 시스템의 CPU 시간, 시스템 메모리, 네트워크 대역폭과 같은 자원을 제한하고 격리할 수 있는 커널 기능이다.