sell運算
deployed_code

Containers

當 Worker 不夠用時,啟動一個真正的容器——你自己的 Docker 映像檔、完整的檔案系統、任何語言——而且全程由 Worker 程式碼控制。

6執行個體規格
12 GiB最大記憶體
4最多 vCPU
Earth部署區域
lightbulb

Containers 是什麼?

Cloudflare Containers 讓你在 Cloudflare 的網路上執行一個完整的容器映像檔(container image,把作業系統、函式庫和檔案全部打包在一起),而且由你的 Worker 程式碼直接啟動和管理。

「容器(container)」是一個自給自足的盒子,裡面裝著一個應用程式,以及它執行所需要的一切。最常見的打包方式是用 Docker。當輕量的 Worker 做不到某些事時,容器就派上用場——例如你需要某個特定的程式語言、大量記憶體、多核心 CPU、或是一顆真正的硬碟。

luggage

把它想成…

Worker 像是兩手空空就能跑的快速差事;容器則像一個打包好的行李箱——它把你的 App 需要的一切(作業系統、工具、檔案)都裝在裡面,所以不管放到哪裡,跑起來都一模一樣。

help

為什麼要用它?

Workers 又快又便宜,但它跑在一個記憶體有限、只支援少數語言的沙盒裡。有些工作就是需要更多資源。Containers 正好補上這個缺口——而且你不用學 Kubernetes,也不用自己架伺服器。

memory

更多算力

最多可用 4 個 vCPU 和 12 GiB 記憶體——遠超 Worker 的 128 MB 上限。

translate

任何語言

可以跑 Python、Go、Java、FFmpeg,或任何能在 Linux 上執行的程式——不限於 JavaScript。

folder_open

真正的檔案系統

在一顆完整的硬碟上讀寫檔案(最多 20 GB),很適合資料處理或暫存。

inventory_2

帶上現有映像檔

已經有 Docker 映像檔了嗎?原封不動就能部署——不用改寫。

auto_awesome

免維運

Cloudflare 幫你佈署、擴充、導流。沒有叢集(cluster)、也沒有編排(orchestration)要管。

link

與 Worker 緊密整合

容器由 Worker 程式碼控制,所以能直接接上你其他的服務。

target

什麼時候該用?

只要一項工作對單純的 Worker 來說太重、太特殊、或太「Linux」,就該考慮 Containers。

movie

媒體處理

用 FFmpeg 之類需要 CPU 和檔案系統的工具,轉換影片或圖片格式。

psychology

重量級運算

執行超出 Worker 記憶體的資料運算、模擬,或模型推論。

code

現有應用

把現有的 Python / Go / Java 服務,連同 Docker 映像檔搬上 Cloudflare 網路。

terminal

命令列工具與執行檔

把只提供 Linux 執行檔的命令列工具包起來,再由 Worker 呼叫它。

sandbox

不可信的程式碼

在隔離的容器沙盒裡,執行使用者上傳或 AI 產生的程式碼。

build

自訂執行環境

需要特定的作業系統版本、系統函式庫或奇怪的相依套件?通通烤進映像檔裡。

rocket_launch

怎麼開始用?

你用一個 Dockerfile 定義容器,在 wrangler.jsonc 裡讓 Worker 指向它,再用 Wrangler 部署。Cloudflare 會建置映像檔,並依需求啟動執行個體。(Containers 需要 Workers 付費方案。)

  1. 用範本建立專案

    從 Cloudflare 官方的 containers 範本開始,裡面已經把 Dockerfile 和 Worker 接好了。

    bash
    npm create cloudflare@latest -- --template=cloudflare/templates/containers-template
  2. 設定容器

    在 wrangler.jsonc 裡幫容器類別命名、指向你的 Dockerfile,並限制最多能同時跑幾個執行個體。

    jsonc
    {
      "name": "my-container-app",
      "main": "src/index.js",
      "compatibility_date": "2025-05-23",
      "containers": [
        {
          "class_name": "MyContainer",
          "image": "./Dockerfile",
          "max_instances": 10
        }
      ],
      "durable_objects": {
        "bindings": [
          { "name": "MY_CONTAINER", "class_name": "MyContainer" }
        ]
      },
      "migrations": [
        { "tag": "v1", "new_sqlite_classes": ["MyContainer"] }
      ]
    }
  3. 部署

    Wrangler 會建置你的映像檔、推送上去並上線。執行個體會依需求啟動,閒置時自動休眠。

    bash
    npx wrangler deploy
jssrc/index.js — 把請求導向容器
import { Container, getContainer } from "@cloudflare/containers";

export class MyContainer extends Container {
  // The port your container app listens on
  defaultPort = 8080;
  // Put the container to sleep after 10 minutes idle
  sleepAfter = "10m";
}

export default {
  async fetch(request, env) {
    // Get (or start) a container instance and forward the request to it
    const container = getContainer(env.MY_CONTAINER);
    return container.fetch(request);
  },
};
dataset

容器是建立在 Durable Objects 上的

在底層,每個容器都是由一個 Durable Object 管理的——這就是為什麼設定檔裡有 durable_objects 綁定和 migration。你不用懂 Durable Objects 也能用 Containers,但這正是它們整合得這麼順的原因。

school

重點概念

inventory_2

映像檔(image)

你 App 與其執行環境打包好的藍圖,通常由 Dockerfile 建置而來。

memory

執行個體規格

機器的大小——從 lite(256 MiB)一路到 standard-4(4 vCPU、12 GiB、20 GB 硬碟)。

settings_power

隨需執行個體

容器在需要時啟動、閒置時休眠,所以你只在它醒著時付費。

bedtime

sleepAfter(休眠時間)

閒置的容器在休眠省資源前,要先醒著多久,例如 "10m"(10 分鐘)。

tag

容器類別

一個繼承自 Container 的 JavaScript 類別,用來定義容器的連接埠和行為。

tune

max_instances(上限)

限制同一時間最多能跑幾個容器副本——對控制成本很有用。

tips_and_updates

小提示與計費

bedtime

讓它好好睡

容器醒著時,你要為記憶體和硬碟付費;vCPU 則只在「實際運算」時計費。設定一個合理的 sleepAfter,閒置的容器才不會一直累積費用。

執行個體規格

  • lite — 1/16 vCPU、256 MiB 記憶體、2 GB 硬碟
  • basic — 1/4 vCPU、1 GiB 記憶體、4 GB 硬碟
  • standard-1 — 1/2 vCPU、4 GiB 記憶體、8 GB 硬碟
  • standard-2 — 1 vCPU、6 GiB 記憶體、12 GB 硬碟
  • standard-3 — 2 vCPU、8 GiB 記憶體、16 GB 硬碟
  • standard-4 — 4 vCPU、12 GiB 記憶體、20 GB 硬碟
credit_card

需要付費方案

Containers 需要每月 5 美元的 Workers 付費方案,方案內含每月免費額度(25 GiB-小時記憶體、375 vCPU-分鐘、200 GB-小時硬碟),超過才會開始按用量計費。