cloudflare containers の 使い方を Claude Code にまとめさせた
https://github.com/yusukebe/image-resize-containers/tree/main
Cloudflare Containerは、Cloudflare Workers上でDockerコンテナを実行できる新機能です。このドキュメントでは、画像リサイズアプリケーションを例に、Container機能の実装方法をまとめます。
- Workers - HTTPリクエストを受け取り、軽量な処理を実行
- Container - CPU集約的な処理(画像リサイズなど)を実行
- Durable Objects - コンテナインスタンスの管理と状態保持
{
"dependencies": {
"@cloudflare/containers": "^0.1.21",
"hono": "^4.6.21"
}
}
{
"containers": [
{
"class_name": "MyContainer",
"image": "./Dockerfile",
"max_instances": 10,
"name": "image-resize-containers"
}
],
"durable_objects": {
"bindings": [
{
"class_name": "MyContainer",
"name": "IMAGE_RESIZE_CONTAINER"
}
]
}
}
import { Container } from '@cloudflare/containers'
export class MyContainer extends Container {
defaultPort = 8080 // コンテナがリッスンするポート
sleepAfter = '2m' // アイドル時の自動スリープ時間
override onStart() {
console.log('Container successfully started')
}
override onStop() {
console.log('Container successfully shut down')
}
override onError(error: unknown) {
console.log('Container error:', error)
}
}
import { getRandom } from '@cloudflare/containers'
// ランダムなコンテナインスタンスを取得
const container = await getRandom(c.env.IMAGE_RESIZE_CONTAINER)
// コンテナにリクエストを送信
const response = await container.fetch('http://localhost/resize?' + params, {
method: 'POST',
body: formData
})
FROM golang:1.24-alpine AS build
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY *.go ./
RUN CGO_ENABLED=0 GOOS=linux go build -o /server
FROM scratch
COPY --from=build /server /server
EXPOSE 8080
CMD ["/server"]
- 自動スケーリング: 最大インスタンス数まで自動的にスケール
- 自動スリープ: アイドル時は自動的にスリープして効率化
- Durable Objects統合: 状態管理とインスタンス管理
- 標準的なHTTP通信: fetch APIで簡単に通信可能
- コンテナの起動には時間がかかるため、初回リクエストは遅延する可能性
sleepAfter
の設定により、アイドル時のコスト削減が可能max_instances
でコンテナ数を制限し、リソース使用を管理
# 開発環境での実行
npm run dev
# 本番環境へのデプロイ
npm run deploy
Cloudflare Containerは以下のような場面で特に有効です:
- 画像・動画処理: CPU集約的な処理をコンテナで実行
- 機械学習推論: 既存のMLモデルをコンテナ化して実行
- レガシーアプリケーション: 既存のアプリケーションをそのまま実行
- 言語固有の処理: Workers非対応の言語での処理実行
Cloudflare Containerを使用することで、Workersの高速性とコンテナの柔軟性を組み合わせた効率的なアーキテクチャを構築できます。軽量な処理はWorkersで、重い処理はコンテナで実行することで、コストとパフォーマンスの最適化が可能になります。