Dockerfile から Docker コンテナをデプロイする
Lizard (lizard.build) は、Dockerfile からビルドした Docker コンテナをホストします。ファイルをプロジェクトのルートに置いて lizard up を実行するか、GitHub リポジトリを接続してください。Lizard は自社のビルドマシンでイメージをビルドするため、ローカルに Docker は必要ありません。ポートは EXPOSE または --port から取得し、PORT でコンテナに渡して、onlizard.com のドメインから HTTPS でコンテナを配信します。Lizard はレジストリからビルド済みのイメージを取得しません。公開イメージを実行するには、そのイメージを FROM で指定する 1 行の Dockerfile を書きます。
テスト状況: このページは、2026-10-12 時点の Lizard のビルダー、デプロイヤー、CLI 4.0.42 について、それぞれのソースと照らし合わせて確認した内容です。このページのために新たなデプロイは行っていません。Umami ガイド では、1 行の FROM Dockerfile をこの方法でデプロイし、そのテスト結果を記録しています。
始める前に
- アプリが
0.0.0.0で待ち受けるDockerfile。127.0.0.1にバインドしたサーバーは、コンテナの外からの接続を受け付けません。 lizard loginでサインイン済みの Lizard CLI と、Pro プランまたは 7 日間の Pro トライアル(カードが必要)。料金 を参照してください。
Dockerfile がない場合は、まず Dockerfile なしでデプロイを試してください。lizardpack は Go、Node.js、Python、Ruby、PHP、Java、Rust、静的サイトを検出します。ビルドパイプライン を参照してください。
Dockerfile の例
Node.js アプリをデプロイする にあるような Node.js サーバーの場合:
FROM node:22-slim
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --omit=dev
COPY . .
ENV NODE_ENV=production
EXPOSE 3000
CMD ["node", "server.js"]ローカルのファイルがイメージに入らないよう、.dockerignore を追加します:
node_modules
.git
.env*lizard up でデプロイする
lizard init --name my-container
lizard add --service web
lizard up --service weblizard up はローカルの Dockerfile の最初の EXPOSE 行を読み、Detected port 3000 from Dockerfile と表示して、そのポートをサービスのポートに設定します。別のポートを使うには --port <number> を渡します。アップロードでは、ルートの Dockerfile が常に書かれたとおりに使われます。アップロードに含まれるものについては、ローカルコードからデプロイ を参照してください。
GitHub からデプロイする
lizard add -r your-org/your-app -n web追跡対象ブランチへの push のたびにイメージが再ビルドされます。Lizard はルートの Dockerfile を使いますが、そのファイルが別の場所でビルドされた出力をコピーするだけの場合(COPY dist … があり、npm、pip、go build などの RUN ステップがない場合)は、lizardpack が代わりの Dockerfile を生成します。常に自分の Dockerfile を使うには、dockerfilePath を設定します:
lizard service set web --set dockerfilePath=DockerfileDockerfile の変更が反映されない と GitHub からデプロイ を参照してください。
サブディレクトリにある Dockerfile や別名の Dockerfile
dockerfilePath は、rootDirectory で決まるビルドディレクトリからの相対パスです。モノレポのサービスの場合:
lizard service set api --set rootDirectory=apps/api --set dockerfilePath=Dockerfile.prodDockerfile を使うサービスでは、buildCommand と startCommand を空のままにしてください。dockerfilePath がない場合、どちらか一方でも設定されていると、Lizard は指定した Dockerfile を使わず、そのコマンドから独自の Dockerfile を生成します。dockerfilePath を設定していても、startCommand はイメージの ENTRYPOINT と CMD を置き換えます。Lizard は sh -c "<start command>" を実行します。
Lizard がルーティングするポート
Lizard は次の順序でサービスのポートを決めます:
- 設定したポート:
lizard up --port、lizard port、ダッシュボード、またはlizard upが読み取ったEXPOSE行。 0。これは worker mode で、ポートもルートもありません。- サービスに設定した
PORT変数。 - ビルドしたイメージが公開する最初のポート。ベースイメージのポートも含みます。ポートは文字列として並べ替えられるため、
3000が80より先になります。 3000。
コンテナ内では、PORT に選ばれたポートが入っています。これを読むか、同じ固定ポートで待ち受けてください。後でポートを変えるには、lizard port 8080 --service web を実行してから lizard redeploy --service web を実行します。ネットワーキング を参照してください。
ビルドに渡されるもの
- ビルド引数:
COMMIT_SHAだけです。使うにはARG COMMIT_SHAを宣言します。ほかのARG行は、デフォルト値のままか空になります。 - 変数: サービスの変数とシークレットは Dockerfile のビルドに渡されません。例外は
VITE_*とNEXT_PUBLIC_*の値で、ビルド時の変数 で説明しています。公開してよい値は Dockerfile に書き込むかコミットし、シークレットは実行時に使ってください。 - ベースイメージ: ビルダーはあなたのレジストリにログインできないため、
FROMのイメージはすべて公開されている必要があります。 - Lizard が加える変更: ビルドの前に、Lizard はソースの
COPYの前にARG COMMIT_SHAを追加し、npm、yarn、pnpm、bunのインストールステップに BuildKit のキャッシュマウントを追加します。自分で書いたキャッシュマウントは、このサービスに限定された形でそのまま機能します。引用符付きで書いた--mountオプションはビルドを失敗させます。
ビルドの様子は lizard logs --build --service web で確認できます。
実行時
- ヘルスチェック: Lizard は
HEALTHCHECKを無視し、コンテナがサービスのポートで TCP 接続を受け付けるかを確認します。サービスが正常にならない を参照してください。 - ユーザー: イメージの
USERが適用されます。root 以外のユーザーには 1024 未満のポートを開く権限がないことがあるため、そのようなイメージでは80より8080を使ってください。 - 変数: コンテナには、サービスの変数、
PORT、LIZARD_*のプラットフォーム変数が渡されます。変数とシークレット を参照してください。 - ファイル: コンテナが書き込んだものは、次のデプロイで失われます。データには Managed Postgres、Managed Object Storage、または別のサービスを使ってください。ストレージと復旧 を参照してください。
公開イメージを実行する
Lizard はすべてのサービスをソースからビルドするため、公開イメージも Dockerfile のベースとして指定します:
FROM ghcr.io/umami-software/umami:3.3.1
EXPOSE 3000目的のリリースを選ぶには、latest ではなくバージョンタグを使ってください。Umami を実行する と Flowise を実行する では、この方法を Managed Postgres と組み合わせて使っています。
よくある問題
| 症状 | 対処 |
|---|---|
| Dockerfile の編集が反映されない | GitHub では、Lizard がファイルを不完全と見なすことがあります。dockerfilePath を設定してください。サービスに buildCommand や startCommand がないことも確認してください。 |
| デプロイが正常にならない | アプリが別のポートか 127.0.0.1 で待ち受けています。lizard port --service web の出力とログを比べてください。 |
ベースイメージで pull access denied が出る | イメージが非公開か、名前が間違っています。公開イメージを使ってください。 |
ARG の値が空になる | Lizard は COMMIT_SHA 以外のビルド引数を渡しません。Dockerfile でデフォルト値を設定してください。 |
| サービスは動いているが何も返さない | worker mode になっている可能性があります: lizard port --service web が worker mode と表示します。 |
関連項目
更新日