Crescendo Lab ドキュメント
日本語
無料で始める

Dockerfile からアプリをデプロイする

Dockerfile を含むソースコードから、Webhook、API、エージェント用ツールなど常時稼働するサービスをデプロイします。

最終更新

始める前に#

  • HTTP リクエストに応答するプログラム。
  • プロジェクトの最上位にある Dockerfile。

1. Dockerfile を書く#

次の Node.js の例では、サーバーが $PORT で待ち受け、イメージはポートを 1 つだけ EXPOSE し、root 以外のユーザーで実行します。

Dockerfile
FROM node:22-slim
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
USER node
EXPOSE 8080
CMD ["node", "server.js"]
server.js
import { createServer } from "node:http";

const port = Number(process.env.PORT ?? 8080);

createServer((req, res) => {
  res.writeHead(200, { "content-type": "application/json" });
  res.end(JSON.stringify({ ok: true, path: req.url }));
}).listen(port);

イメージは次の条件を満たす必要があります。すべてのルールはコンテナ実行契約にあります。

  • CMD または ENTRYPOINT でサーバーを起動する。
  • $PORT で HTTP を提供する。
  • linux/amd64 向けにビルドする。
  • /tmp 以外のファイルシステムは読み取り専用。

2. ソースをアップロードする#

アプリの「デプロイ」タブで、ソースのフォルダか .zip をアップロード領域にドロップし、「アップロードしてビルド」を選びます。Dockerfile は最上位に置きます。zip を自分で作る場合は、node_modules、.git、.env を除外します。

bash
zip -r ../app.zip . -x 'node_modules/*' '.git/*' '.env*'

プラットフォームはイメージをビルドし、脆弱性とシークレットをスキャンして、実行契約に沿っているかを確認します。自動で調整した点は、バージョンのページにお知らせとして表示されます(例:「イメージが root で実行されるため、uid 10001 で実行します」)。

イメージがすでにある場合

組織のイメージレジストリにプッシュし、「新しいバージョンのデプロイ元」で「イメージ」を選ぶと、そのイメージからバージョンを作れます。

3. 公開して実行状態を確認する#

アプリの最初のバージョンは、ビルドが成功すると自動で公開されます。2 つ目以降は「デプロイ」タブで「公開」を選びます。

「実行」タブには、配信中のバージョンと準備完了のインスタンス数が表示されます。

バージョンがいつまでも準備完了にならない

多くはポートが原因で、プラットフォームが指定したポートでサーバーが待ち受けていません。対処はデプロイのトラブルシューティングをご覧ください。

4. シークレットを追加する#

API キーなどの機密値はアプリの「設定」で入力し、コードからは環境変数として読み取ります。保存した設定はサービスの再起動で反映され、新しいインスタンスの準備ができるまでは古いインスタンスが配信を続けます。詳しくはアプリの設定をご覧ください。

ソースコードにシークレットを含めない

イメージ内でキーが見つかった場合は、ソースから取り除いてアプリのシークレットに設定し、キーを新しいものに交換してください。