mcpField
Z
zeabur-dockerfile

zeabur-dockerfile

github.com/zeaburクラウド・DevOps39153 回インストール7 週間前に更新
リポジトリ

zeabur-dockerfile について

プロジェクトを分析し、Zeabur へのソースコードデプロイ用 Dockerfile を作成するためのスキルです。言語やフレームワーク別のルールに加え、静的サイト、既存 Dockerfile の確認、一般的なデプロイ問題を扱います。

主な機能

  1. 01プロジェクト設定と依存ファイルの確認
  2. 02言語、フレームワーク、起動コマンドの特定
  3. 03プロジェクト種別に応じた Dockerfile 作成
  4. 04既存 Dockerfile の確認とラベル追加
  5. 05Zeabur デプロイコマンドとトラブル対応

活用シーン

  1. 01アプリのソースを Zeabur デプロイ向けに準備
  2. 02静的サイトに適したコンテナイメージの選択
  3. 03ポートや起動コマンドの設定問題を調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/zeabur/agent-skills --skill zeabur-dockerfile

インストール後、Claude Code で/zeabur-dockerfileを入力して読み込まれたか確認します。

詳細

Zeabur Dockerfile の生成

Zeabur CLI の実行には、必ず npx zeabur@latest を使用してください。 zeabur を直接実行したり、ほかの方法でインストールしたりしないでください。npx が利用できない場合は、先に Node.js をインストールしてください。

ソースコードを Zeabur にデプロイするときは、Dockerfile を生成する必要があります。このスキルでは、プロジェクトを分析し、正しくデプロイ可能な Dockerfile を作成する方法を説明します。

前提条件

Dockerfile を生成する前に、主要なプロジェクトファイルを確認してください。

言語確認するファイル
Node.jspackage.json、ロックファイル(package-lock.json / yarn.lock / pnpm-lock.yaml)
Pythonrequirements.txt、Pipfile、pyproject.toml
Gogo.mod
RustCargo.toml
PHPcomposer.json
RubyGemfile
Javapom.xml、build.gradle
.NET*.csproj、*.sln
Elixirmix.exs

次のファイルも確認してください。

  • 既存の Dockerfile または docker-compose.yml
  • ビルド設定(vite.config.js、webpack.config.js、next.config.js など)
  • 必要な環境変数を確認できる .env.example

読まなくてよいもの — トークンを節約するため、次のファイルは確認しないでください。

  • HTML ファイル — 静的アセットであり、デプロイのロジックには影響しません
  • ロックファイルの内容 — パッケージマネージャーを特定するため、存在するロックファイルだけを確認してください。内容は解析しないでください。
  • Markdown ファイル — ドキュメントであり、Dockerfile の判断には影響しません

ワークフロー

1. プロジェクトを分析する

前提条件に記載したファイルから、次の情報を特定します。

  1. プログラミング言語とバージョン
  2. フレームワーク(使用している場合)
  3. パッケージマネージャー
  4. ビルドコマンド
  5. 起動コマンド
  6. アプリがリッスンするポート
  7. 静的サイトかサーバーサイドアプリか
2. Dockerfile を生成する
一般的なルール
  • Dockerfile にコメントを記述しないでください
  • ENV または ARG 命令を使用しないでください(フレームワークで必要な場合を除きます。言語別のセクションを参照してください)
  • LABEL "language"="<lang>" を追加してください。指定できる値は nodejs、python、go、static、ruby、java、php、rust、dotnet、elixir、swift、bun です
  • LABEL "framework"="<framework>" を追加するのは、実際の Web フレームワークの場合に限ります(下記の一覧を参照)
  • インストールまたはビルドコマンドを実行する前に、必ず COPY . . を記述してください
  • ユーザーから別の指定がない限り、WORKDIR /src を設定してください
  • アプリがリッスンするポートに対して EXPOSE を追加してください
  • ビルドイメージと実行イメージが異なる場合(例:Node.js でビルドし、zeabur/caddy-static で配信する場合)を除き、マルチステージビルドは使用しないでください
フレームワークとパッケージ — フレームワークラベルを付けるのは以下のみ

