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
如果想指定用于项目部署的 Dockerfile,请将 Dockerfile 命名为 [服务名称].Dockerfile
或 Dockerfile.[服务名称]
。例如,如果你的项目中有一个 Dockerfile.storage
文件,而你的服务名称是 storage
,Zeabur 将会使用这个 Dockerfile 来部署 storage
服务。
您也可以指定 ZBPACK_DOCKERFILE_NAME
环境变量,或者在 zbpack.json
中加入以下内容:
{
"dockerfile": {
"name": "storage"
}
}
例如,如果您在服务中设置了 ZBPACK_DOCKERFILE_NAME=storage
,Zeabur 将使用 Dockerfile.storage
作为 Dockerfile 来部署 storage
服务。
Docker Compose
Zeabur 当前尚不支持从 Docker Compose YAML 进行部署。
您可以将 Docker Compose 文件转换为 Zeabur Template YAML,详情可以参考《从 YAML 创建模板》。如果需要帮助,也可以在 社区 中向我们提问。