❗️이 포스팅은 시작하세요! 도커/쿠버네티스(위키북스) 를 보고 공부한 내용을 정리했습니다.
(문제 시, 비공개 처리하겠습니다🙇🏻♀️)
1.1 가상 머신과 도커 컨테이너 비교
- 기존의 가상화 기술
: 하이퍼바이저(Hypervisor)를 이용해 여러 개의 운영체제를 하나의 호스트에서 생성해 사용하는 방식
가상 머신의 단점
- 각종 시스템 자원을 가상화하고 독립된 공간을 생성하는 작업은 하이퍼바이저를 반드시 거치지 때문에 일반 호스트에 비해 성능의 손실이 발생
- 게스트 운영체제를 사용하기 위한 라이브러리, 커널 등을 전부 포함하기 때문에 가상 머신을 배포하기 위한 이미지의 크기가 큼
완벽한 운영체제를 생성할 수 있다는 장점은 있지만,
일반 호스트에 비해 성능 손실이 있으며, 수 GB에 달하는 가상 머신 이미지를 애플리케이션으로 배포하기는 부담스럽다
- 도커 컨테이너
: 가상화된 공간을 생성하기 위해 리눅스의 자체 기능을 사용함으로써 프로세스 단위의 격리 환경을 만들어 성능의 손실이 거의 없다
도커 컨테이너의 장점
- 컨테이너에 필요한 커널은 호스트의 커널을 공유해서 사용
- 컨테이너 안에는 애플리케이션을 구동하는 데 필요한 라이브러리 및 실행 파일만 존재
- 컨테이너를 이미지로 만들었을 때 이미지의 용량 또한 가상 머신에 비해 대폭 감소
컨테이너를 이미지로 만들어 배포하는 시간이 가상 머신에 비해 빠르며, 가상화된 공간을 사용할 때의 성능 손실도 거의 없다!
도커를 시작해야 하는 이유
- 애플리케이션의 개발과 배포가 편리함
: 컨테이너 내부에서 수많은 소프트웨어를 설치하고 설정 파일을 수정해도 호스트 OS에는 영향을 끼치지 않아 독립된 개발 환경을 보장받을 수 있다.
- 여러 애플리케이션의 독립성과 확장성이 높아짐
: 소규모 서비스에서는 모놀리스 방식이 어울릴 수도 있지만, 서비스의 기능이 복잡해지고 거대해질수록 소프트웨어 자체의 확장성과 유연성이 줄어드는 단점이 있다. 이를 대체하기 위해 최근 새롭게 떠오른 개념이 MSA.
💡 모놀리스(Monolith) 애플리케이션
: 소프트웨어의 여러 모듈이 상호 작용하는 로직을 하나의 프로그램 내에서 구동시키는 방식
💡 마이크로서비스 구조 (MSA, Micro Service Architecture)
여러 모듈을 독립된 형태로 구성하기 때문에 언어에 종속되지 않고 변화에 빠르게 대응할 수 있으며, 각 모듈의 관리가 쉽다