課題: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に入れたらいいのだろうか。
LinuxプラットフォームでのJDKのインストール
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)
Java Downloads | Oracle 日本
コンテナに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)なので非常に遅い。だが、、動くには動く。