Maximilian Schwarzmüller (2024). "Docker & Kubernetes : 실전 가이드" 인터넷 강의를 바탕으로 메모, 생각한 점을 기록해보는 글입니다.
결론적으로 Docker는 팀, 개인, 또는 다른 프로젝트 등이 독립적이고 표준화된 애플리케이션 패키지를 만들 수 있도록 도와주는 도구이다.
Docker를 사용하면 애플리케이션과 그 의존성을 컨테이너라는 표준화된 단위로 묶어 어디서나 일관되게 실행할 수 있게 된다. 개발 환경과 운영 환경 사이의 차이를 줄이고, 배포 및 확장이 용이해진다.
높은 자원 소모:
VM은 각 인스턴스마다 운영 체제(OS)를 포함하고 있어, 많은 CPU, 메모리, 저장소 등의 자원을 소비한다.
여러 VM을 실행하면 호스트 시스템의 자원 소모가 급격히 증가하여 성능 저하가 발생할 수 있다.
복잡한 관리:
VM은 개별적으로 OS 업데이트, 보안 패치 등을 관리해야 하므로 관리가 복잡하다.
여러 VM을 운영하는 경우, 일관된 설정과 유지보수가 어렵다.
애플리케이션 이식성 문제:
VM 간에 애플리케이션을 이동하거나 배포할 때, 호스트 OS와의 호환성 문제 등이 발생할 수 있다.
개발 환경과 운영 환경 간의 차이로 인해 예상치 못한 오류가 발생할 수 있다.
Overhead의 문제
Application이 많아지고 중복이 많아진다면 많은 공간을 낭비하게 될 수도 있다.
효율적인 자원 사용
Docker 컨테이너는 운영 체제의 커널을 공유하므로 VM보다 훨씬 가벼운 자원을 사용한다.
하나의 호스트 시스템에서 더 많은 컨테이너를 실행할 수 있어 자원 효율성이 높다.
일관된 환경 제공
Docker 이미지는 모든 종속성과 설정을 포함하고 있어 어디서나 동일한 환경에서 실행할 수 있다.
개발, 테스트, 운영 환경 간의 일관성을 유지하여 예기치 않은 오류를 줄일 수 있다.
쉬운 관리 및 배포
Docker는 컨테이너 오케스트레이션 도구(예: Kubernetes)와 함께 사용하면 대규모 애플리케이션의 배포, 관리, 확장이 간편해진다.
CI/CD 파이프라인에서 통합하여 자동화된 배포 프로세스를 구축할 수 있다.
애플리케이션 이식성
Docker 컨테이너는 호스트 OS에 관계없이 일관된 실행 환경을 제공하므로, 다른 시스템으로의 이식이 용이하다.
개발 환경과 운영 환경의 차이를 최소화하여 배포 시 발생할 수 있는 문제를 줄인다.