M1 Mac用のDockerがパブリックプレビューになって、だれでもダウンロードして試せるようになった。
"Download it here!"からダウンロードできる。
Download and Try the Tech Preview of Docker Desktop for M1 - Docker Blog
M1 MacのDockerは、x86イメージをQEMUでエミュレートして実行できる。
で、いくつか試したんだけど、どうもJibで作ったx86イメージが不安定な感じ。
Jibとは?
JavaプロジェクトのDockerイメージ化を簡単にやってくれる。 GoogleContainerTools/jib: 🏗 Build container images for your Java applications.
Springプロジェクトの作成
ということで、Spring InitializrでSpring Webを含んだプロジェクトをつくる。
そして、こんなRestControllerをつくる。
@RestController @RequestMapping("/url") public class NewRestController { @GetMapping String hello() { return String.format("Hello, %s %s <br> %s %s <br> %s", System.getProperty("java.vm.vendor"), System.getProperty("java.vm.version"), System.getProperty("os.name"), System.getProperty("os.version"), System.getProperty("os.arch")); } }
まずは普通に実行する。
表示はこんな感じ。
ところでx86用JDKを使ってNetBeansからMavenプロジェクトを実行すると、こんな警告がでる。
けど、キャンセルすると実行できる。
こんな感じ。
ところでRosettaで実行するとOSバージョンが10になってるな
Jibを使ってDockerイメージをビルド
pom.xmlに次のようなpluginを追加するだけ。簡単。
<plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <version>2.7.0</version> <configuration> <to> <image>armboot</image> </to> </configuration> </plugin>
そうするとmvn jib:dockerBuild
でDockerイメージがビルドされる。
実行するとこんな感じで、arm64で動かしてるけどamd64イメージやでって言われる。
しかし、amd64とarm64、区別がつかんのでx86_64とaarch64にしてほしい・・・
表示はこんな感じ。
ところが、たまにちゃんと起動しないことがある。
画像ではまったく起動していないけど、ちょっとだけ起動が進んでSpringのロゴは出るけどTomcat起動までいかないということもある。
ためしにベースイメージを指定してみる。
<plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <version>2.7.0</version> <configuration> <from> <image>openjdk:11-jdk-slim</image> </from> <to> <image>armboot</image> </to> </configuration> </plugin>
こんな感じ。imageを指定するとOracle JDKになるのね。
何回か起動しなおしてるとCore Dumpを吐いてしまった。
と、こんな感じで、不安定。
Ubuntuをベースイメージにしたx86イメージを動かすときは安定していたけど、たまたまかもしれない。
JibでArm用イメージを作成
ということでArm用イメージを作成する。
arm64用のベースイメージを指定することで、Armイメージが作れる。
<plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <version>2.7.0</version> <configuration> <from> <image>arm64v8/openjdk:11-slim</image> </from> <to> <image>armboot</image> </to> </configuration> </plugin>
すんなり起動。
表示はこんな感じ。
起動時間の比較
ところで起動時間の比較。i7-7800Xでの実行結果も加えてみた。単位は秒です。
arm native | x86 Rosetta | arm Docker | x86 Docker | i7 native | i7 Docker |
---|---|---|---|---|---|
5.7 | 7.2 | 0.9 | 9.2 | 1.5 | 1.7 |
って感じですね。Big Sur上でSpring Bootを起動すると、ロゴが出るまでに時間がかかってます。
Dockerで動かすとM1の本領発揮って感じで、i7-7800Xよりかなり速いです。
けど、x86イメージをQEMUで動かすと、10倍くらい遅くなってますね。