フレームワーク(LABEL "framework"="..." を使用): vite、create-react-app、next.js、remix、nuxt.js、umi、nest.js、hexo、vitepress、astro、sli.dev、docusaurus、nitropack、hono、medusa、svelte、flask、django、fastapi、spring-boot、laravel、thinkphp、rails、aspnet、blazorwasm、elysia、baojs

フレームワークとしてラベルを付けないでください(これらはパッケージ/ライブラリです)。

  • Python:gradio、pandas、numpy、requests、matplotlib、scikit-learn、tensorflow、pytorch、opencv、pillow、beautifulsoup4、selenium
  • Node.js:express、koa、hapi、fastify、socket.io、moment、lodash、axios
  • その他:bootstrap、jquery、chart.js、three.js、d3.js

フレームワークかパッケージか判断できない場合は、フレームワークラベルを追加しないでください。

静的サイト — zeabur/caddy-static

純粋な静的ウェブサイト(Vite、静的な Astro、Docusaurus、プレーンな HTML)には、zeabur/caddy-static を使用してください。

FROM node:22-slim AS build
LABEL "language"="nodejs"
LABEL "framework"="vite"
WORKDIR /src
COPY . .
RUN npm install
RUN npm run build

FROM zeabur/caddy-static
COPY --from=build /src/dist /usr/share/caddy

zeabur/caddy-static のルール:

  • ビルド出力を /usr/share/caddy にコピーしてください
  • CMD または ENTRYPOINT を追加しないでください — イメージが処理します
  • ポート 8080 でリッスンします
  • 真に静的なサイトにのみ使用してください。SSR フレームワーク(Next.js、Nuxt.js、SvelteKit など)には使用しないでください
  • Node.js でビルドして静的サイトとして配信する場合は、LABEL "language"="static" ではなく LABEL "language"="nodejs" を設定してください
Node.js
  • デフォルトのベースイメージ:node:22-slim
  • ロックファイルの有無でパッケージマネージャーを判断します。
ロックファイルパッケージマネージャーインストールコマンド
package-lock.jsonnpmnpm install
yarn.lockyarnyarn install
pnpm-lock.yamlpnpmRUN npm install -g pnpm && pnpm install
  • npm を使用する場合は、npm install を使用してください。npm ci や --only=production、--omit=dev、--frozen-lockfile などのフラグは使用しないでください。
  • Vite の静的サイト(React、Vue の静的ビルド)には、配信に zeabur/caddy-static を使用してください。
  • SSR フレームワーク(SvelteKit)を使った Vite には、Node.js ランタイムを使用してください。

Next.js — Zeabur はコンテナに PORT=8080 を注入するため、Next.js の本番モードはデフォルトで 8080 で待ち受けます。追加の設定は不要です。

FROM node:22-slim
LABEL "language"="nodejs"
LABEL "framework"="next.js"
WORKDIR /src
COPY . .
RUN npm install
RUN npm run build
EXPOSE 8080
CMD ["npm", "start"]

Svelte / SvelteKit — node:22(alpine でも slim でもないもの)を使用してください。ENV PORT=8080 を設定します。シングルステージビルドを使用してください。zeabur/caddy-static は使用しないでください。cross-env ADAPTER=static やアダプター固有のビルドコマンドも使用しないでください。

FROM node:22
LABEL "language"="nodejs"
LABEL "framework"="svelte"
ENV PORT=8080
WORKDIR /src
RUN npm install -g pnpm@9
COPY . .
RUN pnpm install
RUN pnpm build
EXPOSE 8080
CMD ["pnpm", "start"]
Python
  • デフォルトのベースイメージ:python:3.10

Flask — まず WSGI エントリーポイントを確認してください。たとえば、main.py に app = Flask(__name__) が含まれている場合、エントリーポイントは main:app です。

FROM python:3.10
LABEL "language"="python"
LABEL "framework"="flask"
WORKDIR /src
COPY . .
RUN pip install -r requirements.txt gunicorn
EXPOSE 8080
CMD ["gunicorn", "--bind", "0.0.0.0:8080", "main:app"]

