From fb457cea8d8fcdb975979daeca5f4aa540c049cd Mon Sep 17 00:00:00 2001 From: kakiuchi-shigenao Date: Wed, 23 Jul 2025 11:51:13 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20AWS=20Graviton=E3=83=97=E3=83=AD?= =?UTF-8?q?=E3=82=BB=E3=83=83=E3=82=B5=E5=AF=BE=E5=BF=9C=E3=81=AE=E3=81=9F?= =?UTF-8?q?=E3=82=81=E3=81=AE=E3=83=9E=E3=83=AB=E3=83=81=E3=83=97=E3=83=A9?= =?UTF-8?q?=E3=83=83=E3=83=88=E3=83=95=E3=82=A9=E3=83=BC=E3=83=A0=E3=83=93?= =?UTF-8?q?=E3=83=AB=E3=83=89=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Docker Buildxを使用したマルチプラットフォーム(linux/amd64, linux/arm64)ビルドに対応 - compose.production.yamlの各サービスにplatforms設定を追加 - buildspec.ymlでdocker buildx bakeを使用するよう変更 - READMEにGraviton対応の説明とビルド方法を追加 Fixes #5 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- README.md | 46 +++++++++++++++++++++++++++++++++++++++++ compose.production.yaml | 9 ++++++++ deploy/buildspec.yml | 8 +++++-- 3 files changed, 61 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 69aa045..5eef90f 100644 --- a/README.md +++ b/README.md @@ -63,3 +63,49 @@ | `app-builder` | Web API Builder | | +## 🚀 Multi-Architecture Support (ARM64/Graviton) + +このプロジェクトは、AWS Gravitonプロセッサ(ARM64アーキテクチャ)をサポートしています。 + +### 特徴 +- **マルチアーキテクチャ対応**: AMD64(x86_64)とARM64の両方のアーキテクチャに対応 +- **自動ビルド**: AWS CodeBuildでDocker Buildxを使用して自動的にマルチプラットフォームイメージをビルド +- **Graviton最適化**: AWS Gravitonインスタンスで実行することでコストパフォーマンスが向上 + +### ビルドの仕組み +`deploy/buildspec.yml`では、Docker Compose(Buildx bake)を使用してマルチプラットフォームイメージをビルドしています: + +```bash +docker buildx bake -f compose.production.yaml --set *.platform=linux/amd64,linux/arm64 --push +``` + +`compose.production.yaml`には、各サービスに`platforms`設定が追加されています: + +```yaml +services: + web: + build: + platforms: + - linux/amd64 + - linux/arm64 + # ... 他の設定 +``` + +### ローカル開発環境でのマルチプラットフォームビルド +ローカル環境でマルチプラットフォームイメージをビルドする場合: + +```bash +# Docker Buildxの初期化 +docker buildx create --name multi-platform-builder --use +docker buildx inspect --bootstrap + +# Composeを使ったマルチプラットフォームビルド +docker buildx bake -f compose.production.yaml --set *.platform=linux/amd64,linux/arm64 --push + +# または、通常のdocker composeコマンドでビルド(プッシュなし) +docker compose -f compose.production.yaml build +``` + +### ECSでの使用 +- ECSタスク定義で`arm64`アーキテクチャを指定することで、Gravitonインスタンスでコンテナを実行できます +- 同じイメージがAMD64とARM64の両方で動作するため、アーキテクチャ間の移行が容易です diff --git a/compose.production.yaml b/compose.production.yaml index 5b4d79a..0b7f97e 100644 --- a/compose.production.yaml +++ b/compose.production.yaml @@ -26,6 +26,9 @@ services: additional_contexts: # apache-ctx: ./docker/web/apache nginx-ctx: ./docker/web/nginx + platforms: + - linux/amd64 + - linux/arm64 args: BUILDKIT_INLINE_CACHE: 1 USER_UID: "${USER_UID-1000}" @@ -67,6 +70,9 @@ services: additional_contexts: php-fpm-ctx: ./docker/app/php-fpm src-ctx: ./src + platforms: + - linux/amd64 + - linux/arm64 args: BUILDKIT_INLINE_CACHE: 1 USER_UID: "${USER_UID-1000}" @@ -116,6 +122,9 @@ services: additional_contexts: php-fpm-ctx: ./docker/app/php-fpm src-ctx: ./src + platforms: + - linux/amd64 + - linux/arm64 args: BUILDKIT_INLINE_CACHE: 1 USER_UID: "${USER_UID-1000}" diff --git a/deploy/buildspec.yml b/deploy/buildspec.yml index 7f91a32..52615e3 100644 --- a/deploy/buildspec.yml +++ b/deploy/buildspec.yml @@ -14,6 +14,10 @@ phases: - APP_IMAGE_REPO_URI=${ECR_ENDPOINT}/${APP_IMAGE_REPO_NAME} - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7) - IMAGE_TAG=${COMMIT_HASH:=latest} + + - echo 🔧 Installing Docker Buildx for multi-platform builds... + - docker buildx create --name multi-platform-builder --use + - docker buildx inspect --bootstrap pre_build: commands: @@ -30,8 +34,8 @@ phases: build: commands: - - echo 🐳 Building the Docker image.. - - docker compose --file compose.production.yaml build --push + - echo 🐳 Building the Docker images for multiple platforms (linux/amd64,linux/arm64)... + - docker buildx bake -f compose.production.yaml --push - echo ✨ Build completed on `date` From a315715fcc9ff8e498cd3df5fa1e879c5a589a9e Mon Sep 17 00:00:00 2001 From: kakiuchi-shigenao Date: Wed, 23 Jul 2025 11:57:23 +0900 Subject: [PATCH 2/3] =?UTF-8?q?docs:=20README.md=E3=81=AE=E3=83=93?= =?UTF-8?q?=E3=83=AB=E3=83=89=E3=82=B3=E3=83=9E=E3=83=B3=E3=83=89=E3=82=92?= =?UTF-8?q?=E6=9C=80=E6=96=B0=E3=81=AE=E6=83=85=E5=A0=B1=E3=81=AB=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - buildspec.ymlの変更に合わせて、--set *.platformオプションを削除 - compose.production.yamlにplatforms設定があるため、オプション指定は不要 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 5eef90f..b95c7e6 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ `deploy/buildspec.yml`では、Docker Compose(Buildx bake)を使用してマルチプラットフォームイメージをビルドしています: ```bash -docker buildx bake -f compose.production.yaml --set *.platform=linux/amd64,linux/arm64 --push +docker buildx bake -f compose.production.yaml --push ``` `compose.production.yaml`には、各サービスに`platforms`設定が追加されています: @@ -99,8 +99,8 @@ services: docker buildx create --name multi-platform-builder --use docker buildx inspect --bootstrap -# Composeを使ったマルチプラットフォームビルド -docker buildx bake -f compose.production.yaml --set *.platform=linux/amd64,linux/arm64 --push +# Composeを使ったマルチプラットフォームビルド(プッシュあり) +docker buildx bake -f compose.production.yaml --push # または、通常のdocker composeコマンドでビルド(プッシュなし) docker compose -f compose.production.yaml build From 3eed48356ba2eda09968d4321a483b2661bbe7ac Mon Sep 17 00:00:00 2001 From: kakiuchi-shigenao Date: Wed, 23 Jul 2025 12:06:11 +0900 Subject: [PATCH 3/3] =?UTF-8?q?refactor:=20=E3=83=93=E3=83=AB=E3=83=89?= =?UTF-8?q?=E3=82=B3=E3=83=9E=E3=83=B3=E3=83=89=E3=82=92docker=20compose?= =?UTF-8?q?=E3=81=AB=E6=88=BB=E3=81=97=E3=80=81README.md=E3=81=AB=E4=B8=A1?= =?UTF-8?q?=E6=96=B9=E3=81=AE=E6=96=B9=E6=B3=95=E3=82=92=E8=A8=98=E8=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - buildspec.ymlのビルドコマンドを`docker buildx bake`から`docker compose build`に変更 - README.mdにDocker ComposeとDocker Buildx Bakeの両方のビルド方法を記載 - Docker Compose v2.4.0以降では通常のcomposeコマンドでもマルチプラットフォーム対応可能 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- README.md | 23 ++++++++++++++++------- deploy/buildspec.yml | 2 +- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index b95c7e6..6d1c0ec 100644 --- a/README.md +++ b/README.md @@ -73,10 +73,10 @@ - **Graviton最適化**: AWS Gravitonインスタンスで実行することでコストパフォーマンスが向上 ### ビルドの仕組み -`deploy/buildspec.yml`では、Docker Compose(Buildx bake)を使用してマルチプラットフォームイメージをビルドしています: +`deploy/buildspec.yml`では、Docker Composeを使用してマルチプラットフォームイメージをビルドしています: ```bash -docker buildx bake -f compose.production.yaml --push +docker compose --file compose.production.yaml build --push ``` `compose.production.yaml`には、各サービスに`platforms`設定が追加されています: @@ -92,20 +92,29 @@ services: ``` ### ローカル開発環境でのマルチプラットフォームビルド -ローカル環境でマルチプラットフォームイメージをビルドする場合: +ローカル環境でマルチプラットフォームイメージをビルドする場合、以下の2つの方法があります: +#### 方法1: Docker Compose(推奨) +```bash +# 通常のdocker composeコマンドでビルド(プッシュなし) +docker compose -f compose.production.yaml build + +# プッシュも含める場合 +docker compose -f compose.production.yaml build --push +``` + +#### 方法2: Docker Buildx Bake ```bash # Docker Buildxの初期化 docker buildx create --name multi-platform-builder --use docker buildx inspect --bootstrap -# Composeを使ったマルチプラットフォームビルド(プッシュあり) +# Buildx bakeを使ったマルチプラットフォームビルド docker buildx bake -f compose.production.yaml --push - -# または、通常のdocker composeコマンドでビルド(プッシュなし) -docker compose -f compose.production.yaml build ``` +**注意**: 方法1はDocker Compose v2.4.0以降が必要です。古いバージョンを使用している場合は方法2をご利用ください。 + ### ECSでの使用 - ECSタスク定義で`arm64`アーキテクチャを指定することで、Gravitonインスタンスでコンテナを実行できます - 同じイメージがAMD64とARM64の両方で動作するため、アーキテクチャ間の移行が容易です diff --git a/deploy/buildspec.yml b/deploy/buildspec.yml index 52615e3..9c26592 100644 --- a/deploy/buildspec.yml +++ b/deploy/buildspec.yml @@ -35,7 +35,7 @@ phases: build: commands: - echo 🐳 Building the Docker images for multiple platforms (linux/amd64,linux/arm64)... - - docker buildx bake -f compose.production.yaml --push + - docker compose --file compose.production.yaml build --push - echo ✨ Build completed on `date`