컨테이너 기술 발전
전통적인 어플리케이션 배포 방식 (Traditional deployment)
서버에 의존성(라이브러리, 프레임워크)를 설치하고 그 위에 어플리케이션(바이너리, 코드)를 배포해서 실행함. 근데 규모가 커지고 운영하는 서비스가 많아지게 되면 같은 서버에서 여러개의 어플리케이션을 돌리는 경우가 생긴다. 이들의 어플리케이션은 서로 다른 각각의 의존성을 가질 수 있고, 그 과정에서 동일한 의존성을 가지지만 다른 버전을 설치해야하는 경우도 있다. 이 때, 한 서버에 다른 버전을 설치하는게 좀 귀찮고 효율성도 낮고 확장성도 낮아진다는 문제가 생긴다.
=> 어플리케이션을 sandboxing 하고자 했음. 어플리케이션과 의존성을 하나의 샌드박스(독립된 공간)로 묶어버리면 같은 서버 내에서 서로 영향을 주지 않게 되어 효율성도 높아지고 확장성도 높아짐.
대안 1. 가상화 (Virtualized deployment)
서버 위에 hypervisior라는 컴포넌트를 통해 GuestOS, 즉 하나의 가상의 컴퓨터를 만들어 돌림. 그러나 단점은 CPU, RAM, HDD를 에뮬레이션하여 사용하기 때문에 큰 오버헤드가 발생한다. 당연히 성능도 실제의 것과 비교하여 떨어진다. 효율성 확장성 측면에선 좋은 방법이지만 성능이 떨어지고 비용도 증가한다는 문제가 크다.
대안 2. 컨테이너 (container deployment)
HostOS에 GuestOS를 띄우지 않고 여러 컨테이너를 독립된 공간에 띄워서 사용할 수 있다. 컨테이너는 HostOS와 커널을 공유하기 때문에 가상머신 없이도 시스템적인 기능을 사용할 수 있다. 컨테이너 하나에는 어플리케이션 실행에 필요한 바이너리코드, 의존성 라이브러리만 들어가게 되어 가볍고 오버헤드가 작다. 성능 역시 가상머신보다 좋다.
컨테이너 기술 중에서는 도커가 가장 주목받고 있는 기술이다. 도커는 컨테이너 엔진이고(하나의 서버에서 컨테이너를 관리) 쿠버네티스는 컨테이너 오케스트레이션 시스템으로 여러 서버에 대해서 컨테이너를 관리할 때 사용된다.