---
title: Dockerfile からアプリをデプロイする
description: Dockerfile を含むソースコードから、Webhook、API、エージェント用ツールなど常時稼働するサービスをデプロイします。
url: https://agentlab.cresclab.com/docs/ja/deploy/container-app
language: ja
updated: 2026-10-06
---

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

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

## 始める前に

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

## 1. Dockerfile を書く

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

```dockerfile Dockerfile
FROM node:22-slim
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
USER node
EXPOSE 8080
CMD ["node", "server.js"]
```

```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);
```

イメージは次の条件を満たす必要があります。すべてのルールは[コンテナ実行契約](https://agentlab.cresclab.com/docs/ja/deploy/runtime-contract.md)にあります。

- `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 で実行します」）。

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

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

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

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

> [!WARNING] バージョンがいつまでも準備完了にならない
> 多くはポートが原因で、プラットフォームが指定したポートでサーバーが待ち受けていません。対処は[デプロイのトラブルシューティング](https://agentlab.cresclab.com/docs/ja/deploy/troubleshooting.md#not-ready)をご覧ください。

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

API キーなどの機密値はアプリの「設定」で入力し、コードからは環境変数として読み取ります。保存した設定はサービスの再起動で反映され、新しいインスタンスの準備ができるまでは古いインスタンスが配信を続けます。詳しくは[アプリの設定](https://agentlab.cresclab.com/docs/ja/deploy/app-settings.md#secrets)をご覧ください。

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