KURO-BOX PRO (玄箱Pro) でコンテナが動作するか

目次

はじめに

押し入れでずっと眠らせていた KURO-BOX/PRO (玄箱Pro) に活を入れるべく、ひとまず最新の Debian 10 を入れました。

さらに何かしらアプリケーションを動かすことを考えたとき、今の時代はコンテナを使うのが一般的ですね。

Debian 10 では apt で Docker が入るものの、そもそも KURO-BOX/PRO みたいな古い低スペックなマシン (というか、NAS) でコンテナが動くのかわからなかったため、確認してみました。


KURO-BOX/PRO のスペック & 構成

KURO-BOX/PRO スペックや構成は次の通りです。

  • CPU : Marvell Orion (ARM EABI 32bit (armel) / シングルコア 400MHz)
  • メモリ : 128MB (DDR2)
  • ブート方法 : HDD ブート (SATA II 接続)

docker info

docker info コマンドの結果は次の通りです。

 1Containers: 0
 2 Running: 0
 3 Paused: 0
 4 Stopped: 0
 5Images: 1
 6Server Version: 18.09.1
 7Storage Driver: overlay2
 8 Backing Filesystem: extfs
 9 Supports d_type: true
10 Native Overlay Diff: true
11Logging Driver: json-file
12Cgroup Driver: cgroupfs
13Plugins:
14 Volume: local
15 Network: bridge host macvlan null overlay
16 Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
17Swarm: inactive
18Runtimes: runc
19Default Runtime: runc
20Init Binary: docker-init
21containerd version: 9754871865f7fe2f4e74d43e2fc7ccd237edcbce
22runc version: 1.0.0~rc6+dfsg1-3
23init version: v0.18.0 (expected: fec3683b971d9c3ef73f284f176672c44b448662)
24Security Options:
25 apparmor
26 seccomp
27  Profile: default
28Kernel Version: 4.19.0-12-marvell
29Operating System: Debian GNU/Linux 10 (buster)
30OSType: linux
31Architecture: armv5tel
32CPUs: 1
33Total Memory: 121.2MiB
34Name: orion
35ID: IEEP:32SM:IPVN:IGHN:HIRZ:VC5Z:DYA6:4NNN:SFC7:HFLN:OWVQ:SSW6
36Docker Root Dir: /var/lib/docker
37Debug Mode (client): false
38Debug Mode (server): false
39Registry: https://index.docker.io/v1/
40Labels:
41Experimental: false
42Insecure Registries:
43 127.0.0.0/8
44Live Restore Enabled: false
45
46WARNING: No memory limit support
47WARNING: No swap limit support
48WARNING: No kernel memory limit support
49WARNING: No oom kill disable support
50WARNING: No cpu cfs quota support
51WARNING: No cpu cfs period support
52WARNING: No cpuset support

動作可能なベースイメージ

KURO-BOX/PRO は CPU アーキテクチャは 32bit の ARM ではあるものの、一般的な armhf ではなく armel であるため、ARM 用のイメージが存在したとしても動作するとは限りません。

各ディストリビューションのベースイメージやよく使うイメージが実際に動作するかを確認した結果は次の通りです。 docker runbashash が実行できれば動作可としています。

イメージ Pull可 動作可
debian:buster
debian:stretch
ubuntu:focal ×
ubuntu:bionic ×
centos:8 × -
centos:7 ×
fedora:33 ×
alpine:3 ×
busybox:latest

とりあえず、Debian は動いてくれたので、大体のアプリケーションは動かせそうです。

Ubuntu や CentOS が動かないのは想定通りとして、Alpine は動くと期待したのですが残念な結果でした。


その他メモ

CPU もメモリも少なすぎるせいで、docker pull に数分かかりました。 特に、ダウンロードしたレイヤーファイルの展開に時間がかかっていました。

また、dockerd と containerd の2つの daemon プロセスでメモリを 60% ぐらい使うため、明らかにメモリ不足です。 daemonless の Podman を使いたかったのですが、残念ながら armel 用のバイナリは提供されていませんでした。


結論

ベースイメージを Debian にすれば、KURO-BOX/PRO でもコンテナを動かすことができます。

しかし、CPU やメモリが少ないために快適に動作することはなく、コンテナを使うことによるオーバーヘッド (特に dockerd) が相対的に大きいため、コンテナを使わないほうが良いでしょう。