컨테이너 배포의 혼란을 해결하는 ECS, Cloud Run, Swarm 전략
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
- 개발자/DevOps 엔지니어
- 중간~고급 수준의 Docker/컨테이너 배포 경험자
- AWS, Google Cloud, 온프레미스 환경에서 배포를 수행해야 하는 팀
핵심 요약
- AWS ECS :
aws ecr
및task-definition.json
을 통해 완전한 제어권을 얻지만, VPC/IAM 설정 복잡성 증가 - Cloud Run :
gcloud run deploy
명령어로 1단계 배포 가능, 무상 계층 제공(월 200만 요청) - Docker Swarm :
docker stack deploy
명령어로 3단계 배포, 온프레미스 서버 최적화
섹션별 세부 요약
1. 컨테이너 배포의 주요 과제
- ECS : YAML 구성, 클러스터/서비스 설정, IAM 역할 설정 등 복잡한 인프라 관리 필요
- Cloud Run : Cold Start 지연(500ms) 및 상태 없는 앱 제한
- Swarm : 자동 복구(auto-healing) 기능 부재
2. ECS 배포 절차
- ECR에 이미지 푸시:
```bash
aws ecr create-repository --repository-name my-app
docker tag my-app:latest 123456789.dkr.ecr.us-east-1.amazonaws.com/my-app:latest
docker push 123456789.dkr.ecr.us-east-1.amazonaws.com/my-app:latest
```
- Task 정의 파일 생성:
```json
{
"containerDefinitions": [
{
"name": "my-app",
"image": "ECR_IMAGE_URI",
"memory": 512,
"portMappings": [{"containerPort": 3000}]
}
]
}
```
- 클러스터 생성:
aws ecs create-cluster --cluster-name my-cluster
- 서비스 실행:
aws ecs create-service --cluster my-cluster --desired-count 2
3. Cloud Run 배포 절차
- 1명령어 배포:
```bash
gcloud run deploy my-service --source . --platform managed --region us-central1 --allow-unauthenticated
```
- 장점:
- 자동 스케일링(0~무한)
- HTTPS/CDN 내장
- 무료 계층 제공
- 단점:
- Cold Start 지연
- 상태 없는 앱만 지원
4. Docker Swarm 배포 절차
- Swarm 초기화:
docker swarm init
- 스택 배포:
```bash
docker stack deploy -c docker-compose.prod.yml my-stack
```
- 상태 확인:
docker service ls
- docker-compose.prod.yml 예시:
```yaml
version: "3.8"
services:
web:
image: my-app:latest
deploy:
replicas: 3
restart_policy:
condition: on-failure
resources:
limits:
memory: 512M
ports:
- "80:3000"
```
5. 플랫폼 선택 가이드
| 시나리오 | ECS | Cloud Run | Swarm |
|------------------|-------------|----------------|--------------|
| MVP 런칭 | ❌ | ✅🚀 | ✅ |
| 기업 규제 준수| ✅ | ❌ | ❌ |
| 학습 곡선 | 복잡(Vertical) | 간단(Gentle) | 평탄(Flat) |
6. 실제 사례
- Startup A: ECS → Cloud Run 전환으로 월 $200 → $5 비용 절감
- Startup B: 온프레미스 하드웨어 사용으로 연간 $15,000 절감
- 실패 사례: ECS 사용 시 VPC 지식 부족으로 $500 NAT 게이트웨이 비용 발생
결론
- Cloud Run : 1명령어로 신속한 배포가 필요한 경우 최적
- Swarm : 온프레미스 서버 관리가 필요한 경우 선택
- ECS : AWS 전용 기능(VPC, 보안)이 필수적인 경우 사용
- 핵심 팁: Docker 이미지 최소화(
node:alpine
사용), 메모리 제한 설정, GitHub Actions 자동화(deploy-cloudrun
액션 활용)