部署Dockerfile 部署

Dockerfile 部署

正常情况下你无需自行撰写 Dockerfile,Zeabur 目前已针对各种主流框架提供了快速部署的方式,但如果你的项目不是使用这些框架,或是你想要自行定义部署的方式,你可以使用 Dockerfile 来部署。

⚠️

Zeabur 目前仅支持 Dockerfile 的部署方式,目前不提供 Docker Compose 的方式。

建立 Dockerfile

在你的项目根目录建立一个名为 Dockerfiledockerfile 的文件,并编辑,最后须确保你有暴露对应的 PORT

Zeabur 会自动检测你的项目是否有 Dockerfile,如果有的话会以 Docker 的方式来部署你的项目。

开始部署后即可在上方看到 Docker 的图标,代表你的项目已经以 Docker 的方式来部署。

docker-deploy

不使用 Dockerfile 部署

如果你的项目有 Dockerfile,但你不希望在 Zeabur 上使用这个 Dockerfile(比如说你想使用 Zeabur 提供的 Serverless 功能),你可以在环境变量中设置 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;'"

制作 Monorepo 中针对特定服务的 Dockerfile

如果你的 Monorepo 里面有不同项目想分开部署,你可以创建 Dockerfile.[服务名称](或 [服务名称].Dockerfile) 并通过服务名称部署指定的 Dockerfile。

以这个案例来说,如果你想部署三个微服务,但都使用同一个 Git Repository,你可以这样命名自己的 Dockerfile:

  • Dockerfile.storage(或 storage.Dockerfile): 部署 Node.js 的 storage 微服务
  • Dockerfile.discord(或 discord.Dockerfile): 部署 Node.js 的 discord 微服务
  • Dockerfile.frontend(或 frontend.Dockerfile): 部署 Next.js 的 frontend 前端

然后在 Zeabur 部署你的项目,并到「设置」→「服务名称」中改成你想部署的服务名称,比如 storagediscordfrontend

specify-service-name

然后点击「Redeploy」重新部署项目,即可部署你想要的服务。你也可以与 监控路径 搭配使用,只在修改相应文件时才触发部署。

Docker Compose

Zeabur 目前仅支持 Dockerfile 的部署方式,目前不提供 Docker Compose 的方式。