Dockerfile 部署
正常情况下你无需自行撰写 Dockerfile
,Zeabur 目前已针对各种主流框架提供了快速部署的方式,但如果你的项目不是使用这些框架,或是你想要自行定义部署的方式,你可以使用 Dockerfile
来部署。
Zeabur 目前仅支持 Dockerfile
的部署方式,目前不提供 Docker Compose 的方式。
建立 Dockerfile
在你的项目根目录建立一个名为 Dockerfile
或 dockerfile
的文件,并编辑,最后须确保你有暴露对应的 PORT
。
Zeabur 会自动检测你的项目是否有 Dockerfile
,如果有的话会以 Docker 的方式来部署你的项目。
开始部署后即可在上方看到 Docker 的图标,代表你的项目已经以 Docker 的方式来部署。
不使用 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 部署你的项目,并到「设置」→「服务名称」中改成你想部署的服务名称,比如 storage
、discord
或 frontend
:
然后点击「Redeploy」重新部署项目,即可部署你想要的服务。你也可以与 监控路径 搭配使用,只在修改相应文件时才触发部署。
Docker Compose
Zeabur 目前仅支持 Dockerfile
的部署方式,目前不提供 Docker Compose 的方式。