FastAPI — 存在するものに基づいて起動方法を選択します。

  1. requirements.txt に fastapi-cli がある場合 → fastapi run
  2. .py ファイルに if __name__ == "__main__": がある場合 → python <file>.py
  3. それ以外の場合 → uvicorn main:app --host 0.0.0.0 --port 8080(uvicorn がない場合はインストールします)
FROM python:3.10
LABEL "language"="python"
LABEL "framework"="fastapi"
WORKDIR /src
COPY . .
RUN pip install -r requirements.txt
EXPOSE 8080
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"]

汎用 Python — WSGI が適用できる可能性がある場合は、gunicorn を使用してください。不明な場合は、python <file>.py を使用してください。

Go
FROM golang:1.23 AS build
WORKDIR /src
COPY . .
RUN go build -o /app .

FROM debian:bookworm-slim
LABEL "language"="go"
COPY --from=build /app /app
EXPOSE 8080
CMD ["/app"]
PHP(Laravel / Symfony / 汎用)

NGINX + PHP-FPM を使用します。必要に応じて PHP のバージョンと拡張機能を調整してください。

FROM php:8.3-fpm
LABEL "language"="php"
WORKDIR /var/www
ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
RUN chmod +x /usr/local/bin/install-php-extensions && sync
RUN apt update && apt install -y cron curl gettext git grep libicu-dev nginx pkg-config unzip && rm -rf /var/lib/apt/lists/*
RUN install-php-extensions @composer apcu bcmath gd intl mysqli opcache pcntl pdo_mysql sysvsem zip
RUN cat <<'NGINX' > /etc/nginx/sites-enabled/default
server {
    listen 8080;
    root /var/www;
    index index.php index.html;
    charset utf-8;
    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt { access_log off; log_not_found off; }
    error_page 404 /index.php;
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }
    location ~ /\.(?!well-known).* { deny all; }
    error_log /dev/stderr;
    access_log /dev/stderr;
}
NGINX
RUN chown -R www-data:www-data /var/www
COPY --chown=www-data:www-data . /var/www
USER www-data
RUN if [ -f composer.json ]; then composer install --optimize-autoloader --classmap-authoritative --no-dev; fi && if [ -f package.json ]; then npm install; fi
USER root
EXPOSE 8080
CMD ["sh", "-c", "php-fpm -D && nginx -g 'daemon off;'"]

Laravel の場合は、composer install の後に最適化を追加してください。

RUN php artisan config:cache && php artisan route:cache && php artisan view:cache
3. 既存の Dockerfile を扱う
  • まず既存の Dockerfile を分析します
  • 適切であれば、そのまま使用します
  • 問題がある場合(ポートの誤り、依存関係の不足など)にのみ、改善を提案します
  • Zeabur 固有のラベル(language、framework)がない場合は、必ず追加します

CLI コマンド

Dockerfile を生成した後、次のコマンドでデプロイします。

npx zeabur@latest deploy --project-id <project-id> --json

再デプロイする場合(重複を作成しないよう、サービス ID を必ず渡してください):

npx zeabur@latest deploy --project-id <project-id> --service-id <service-id> --json

デプロイのワークフロー全体については、zeabur-deploy スキルを使用してください。

エラー処理

ビルドまたはランタイムで失敗した場合:

  1. zeabur-deployment-logs スキルでビルドログを確認します
  2. よくある問題:
    • 依存関係の不足 — RUN のインストール手順に追加します
    • ポートの誤り — EXPOSE がアプリの待ち受けポートと一致することを確認します。zeabur-port-mismatch スキルで確認してください
    • 起動コマンドの誤り — CMD がプロジェクトの実際のエントリーポイントと一致することを確認します
    • 静的サイトを SSR として配信している — アプリが静的出力を生成する場合は、zeabur/caddy-static に切り替えます
    • SSR を静的サイトとして配信している — アプリがサーバーを必要とする場合は、Node.js ランタイムに切り替えます
  3. Dockerfile を修正し、--service-id を指定して再デプロイし、既存のサービスを更新します

コメント