文档生产部署

Docker 与容器

使用官方 Deno 镜像、非 root 用户、缓存分层与最小权限构建生产容器

多阶段示例

FROM denoland/deno:alpine AS build
WORKDIR /app
# 先复制 manifest 与 lockfile 安装依赖,源码变化不使依赖层失效
COPY deno.json deno.lock ./
RUN deno ci
COPY . .
RUN deno install --entrypoint main.ts

FROM denoland/deno:distroless
WORKDIR /app
COPY --from=build /app /app
# 依赖缓存在 DENO_DIR(/deno-dir),不随 /app 复制,必须显式带过来
COPY --from=build /deno-dir /deno-dir
USER deno
EXPOSE 8000
CMD ["run", "--cached-only", "--allow-net", "--allow-env=PORT", "main.ts"]

根据依赖选择 debianalpinedistroless。需要 shell、CA、字体或系统库时,不要只为镜像更小而使用缺少调试能力的变体。

生产检查

  • 固定 Deno 镜像标签或 digest,不用漂移的 latest 发布。
  • .dockerignore 排除 .git、密钥、覆盖率与本地缓存。
  • 使用非 root 用户并保持只读根文件系统;只挂载需要写入的目录。
  • 0.0.0.0 监听和 PORT 行为由应用明确实现。
  • 让平台发送 SIGTERM,测量优雅退出时长。
  • 如果运行时禁止联网解析依赖,构建阶段预缓存并用 --cached-only 验证。

官方参考:Deno and Docker

输入关键词搜索全部文档。