VM(Virtual Machine)
- 가상머신 안에서 프로그램 하나를 띄우기 때문에 프로그램들 끼리 충돌 할 걱정 x
- But, 클라우드 환경과 적합하지 않다.
- 그리고, 특정 벤더에 대한 dependency 가 높음 (멀티 클라우드 불가)
Docker
- 모든 실행환경을 Container 로 (Container 에 대한 설명은 뒤에..)
- 어디서든 동작하고 (로컬, 서버) 사용법 쉬움
Container
- CPU, 메모리 사용 효율적
- 이미지를 이용한 배포 및 롤백 쉬움
- 언어나 프레임워크 상관없이 모든 App 동일한 방식으로 관리
- 로컬, 클라우드 다 동일한 환경
- 특정 클라우드 Dependency 없음 (AWS 에서 쓰던걸 AZURE 에서 사용 가능)
그럼 이제 개발자는 Docker Image 형성하고, 해당 Image 를 허브에 저장하고 Container 에서 Run 하게 됨 (패턴이 정형화 되어 있음)
BUT, 문제점들...
- 컨테이너가 너무 많아질 경우 손이 많이 감
- 컨테이너가 많아지면, 어떤 서버가 여유있는지 잘 모름
- v2를 만들 경우 업데이트 할 때, 롤백 할 때 손이 많이 감
- 과부하된 컨테이너들 관리.. 어려움
Container Orchestration
- 위 문제점들을 관리해주는 것, 나 대신 일 해줄 도구
- 서로 다른 CPU와 RAM 을 관리하기 어렵기 때문에 Cluster 단위 (Node가 여러개) 로 관리
- Master 서버 하나 두고, Master 서버에 명령어를 하나 던지면 Cluster 로 접근하여 Node를 관리
- 상태 관리, 배포 관리, 버전 관리 최적화 하여 다 자동으로 해줌