メインコンテンツまでスキップ

イメージのビルド

アプリケーションをデプロイするには、まずDockerイメージをビルドする必要があります。このページでは、infra.config.ymlでDockerイメージのビルド方法を設定する方法を説明します。

イメージのビルドとは

Dockerイメージのビルドとは、アプリケーションのコードをDockerコンテナとしてパッケージ化することです。ビルドしたイメージは、Azure Container Registryに保存され、Azure Container Appsで実行されます。

基本的な設定

infra.config.ymlimageセクションで、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.250.5Gi
0.51.0Gi, 1.5Gi
1.02.0Gi, 4.0Gi
2.04.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" # メモリも合わせて調整

関連ドキュメント