課題:Mac上でDockerを走らせ、Docker上でUbuntu / javaを走らせたい*1
結果:これがベストかどうかわからないが以下で入った。入ったイメージはaarch64(Arm64bit)である。
% docker pull ubuntu % docker run -it ubuntu
jdk-19_linux-aarch64_bin.tar.gz をDLして、Docker内の/usr/local/javaを作って展開した。結果、javaを入れられた。本当の目標は、Ubuntu/Java上でJava版Minecraftを走らせることだったが、アーキの壁を超えられずこの取り組みは諦めた。
詳細:
Dockerは走らせた。情報は以下、OS/Archは darwin/arm64になっている
% docker version Client: Cloud integration: v1.0.24 Version: 20.10.14 API version: 1.41 Go version: go1.16.15 Git commit: a224086 Built: Thu Mar 24 01:49:20 2022 OS/Arch: darwin/arm64 Context: default Experimental: true Server: Docker Desktop 4.8.2 (79419) Engine: Version: 20.10.14 API version: 1.41 (minimum version 1.12) Go version: go1.16.15 Git commit: 87a90dc Built: Thu Mar 24 01:45:44 2022 OS/Arch: linux/arm64 Experimental: false containerd: Version: 1.5.11 GitCommit: 3df54a852345ae127d1fa3092b95168e4a88e2f8 runc: Version: 1.0.3 GitCommit: v1.0.3-0-gf46b6ba docker-init: Version: 0.19.0 GitCommit: de40ad0
X86アーキのイメージもqemuによるエミュレーションで動かせるらしい。ただ、エミュレートするので実行が遅くなる。できればネイティブで動くArmイメージを選択するのが良いらしい。だから、、Ubuntu ARM版をPullすればいいのかと。
何も指定せずにpullしてみる
% docker pull ubuntu Using default tag: latest latest: Pulling from library/ubuntu 56a2caa6b2c6: Pull complete Digest: sha256:7cfe75438fc77c9d7235ae502bf229b15ca86647ac01c844b272b56326d56184 Status: Downloaded newer image for ubuntu:latest docker.io/library/ubuntu:latest % docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 53f68adfb4a9 3 days ago 69.2MB
どんな素性のUbuntuが落とされたのか不明。
起動してみる。aarch64となっており、 ARM Archtecture 64bit版であることがわかる。だから、、特に指定せずとも普通の操作でARM版のOSが入るようであった。
% docker run -it ubuntu root@62911f950342:/# hostname 62911f950342 root@62911f950342:/# uname -a Linux 62911f950342 5.10.104-linuxkit #1 SMP PREEMPT Thu Mar 17 17:05:54 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux
root@62911f950342:/etc# cat os-release PRETTY_NAME="Ubuntu 22.04.1 LTS" NAME="Ubuntu" VERSION_ID="22.04" VERSION="22.04.1 LTS (Jammy Jellyfish)" VERSION_CODENAME=jammy ID=ubuntu ID_LIKE=debian HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" UBUNTU_CODENAME=jammy
Arm用のUbuntuを導入できたので、次はJavaを入れてみる。
JDKインストレーション・ガイドより
Linuxプラットフォームに64ビットJDKをインストール
Linux aarch64 (64ビットARM)システム: jdk-16.interim.update.patch_linux-aarch64_bin.tar.gz
上記をUbuntuに入れたらいいのだろうか。
Java 19 and Java 17 available now
Arm 64 Compressed Archive 179.90 MB https://download.oracle.com/java/19/latest/jdk-19_linux-aarch64_bin.tar.gz ( sha256)
コンテナにcopy
docker cp jdk-19_linux-aarch64_bin.tar.gz 62911f950342:/usr/local/java
コンテナで展開、実行確認
# cd /usr/local/java/ # tar xvfz jdk-19_linux-aarch64_bin.tar.gz root@62911f950342:/usr/local/java/jdk-19.0.1/bin# pwd /usr/local/java/jdk-19.0.1/bin root@62911f950342:/usr/local/java/jdk-19.0.1/bin# ./java --version java 19.0.1 2022-10-18 Java(TM) SE Runtime Environment (build 19.0.1+10-21) Java HotSpot(TM) 64-Bit Server VM (build 19.0.1+10-21, mixed mode, sharing)
上記の通り動かすことができて、Java実行環境もできた。ということで、MinecraftのJava版(他の Linux ; Minecraft.tar.gz) を入手して展開、起動してみた。すると、Java版と言いながら、x86アーキとなっているようで、x86用のlibが無いと怒られる*2。
root@62911f950342:/usr/local/Minecraft/minecraft-launcher# ls minecraft-launcher root@62911f950342:/usr/local/Minecraft/minecraft-launcher# file minecraft-launcher minecraft-launcher: ELF 64-bit LSB pie executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=13e4acebc63a3d601754a6481f297389a4d5bc73, stripped root@62911f950342:/usr/local/Minecraft/minecraft-launcher# ./minecraft-launcher qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
上記よりJava/Linux版はx86アーキ前提のようである。走らせるには、qemuによるエミュレーションが必要になる。動くのは動くだろうが、遅くなるだろう。エミュレーションが不要なarm用アーキのMinecraftはMac用というやつだろう(この場合、普段使っている環境に入れることになる。なお、OSは違うがAndroid版はARMアーキらしい)。M1 MAC用のMinecraftがあるのかどうか不明。自分はネイティブの環境を汚したく無いので、できればややこしいソフトはDocker内で走らせたいのだが。
隔離されたDocker環境にMinecraftをインストールしたかったが、アーキの壁を解消できず、ネイティブの環境(普通につかっているMacOS)に入れることにした。MAC用のMinecraftをDLしてインストールすると普通に動いた(当たり前だが)。ただ、、このアプリがどういう素性で動いているのか不明。Java版だからアーキには依存しないと言えそうだが、Java Runtimeがx86だとエミュレーションしながら動いていることになる。
以下はMacOS上で動いている画面。多分エミュレートしながら動いてるのだろう。(と思ったらこれはラウンチャーだった。ここから実行したいバージョンを選択して本体を起動することになる。。ふむふむ) (現在のバージョンは1.19.2)
Download options for Minecraft | Minecraft
■追記
もう一台のPCはWindows環境で、WSL上でUbuntuが走る。こっちのUbuntuはx86アーキなので問題なくラウンチャ―が走って、Java版のMinecraftは走った。10年ぐらい前のノート(CF-F10)なので非常に遅い。だが、、動くには動く。