Dockerfile 部署
正常情况下你无需自行撰写 Dockerfile,Zeabur 目前已针对各种主流框架提供了快速部署的方式,但如果你的项目不是使用这些框架,或是你想要自行定义部署的方式,你可以使用 Dockerfile 来部署。
建立 Dockerfile
在你的项目根目录建立一个名为 Dockerfile 或 dockerfile 的文件,并编辑,最后须确保你有暴露对应的 PORT。
Zeabur 会自动检测你的项目是否有 Dockerfile,如果有的话会以 Docker 的方式来部署你的项目。
开始部署后即可在上方看到 Docker 的图标,代表你的项目已经以 Docker 的方式来部署。

不使用 Dockerfile 部署
如果你的项目有 Dockerfile,但你不希望在 Zeabur 上使用这个 Dockerfile(例如想由 Zeabur 决定项目最佳的部署方式),你可以在环境变量中设置 ZBPACK_IGNORE_DOCKERFILE=true,或在 zbpack.json 里面加入:
{
"ignore_dockerfile": true
}Zeabur 就会忽略你的 Dockerfile,而由 Zeabur 自动决定部署方式。
环境变量
如果你的 Dockerfile 需要使用到环境变量,你可以在该服务的页面点选 环境变量 来新增,更多的设置方式请参考 环境变量。

如果你的 Dockerfile 只是单阶段 (stage),或是你的环境变量只需在最后一个阶段中使用,那么你就你无需手动写 ENV,Zeabur 会自动帮你加上。
ARG
但如果你的 Dockerfile 使用了多阶段 (multi-stage) 特性,并且需要在建置前就设置环境变量,你可以使用 ARG 来设置。
以下我们以 nodejs 及 nginx 为例,撰写一个 Dockerfile 来部署。
FROM node:18-alpine AS builder
WORKDIR /app
COPY . .
## 这里的 BUILDTIME_ENV_EXAMPLE 会自动在建置前被设置
ARG BUILDTIME_ENV_EXAMPLE
ENV BUILDTIME_ENV_EXAMPLE=${BUILDTIME_ENV_EXAMPLE}
RUN npm install && \
npm run build
FROM nginx:alpine
COPY nginx.conf /etc/nginx/conf.d/configfile.template
COPY --from=builder /app/dist /usr/share/nginx/html
ENV \
PORT=8080 \
HOST=0.0.0.0
EXPOSE 8080
CMD sh -c "envsubst '\$PORT' < /etc/nginx/conf.d/configfile.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"指定要部署的 Dockerfile(单一 repo 多服务 / monorepo)
当你的 repo 包含多个 Dockerfile(例如 monorepo 结构,一个仓库部署多个服务),Zeabur 提供三种方式来指定每个服务使用哪个 Dockerfile。
方法一:用服务名称自动匹配(推荐)
最简单的方式:将 Dockerfile 命名为 [服务名称].Dockerfile 或 Dockerfile.[服务名称],Zeabur 会根据你在 dashboard 上设置的服务名称自动匹配。例如,服务名称是 storage,Zeabur 会自动使用 Dockerfile.storage 或 storage.Dockerfile。

方法二:用 ZBPACK_DOCKERFILE_NAME 指定后缀
如果 Dockerfile 已命名为 <suffix>.Dockerfile 或 Dockerfile.<suffix>,但你不想让服务名称跟着改,可以用环境变量明确指定后缀:
ZBPACK_DOCKERFILE_NAME=storage或在 zbpack.json 中:
{
"dockerfile": {
"name": "storage"
}
}Zeabur 会查找 Dockerfile.storage 或 storage.Dockerfile。
这个变量只接受后缀,不要填完整文件名。如果你设置成 ZBPACK_DOCKERFILE_NAME=Dockerfile.storage,Zeabur 会去找名为 Dockerfile.Dockerfile.storage 的文件,找不到就会回退到自动检测(通常会误判成 Node.js 等其他 builder)。如果你想填完整路径或文件名,请改用下面的 ZBPACK_DOCKERFILE_PATH。
方法三:用 ZBPACK_DOCKERFILE_PATH 指定任意路径
如果 Dockerfile 不在构建根目录、或文件名不符合 *.Dockerfile / Dockerfile.* 惯例,可以用这个变量指定 Dockerfile 的路径。路径是相对于该服务的「构建根目录」——若服务设定了 Root Directory,则相对于该目录,否则相对于 repo 根目录:
ZBPACK_DOCKERFILE_PATH=apps/admin/Dockerfile或在 zbpack.json 中:
{
"dockerfile": {
"path": "apps/admin/Dockerfile"
}
}Zeabur 会直接使用该路径下的文件来构建,不再做后缀匹配。这是你想指定子目录里的 Dockerfile、或文件名完全自定义时应该用的变量。
Docker Compose
Zeabur 当前尚不支持从 Docker Compose YAML 进行部署。
您可以将 Docker Compose 文件转换为 Zeabur Template YAML,详情可以参考《从 YAML 创建模板》。如果需要帮助,也可以在 社区 中向我们提问。