탄생배경

전통적인 애플리케이션 배포방식에서 자주 마주하는 문제점 "It works on my machine":

  • 개발 환경과 운영 환경의 불일치
  • 복잡한 환경 설정과 종속성 관리의 어려움

이러한 문제를 해결하기 위해, 애플리케이션을 어디서나 동일한 환경에서 실행할 수 있는 기술의 필요성이 대두되어습니다.

그 결과, 애플리케이션을 컨테이너로 패키징하여 어디서나 동일하게 실행할 수 있게 해주는 가상화 플랫폼인 Docker 가 탄생하게 되었습니다.

Docker 를 사용하는 이유

특징  설명
컨테이너화 (Containerization) 애플리케이션과 그 종속성을 하나의 컨테이너로 묶어 일관된 실행 환경을 제공
이식성 (Portability) 도커를 지원하는 환경에서 애플리케이션을 쉽게 이식가능 →개발, 테스트, 배포과정의 단순화
격리성 (Isolation) 각 컨테이너는 자체 격리된 환경에서 실행되어서 애플리케이션 간의 충돌을 방지
효율성 (Efficiency)  호스트 시스템의 커널을 공유하여 가상머신을 사용하는 것에 비해 리소스 오버헤드가 감소,
즉, 가상머신은 각자 운영체제를 따로 실행하느라 자원을 더 많이 소모하는 반면, 도커는 운영체제를 공유해 자원 낭비를 줄여준다.
확장성(Scalability) 컨테이너는 수요에 따라 애플리케이션을 쉽게 확장하거나 축소 가능
재현성(Reproducibility) Docker 이미지는 버전 관리되고 공유될 수 있어 애플리케이션이 일관되게 배포되도록 보장

장점

  • 일관된 환경 제공: 개발부터 운영까지 동일한 환경을 유지하여 환경 불일치로 인한 문제를 최소화
  • 신속한 배포 및 롤백: 이미지 기반 배포로 빠른 배포와 롤백이 가능
  • 유연한 스케일링: 컨테이너 오케스트레이션 도구(Kubernetes 등)를 사용하여 수요에 따라 쉽게 확장하거나 축소가능
  • 리소스 효율성: 시스템 자원을 효율적으로 사용하여 비용 절감에 도움
  • 풍부한 생태계: Docker Hub 등 다양한 이미지와 커뮤니티 지원이 활발
  • CI/CD 파이프라인 통합 용이

단점

  • 보안 문제: 호스트 커널을 공유하기 때문에 가상 머신보다 보안 격리가 약할 수 있음
  • 복잡한 관리: 다수의 컨테이너 관리와 오케스트레이션이 복잡할 수 있음.
  • 윈도우 지원 제한: 초기에는 리눅스 중심으로 개발되어 윈도우 환경에서 제약이 있을 수 있습니다.
  • 디버깅 어려움: 컨테이너 내부의 문제를 진단하고 디버깅하는 데 어려움이 있을 수 있습니다.

Common Use Cases

  • Web Applications: Deploying and scaling web applications.
  • Microservices Architecture: Building and managing distributed applications composed of small, independent services.
  • Data Science: Running data science pipelines and machine learning models.
  • Continuous Integration and Continuous Delivery (CI/CD): Automating the testing and deployment of applications.

+ Recent posts