클라우드플레어 컨테이너: 글로벌 도커 배포로 한 줄 명령어
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
- 대상: DevOps 엔지니어, 클라우드 개발자
- 난이도: 중급(도커, 클라우드플레어 워커 및 Durable Object 사용 경험 필요)
핵심 요약
- Cloudflare Containers는
wrangler deploy
명령어로 글로벌 배포가 가능하며, 워커와 Durable Object를 통한 컨테이너 인스턴스 관리가 제공됨 @cloudflare/containers
패키지의Container
클래스를 사용하여 Durable Object 템플릿 추상화 가능- 비용 모델: 사용 시간 기반 청구(10ms 단위), 자동 스케일링 및 0 인스턴스 대기 상태 지원
섹션별 세부 요약
1. 시스템 구조 및 작동 방식
- Worker가 프로그래밍 가능한 엔트리포인트로, 요청을 컨테이너 인스턴스로 라우팅
- Durable Object가 컨테이너 인스턴스의 생명주기 관리 역할 수행
Container
클래스를 통해 Durable Object 템플릿을 추상화,wrangler.jsonc
에 컨테이너 설정 정의 가능
2. 구현 예제 및 코드 구조
wrangler.jsonc
설정 예시:
```json
{
"containers": [{"class_name": "MyContainer", "image": "./Dockerfile", "max_instances": 10}],
"durable_objects": {"bindings": [{"name": "MY_CONTAINER", "class_name": "MyContainer"}]}
}
```
- Worker 코드에서
Container
클래스 확장:
```typescript
export class MyContainer extends Container {
defaultPort = 8080;
sleepAfter = "10s";
envVars = { MESSAGE: "Hello from my Worker!" };
override onStart() { console.log("Container started"); }
}
```
- 라우팅 로직:
- /sandbox/
경로: 유니크 ID 기반의 상태 유지 컨테이너 인스턴스 라우팅
- /api/
경로: 랜덤 로드 밸런서를 통한 무상태 컨테이너 풀 사용
3. 배포 프로세스 및 요구 사항
- 필수 조건: 로컬에 Docker 설치 및 실행(
docker info
로 확인) - 배포 명령어:
```bash
npm create cloudflare@latest -- --template=cloudflare/templates/containers-template
wrangler deploy
```
- 배포 단계:
- 로컬 Docker 데몬을 사용한 컨테이너 이미지 빌드
- 자동 구성된 Cloudflare Container Registry에 이미지 푸시
- 워커 배포 및 글로벌 인스턴스 생성
4. 인스턴스 타입 및 청구 요금
- 인스턴스 타입:
| 타입 | 메모리 | CPU | 디스크 |
|----------|--------|-----------|--------|
| dev
| 256 MiB | 1/16 vCPU | 2 GB |
| basic
| 1 GiB | 1/4 vCPU | 4 GB |
| standard
| 4 GiB | 1/2 vCPU | 4 GB |
- 청구 요금:
- 메모리: $0.0000025 per GiB-초
- CPU: $0.000020 per vCPU-초
- 디스크: $0.00000007 per GB-초
- 데이터 이gress: 지역별 차등 요금 적용(예: 미국/유럽 $0.025/GB, 1TB 무료 제공)
5. 향후 기능 및 확장성
- 글로벌 자동 스케일링:
autoscale = true
설정으로 지연 시간 기반 자동 확장 - 심층 통합: R2 버킷, Hyperdrive, KV 등 직접 액세스 API 지원 예정
- 강화된 커뮤니케이션: 워커에서 컨테이너 내
exec
명령어 실행 및 양방향 요청 처리 가능
결론
- Cloudflare Containers는
wrangler deploy
로 단일 명령어로 글로벌 배포 가능하며, 사용 시간 기반 청구로 비용 효율성 확보 - Durable Object와의 통합을 통해 상태 유지/무상태 서비스 동시 지원, 자동 스케일링 및 0 인스턴스 대기 기능으로 확장성 극대화
- 향후 기능으로는 자동 스케일링, R2/Hyperdrive 통합, 양방향 커뮤니케이션 기능 추가 예정