イメージのビルド
アプリケーションをデプロイするには、まずDockerイメージをビルドする必要があります。このページでは、infra.config.ymlでDockerイメージのビルド方法を設定する方法を説明します。
イメージのビルドとは
Dockerイメージのビルドとは、アプリケーションのコードをDockerコンテナとしてパッケージ化することです。ビルドしたイメージは、Azure Container Registryに保存され、Azure Container Appsで実行されます。
基本的な設定
infra.config.ymlのimageセクションで、Dockerイメージのビルド方法を指定します。
dev:
frontend:
# ... 基本設定 ...
image:
context: ./frontend # ビルドするディレクトリ
dockerfile: ./frontend/Dockerfile # Dockerfileの場所
image.context - ビルドするディレクトリ
どのディレクトリをビルドするかを指定します。
image:
context: ./frontend
説明:
- リポジトリのルートからの相対パスを指定
- このディレクトリ配下のファイルがDockerイメージに含まれます
例:
your-app/
├── infra.config.yml
├── frontend/ ← context: ./frontend と指定
│ ├── Dockerfile
│ ├── package.json
│ └── src/
└── backend/ ← context: ./backend と指定
├── Dockerfile
└── app/
image.dockerfile - Dockerfileの場所
使用するDockerfileのパスを指定します。
image:
dockerfile: ./frontend/Dockerfile
説明:
- リポジトリのルートからの相対パスを指定
- 通常は
{context}/Dockerfileが推奨されます
環境ごとに異なるDockerfileを使う場合:
# 開発環境: 開発用Dockerfileを使用
dev:
frontend:
image:
context: ./frontend
dockerfile: ./frontend/Dockerfile.dev
# 本番環境: 本番用Dockerfileを使用
prd:
frontend:
image:
context: ./frontend
dockerfile: ./frontend/Dockerfile
ビルド時の設定
image.build_args - ビルド時に渡す値
Dockerイメージをビルドする際に、特定の値を渡したい場合に使用します。
image:
build_args:
NODE_ENV: production
PYTHON_VERSION: "3.11"
使用例:
Dockerfile側で以下のように受け取ります:
# ARGで引数を定義
ARG NODE_ENV=development
ARG PYTHON_VERSION=3.10
# 使用例
FROM node:18-alpine
ENV NODE_ENV=${NODE_ENV}
FROM python:${PYTHON_VERSION}-slim
よくある用途:
- 環境ごとに異なるベースイメージを使用する
- ビルド時のみ必要な設定値を渡す
⚠️ 注意:
build_argsはビルド時のみ有効です(実行時には使用できません)- 実行時の環境変数は
.env.*ファイルで設定します
image.tags - イメージのタグ
ビルドしたイメージに付ける追加のタグを指定できます。
image:
tags:
- "{{ git.sha_short }}" # コミットハッシュ(例: abc123)
- "run-{{ github.run_number }}" # 実行番号(例: run-456)
- "latest" # 最新版
結果:
gxsharedacr.azurecr.io/myapp/frontend:abc123
gxsharedacr.azurecr.io/myapp/frontend:run-456
gxsharedacr.azurecr.io/myapp/frontend:latest
使用可能な変数:
| 変数 | 説明 | 例 |
|---|---|---|
{{ git.sha_short }} | Gitコミットハッシュ(短縮版) | a1b2c3d |
{{ git.sha }} | Gitコミットハッシュ(完全版) | a1b2c3d4e5f6... |
{{ git.branch }} | Gitブランチ名 | main, develop |
{{ git.tag }} | Gitタグ名 | v1.0.0 |
{{ github.run_number }} | GitHub Actions実行番号 | 123 |
推奨パターン:
# 開発環境: コミットハッシュ + 実行番号 + latest
dev:
frontend:
image:
tags:
- "{{ git.sha_short }}"
- "run-{{ github.run_number }}"
- "latest"
# 本番環境: リリースタグ + 実行番号
prd:
frontend:
image:
tags:
- "v{{ git.tag_or_sha }}"
- "prd-{{ github.run_number }}"
デプロイ時のリソース設定
deployセクションで、アプリケーションを実行する際のCPUやメモリを設定します。
dev:
frontend:
# ... 基本設定 ...
deploy:
min_replicas: 0 # 最小インスタンス数
max_replicas: 1 # 最大インスタンス数
cpu: "0.5" # CPUコア数
memory: "1.0Gi" # メモリサイズ
deploy.min_replicas - 最小インスタンス数
常時稼働させる最小のインスタンス数を指定します。
deploy:
min_replicas: 0
選択肢:
0- アクセスがない時は停止(コスト削減)1以上 - 常に稼働(レスポンスが速い)
環境ごとの推奨設定:
| 環境 | 推奨値 | 理由 |
|---|---|---|
| 開発環境 | 0 | コスト削減、使用時のみ起動 |
| 本番環境 | 1 以上 | 常時稼働で高速レスポンス |
⚠️ min_replicas: 0 の注意点:
- 最初のアクセス時に数秒~数十秒の遅延が発生する場合があります
- アクセスがない状態が続くと自動的に停止します
- 本番環境では
1以上を推奨します
deploy.max_replicas - 最大インスタンス数
負荷が増えた時に自動的に増やす最大のインスタンス数を指定します。
deploy:
max_replicas: 10
環境ごとの推奨設定:
| 環境 | 推奨値 | 理由 |
|---|---|---|
| 開発環境 | 1 - 3 | 開発用、大量アクセスは想定しない |
| 本番環境 | 5 - 20 | トラフィックに応じて調整 |
料金への影響:
max_replicasを大きくしても、実際のレプリカ数が少なければ料金は増えません- 実際にスケールアップした場合のみ料金が増加します
deploy.cpu - CPUコア数
各インスタンスに割り当てるCPUコア数を指定します。
deploy:
cpu: "0.5"
選択肢:
| 値 | 説明 | 用途 |
|---|---|---|
"0.25" | 0.25コア | 軽量なフロントエンド |
"0.5" | 0.5コア | 標準的なフロントエンド |
"1.0" | 1コア | バックエンドAPI |
"2.0" | 2コア | 大規模処理 |
サービスタイプ別の推奨設定:
# フロントエンド(Next.js, React)
frontend:
deploy:
cpu: "0.5"
memory: "1.0Gi"
# バックエンドAPI(FastAPI, Express)
backend:
deploy:
cpu: "1.0"
memory: "2.0Gi"
deploy.memory - メモリサイズ
各インスタンスに割り当てるメモリサイズを指定します。
deploy:
memory: "1.0Gi"
選択肢:
| 値 | 説明 | 用途 |
|---|---|---|
"0.5Gi" | 512MB | 超軽量アプリ |
"1.0Gi" | 1GB | 標準的なフロントエンド |
"2.0Gi" | 2GB | バックエンドAPI |
"4.0Gi" | 4GB | 大量データ処理 |
⚠️ 注意:
- メモリ不足でアプリがクラッシュする場合は、メモリを増やしてください
- 不要に大きくすると料金が増加します
CPUとメモリの組み合わせ:
Container Appsでは、CPUとメモリの組み合わせに制約があります:
| CPU | 利用可能なメモリ |
|---|---|
| 0.25 | 0.5Gi |
| 0.5 | 1.0Gi, 1.5Gi |
| 1.0 | 2.0Gi, 4.0Gi |
| 2.0 | 4.0Gi, 8.0Gi |
設定例
フロントエンド(Next.js)
dev:
frontend:
target: container_apps
resource_group: rg-myapp-dev
container_app_name: ca-myapp-frontend-dev
dotenv_path: .env.dev
registry:
acr_name: gxsharedacr
login_server: gxsharedacr.azurecr.io
repository: myapp/frontend
tag_name: "{{ git.sha_short }}"
image:
context: ./frontend
dockerfile: ./frontend/Dockerfile
build_args:
NODE_ENV: production
tags:
- "{{ git.sha_short }}"
- "latest"
deploy:
min_replicas: 0
max_replicas: 3
cpu: "0.5"
memory: "1.0Gi"
バックエンド(FastAPI)
dev:
backend:
target: container_apps
resource_group: rg-myapp-dev
container_app_name: ca-myapp-backend-dev
dotenv_path: .env.dev
registry:
acr_name: gxsharedacr
login_server: gxsharedacr.azurecr.io
repository: myapp/backend
tag_name: "{{ git.sha_short }}"
image:
context: ./backend
dockerfile: ./backend/Dockerfile
build_args:
PYTHON_VERSION: "3.11"
tags:
- "{{ git.sha_short }}"
deploy:
min_replicas: 0
max_replicas: 5
cpu: "1.0"
memory: "2.0Gi"
トラブルシューティング
メモリ不足の兆候
以下の症状が出た場合は、メモリを増やしてください:
- ❌ アプリが頻繁にクラッシュする
- ❌ メモリ不足のエラーが出る
- ❌ レスポンスが極端に遅い
解決方法:
deploy:
memory: "2.0Gi" # 1.0Gi → 2.0Gi に増やす
CPU不足の兆候
- ❌ リクエスト処理が遅い
- ❌ CPU使用率が常に100%近い
解決方法:
deploy:
cpu: "1.0" # 0.5 → 1.0 に増やす
memory: "2.0Gi" # メモリも合わせて調整
関連ドキュメント
- infra.config.ymlの基本設定 - 設定ファイルの作成方法
- リファレンス: infra.config.yml - 完全な仕様