Dockerfile を使用したデプロイ
通常、自分で Dockerfile を書く必要はありません。Zeabur では現在、さまざまな人気のあるフレームワークに対する高速なデプロイ方法を提供していますが、もしあなたのプロジェクトがこれらのフレームワークを利用していない場合や独自のデプロイ方法を定義したい場合は、Dockerfile を使用してデプロイすることができます。
Dockerfile の作成
プロジェクトのルートディレクトリに Dockerfile または dockerfile という名前のファイルを作成し、そこにデプロイ方法を記述します。最後に、対応する PORT を公開していることを確認してください。
Zeabur は自動的にあなたのプロジェクトに Dockerfile があるかどうかを検出します。もし存在する場合は、Docker を使用してプロジェクトをデプロイします。
デプロイが開始されると、上に Docker アイコンが表示されます。これはプロジェクトが Docker を使用してデプロイされたことを意味します。

Dockerfile を使用せずにデプロイする
Zeabur で Dockerfile を使用しないようにする場合(例えば、Zeabur にこのプロジェクトの最適なデプロイ方法を決定させること)、環境変数に ZBPACK_IGNORE_DOCKERFILE=true を設定するか、zbpack.json に以下を追加することができます。
{
"ignore_dockerfile": true
}すると、Zeabur は Dockerfile を無視し、自動的にデプロイメントの方法を決定します。
環境変数
あなたの Dockerfile が環境変数を使用する必要がある場合は、サービスページの 環境変数 をクリックして追加することができます。詳細な設定については、環境変数 を参照してください。

もしあなたの Dockerfile が 1 つの段階で書かれているか、あるいはあなたの環境変数が最終段階でのみ使用される必要がある場合は、手動で ENV を書く必要はありません。Zeabur は自動的に追加します。
ARG
しかし、あなたの Dockerfile が複数の段階で書かれており(マルチステージ)、ビルド前に環境変数を設定する必要がある場合は、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 を指定する(モノレポ/1 つの repo から複数サービス)
repo に複数の Dockerfile がある場合(例えばモノレポで 1 つのリポジトリから複数のサービスをデプロイする場合)、Zeabur では各サービスが使用する Dockerfile を指定する 3 つの方法を用意しています。
方法 1:サービス名による自動マッチ(推奨)
最もシンプルな方法は、Dockerfile を [サービス名].Dockerfile または Dockerfile.[サービス名] という名前にすることです。Zeabur は dashboard で設定したサービス名に基づいて、対応する Dockerfile を自動的に選びます。例えば、サービス名が storage であれば、Zeabur は自動的に Dockerfile.storage(または storage.Dockerfile)を使用します。

方法 2: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 などの誤ったビルダーが選ばれます)。完全なパスやファイル名を渡したい場合は、下の ZBPACK_DOCKERFILE_PATH を使用してください。
方法 3: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 テンプレート YAML に変換することができます。詳細については、「YAML からテンプレートを作成する」をご参照ください。ヘルプが必要な場合は、コミュニティ でお気軽にお問い合わせください。