KDT:::Sparta MSA 아키텍처 3기(week09,10)

2 minute read




Docker의 주요 개념

  • Docker는 애플리케이션을 ‘컨테이너’라는 단위로 포장해서 어디서든 똑같이 실행하게 해주는 플랫폼

    Docker 핵심 개념

  • 컨테이너 : 실제 실행중인 애플리케이션
  • 이미지 : 컨테이너를 만들기위한 설계도+실행패키지 (애플리케이션, 실행환경, 실행방법)
  • 도커파일 : 이미지를 어떻게 만들지 적어놓은 설명서
  • 도커엔진 : 이미지 생성 + 컨테이너 실행을 담당하는 실행기

클라우드 환경(AWS/GCP/Azure)에서 컨테이너가 어떻게 활용되는가?

컨테이너란?

  • 클라우드 환경에서 컨테이너는 클라우드용 앱 패키지가 들어있는 장소라고 할 수 있다.
  • 클라우드 서버 위에서 실행되는 독립적인 어플리케이션 실행단위이다.
  • 클라우드용 앱 패키지 컨테이너 안에는 Spring Boot 앱, JDK, 라이브러리, 설정 파일이 들어있다.
  • 기존에는 서버 1대에 앱 1개만 띄울 수 있었다면, 컨테이너의 등장으로 서버 1대에 여러개의 앱을 띄울 수 있게 되었다.
  • 로컬 / 테스트 / 운영 에 동일한 컨테이너 이미지를 사용하여 완전한 환경 차이를 줄 수 있다.

    클라우드에서 Docker를 사용하는 이유

    1. 마이크로서비스 아키텍처 (MSA) 구현
    • 컨테이너는 애플리케이션을 독립적인 작은 서비스(마이크로서비스)로 분리하고 패키징하는 데 이상적이다. 각 서비스는 컨테이너 내에서 독립적으로 실행 및 배포될 수 있으며, 이는 복잡한 애플리케이션의 개발, 배포 및 유지 관리를 용이하게 한다.
      1. 효율적인 리소스 관리 및 확장성
    • 컨테이너화된 애플리케이션은 개별 서버가 아닌 다양한 클라우드 인스턴스에서 로드 밸런싱이 가능하므로 리소스 사용을 최적화할 수 있다. 필요에 따라 특정 서비스의 컨테이너 수를 유연하게 확장하거나 축소할 수 있어 트래픽 변화에 신속하게 대응할 수 있다.
      1. 개발 및 운영(DevOps) 효율성 증대
    • 컨테이너는 애플리케이션 코드와 모든 종속성을 패키지화하므로 개발자의 로컬 환경, 온프레미스 데이터 센터, 퍼블릭 클라우드 등 어디서나 일관된 환경에서 실행될 수 있다. 이는 “내 PC에서는 되는데 서버에서는 안 되는” 문제를 해결하고, CI/CD(지속적 통합/지속적 배포) 파이프라인을 가속화한다.

      클라우드 제공 업체 별 컨테이너 서비스

  • 쿠버네티스(Kubernetes)를 기반으로 한 관리형 서비스를 중심으로 다양한 컨테이너 관련 솔루션을 제공한다.
  • AWS (Amazon Web Services):
    • Amazon EKS (Elastic Kubernetes Service): AWS에서 쿠버네티스 컨트롤 플레인을 관리해주는 완전 관리형 쿠버네티스 서비스이다.
    • Amazon ECS (Elastic Container Service): AWS 네이티브 컨테이너 오케스트레이션 서비스로, 사용이 비교적 간단하며 AWS의 다른 서비스와 긴밀하게 통합된다.
    • AWS Fargate: 서버나 클러스터 관리에 대한 걱정 없이 컨테이너를 실행할 수 있는 서버리스 컴퓨팅 엔진이다.
  • GCP (Google Cloud Platform):
    • GKE (Google Kubernetes Engine): 쿠버네티스(Google에서 시작한 오픈소스 프로젝트)를 기반으로 하는 완전 관리형 환경이다. 자동 업그레이드 및 확장 기능을 제공하여 관리를 간소화한다.
    • Cloud Run: 요청 시에만 컨테이너가 실행되는 서버리스 플랫폼으로, 트래픽이 없을 때는 비용이 발생하지 않아 비용 효율적이다.
  • Azure (Microsoft Azure):
    • AKS (Azure Kubernetes Service): Azure에서 쿠버네티스 클러스터 배포를 간소화하는 관리형 쿠버네티스 서비스이다.
    • Azure Container Instances (ACI): 컨테이너를 빠르게 배포할 수 있는 가장 간단한 방법 중 하나로, 오케스트레이션 플랫폼 없이 단일 컨테이너 실행에 적합하다.

VM과 Docker의 차이점 정리

VM과 컨테이너의 차이점

  • VM은 서버를 나눠쓰는 방식이고, Docker 서버위에서 앱만 나누어 쓰는 방식이다.
  • 핵심정리

    구분 VM Docker (컨테이너)
    격리 단위 OS 전체 프로세스
    OS 포함 ⭕ 포함 ❌ 미포함
    실행 속도 느림 (분) 빠름 (초)
    용량 GB 단위 MB~수백 MB
    자원 효율 낮음 ⭐⭐⭐
    배포 속도 느림 ⭐⭐⭐
    스케일링 서버 단위 컨테이너 단위
  • 다만, 데이터는 영구적으로 저장되어야하기 때문에 데이터는 컨테이너 밖(volume / VM)에있다.
  • 기술적으로 Docker이미지에 넣을 수는 있으나, 컨테이너가 죽으면 데이터가 날아가기 때문에 실무에서는 권장하지 않는다.
  • 실무에선 앱 이미지와 DB 이미지를 분리한다.
  • 상황에 따른 결과

    상황 이미지 컨테이너 데이터
    컨테이너 종료
    서버 재부팅
    서버 삭제
    레지스트리 사용