KDT:::Sparta MSA 아키텍처 3기(week09,10)
Docker의 주요 개념
- Docker는 애플리케이션을 ‘컨테이너’라는 단위로 포장해서 어디서든 똑같이 실행하게 해주는 플랫폼
Docker 핵심 개념
- 컨테이너 : 실제 실행중인 애플리케이션
- 이미지 : 컨테이너를 만들기위한 설계도+실행패키지 (애플리케이션, 실행환경, 실행방법)
- 도커파일 : 이미지를 어떻게 만들지 적어놓은 설명서
- 도커엔진 : 이미지 생성 + 컨테이너 실행을 담당하는 실행기
클라우드 환경(AWS/GCP/Azure)에서 컨테이너가 어떻게 활용되는가?
컨테이너란?
- 클라우드 환경에서 컨테이너는 클라우드용 앱 패키지가 들어있는 장소라고 할 수 있다.
- 클라우드 서버 위에서 실행되는 독립적인 어플리케이션 실행단위이다.
- 클라우드용 앱 패키지 컨테이너 안에는 Spring Boot 앱, JDK, 라이브러리, 설정 파일이 들어있다.
- 기존에는 서버 1대에 앱 1개만 띄울 수 있었다면, 컨테이너의 등장으로 서버 1대에 여러개의 앱을 띄울 수 있게 되었다.
- 로컬 / 테스트 / 운영 에 동일한 컨테이너 이미지를 사용하여 완전한 환경 차이를 줄 수 있다.
클라우드에서 Docker를 사용하는 이유
- 마이크로서비스 아키텍처 (MSA) 구현
- 컨테이너는 애플리케이션을 독립적인 작은 서비스(마이크로서비스)로 분리하고 패키징하는 데 이상적이다. 각 서비스는 컨테이너 내에서 독립적으로 실행 및 배포될 수 있으며, 이는 복잡한 애플리케이션의 개발, 배포 및 유지 관리를 용이하게 한다.
- 효율적인 리소스 관리 및 확장성
- 컨테이너화된 애플리케이션은 개별 서버가 아닌 다양한 클라우드 인스턴스에서 로드 밸런싱이 가능하므로 리소스 사용을 최적화할 수 있다. 필요에 따라 특정 서비스의 컨테이너 수를 유연하게 확장하거나 축소할 수 있어 트래픽 변화에 신속하게 대응할 수 있다.
- 개발 및 운영(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 이미지를 분리한다.
-
상황에 따른 결과
상황 이미지 컨테이너 데이터 컨테이너 종료 ⭕ ❌ ❌ 서버 재부팅 ⭕ ❌ ❌ 서버 삭제 ❌ ❌ ❌ 레지스트리 사용 ⭕ ⭕ ⭕