컨데이너 기술의 발전
어떻게 서비스를 효율적으로 운영할 것인지, 컴퓨팅 자원을 어떻게 최대한 잘 쓸수 있는지 (비용효율성)을 위해 한 서버 안에 여러 서비스들을 최대한 격리된 환경에서 구동하면 될까에서 나온 것이 가상화 기술이다.
가상머신
가상화 기술을 가상머신에서 시작된다. 운영체제 위에 가상머신 (Guest OS) 을 두고 쓰는데, 이를 운영하기 위해서는 emulating이라는 작업이 필요하다. Emulating은 CPU, RAM, HDD 등 물리적인 자원을 설정해주는 것이다. 이렇게 Guest OS는 하나의 컴퓨터 처럼 운영이 되다 보니 (파일스템도 분리됨) 최대한 다른 환경에서 서비스를 운영할 수 있어 의존성 문제가 생기지 않는다.
하지만 가상머신은 emulation 작업 때문에 기존 운영체제 위해서 작동할 때 보다 성능의 효율성이 떨어지고, 가상머신을 구동하기 위해 필요한 CPU, RAM, HDD 들의 용량이 크기 때문에 자원의 오버헤드가 많이 발생한다. 어플리케이션이 아닌 가상 머신을 띄우기 위한 자원이 너무 많이 필요한 것이다.
컨테이너 기술
위의 문제를 해결하기 위해 컨테이너 기술이 생겨났다. 하드웨어 위에 호스트 운영체제가 올라가고 그 위에 컨테이너 엔진이 설치되는 방식이다. 위 그림의 박스가 하나의 컨테이너인데, 이 컨테이너는 호스트 운영체제 입장에서 하나의 프로세스라고 생각하면 된다. 호스트 운영체제 위에서 실행시키는 프로세스와 비슷하지만 몇가지 격리 기술들이 추가로 적용된다. chroot를 이용한 격리된 파일시스템이라던지, 리눅스의 namespace 기술로 프로세스 ID를 격리한다. 이 외의 다양한 격리 기술이 들어간 프로세스인 것이다.
이처럼 컨테이너 기술은 호스트 운영체제 위에서 동작하는 프로세스이기 때문에 가상머신 보다 성능 효율성 및 자원 효율성이 높아진다. 파일시스템도 격리가 되어 있기 때문에 의존성 충돌 문제도 없다. Docker는 Container Engine 중의 하나이다.
쿠버네티스 기술
쿠버네티스는 컨테이너 오케스트레이션 시스템 중 하나이다. 컨테이너 엔진은 하나의 서버 위에서 컨테이너들을 어떻게 관리할 수 있을까라면, 컨테이너 오케스트레이션 시스템은 여러 서버로 구성된 클러스터 환경에서 컨테이너들을 어떻게 잘 관리할 수 있을까에 대한 소프트웨어이다.