🐘

Apple Silicon でJavaのSpring使ったアプリのコンテナビルドしようとしたらうまくいかなかったことメモ

2024/05/14に公開

はじめに

タイトルにあるように、Apple Silicon で Java の Spring 使ったアプリのコンテナビルドしようとしたらうまくいかなかったことのメモ

ふわふわした情報だけど、こうしたら動かなくて、こうしたら動いたよってメモです。

やろうとしたこと

  • IBM Cloud Code Engine ってコンテナプラットフォームで Web アプリをデプロイするために、Apple Silicon の Macbook で、Java の Spring 使ったアプリのイメージをビルドしようとした

したこと

  • gradleのイメージを使って Dockerfile を作った
  • --platform linux/amd64をつけてdocker buildしようとした

困ったこと

  • すると、1 時間くらい経っても終わらない・・・

試したこと

  • ChatGPT に聞いてみた。Docker 環境のリソース設定見直せとか、マルチスレッドビルド活用しろとか言われた。ピンとこないので無視。
  • 検索した。下記が見つかった。ちょっと違う感じするけど、ベースのイメージをFROM amd64/gradle:7.5.1-jdk17にしてみた

https://stackoverflow.com/questions/72264754/m1-mac-a-problem-occurred-starting-process-gradle-build-daemon

結果

  • ビルドできた
  • デプロイしたら期待通り動いた

理解

  • Docker image にはマルチプラットフォームイメージというものがある
  • それに対応していれば、--platformをつければ CPU のアーキテクチャを指定できるはず
  • gradle のイメージはamd64にもarm64v8にも対応している
  • なので、--platformで十分な気がする。だけど、なぜか終わらなかった
  • よくわからんけど、Dockerfile のベースイメージのところで明記する必要あった

https://docs.docker.com/build/building/multi-platform/
https://hub.docker.com/_/gradle/

感想

  • モヤモヤするけど、動いたらからヨシ!
GitHubで編集を提案

Discussion