/

dockerをLinuxを入れたAndroid端末で動かす

docker
docker で nginxを起動

以前Nexus 5にUbuntu Touchを入れる記事を書きました。目的はそこでdockerを動かすことだったのですがうまく行きませんでした。

dockerをAndroidで動かす方法がhttps://gist.github.com/FreddieOliveira/efe850df7ff3951cb62d74bd770dce27に書かれていたのですが、AndroidのOSイメージをビルドする必要がありちょっとハードルが高いなと思っていました。

AndroidOSはLinuxをベースにしていますが、docker用の設定がオフになっているためOSをビルドする必要があるようです。

そこで見つけたのがhttps://crackoverflow.com/docs/system_administration/containerization/install-docker-natively-on-android-phone-and-use-it-as-a-home-server/#what-do-you-need-for-this-tutorialです。

なんとpostmarketOSというOSをインストールして、apk add dockerでdockerがインストールされてdockerが起動するとのこと。

下記が私がNexus 5にインストールした方法です。

インストール

作業はUbuntuマシンで行いました、wslでもpmbootstrapコマンドが実行できてUSBでfastbootでAndroid端末に接続できればいけるとおもいます。

# pmbootstrapのインストール 
## まずpmbootstrapというコマンドを動くようにする apt install pmbootstrapで入れたがうまく動かなかったのでgit cloneした
$ git clone https://gitlab.postmarketos.org/postmarketOS/pmbootstrap.git
$ mkdir -p ~/.local/bin
$ ln -s "$PWD/pmbootstrap.py" ~/.local/bin/pmbootstrap
## 一旦ログアウトしてログイン
$ pmbootstrap --version


# 端末をfastbootモードにする
## Volume下ボタンを押しながら電源ボタンを押し起動
## USBケーブルでAndroid端末と作業用PCを接続
$ fastboot devices
### 端末が表示されるのを確認


# インストールイメージの作成
## イメージ用の初期設定
$ pmbootstrap init
### 下記のような選択項目が出るので参考にして設定してください
channel v24.12
vendor lg
device hammerhead
user sample-user
pdovider [default]: default
User interface [console]: phosh
Change them? (y/n) [n]: n
Extra packages [none]: none
GMT? (y/n) [y]: y
Locale [en_US]: ja_JP
Device hostname (short form, e.g. 'foo') [lg-hammerhead]: lg-hammerhead
Would you like to copy these public keys to the device? (y/n) [n]: n
Build outdated packages during 'pmbootstrap install'? (y/n) [y]: y
Zap existing chroots to apply configuration? (y/n) [y]: y
## OSイメージの作成、installはされないようです
$ pmbootstrap install

## 端末への書き込み
$ pmbootstrap flasher flash_lk2nd
$ pmbootstrap flasher flash_rootfs
$ pmbootstrap flasher flash_kernel

## 端末の再起動
$ fastboot reboot

起動

なお、私のNexus 5にはUbuntu TouchがインストールされていたのでbootloaderもrecoveryもUBPortのものが入っていました。そのためなのか起動がうまく行かない瞬間がありbootloaderだけ公式のものを入れなおしました。

https://developers.google.com/android/images?hl=ja から最新の nexus 5のイメージを持ってきて解凍し、下記コマンドを叩いてください。

$ fastboot flash bootloader ./bootloader-hammerhead-hhz20h.img

また起動がうまく行かない場合は起動時にVolumeの下ボタンか上ボタンを押してみてください。 うまく行かない場合は、電源長押しで電源をオフにして何度か試してください。

インターフェースについて

インストールイメージの作成時にconsoleやfbkeyboardを選ぶとGUIはインストールされずコンソール(ターミナル)のみが表示されます。 fbkeyboardはキーボードも表示されるので入力できるのですが、文字が小さすぎて虫メガネでも無いと無理です。

また、Xfce4などは普通のデスクトップ用のUIが表示されるのでこれも小さすぎて操作が困難です。

USB経由でのSSH接続

Linux PCとpostmarketOSの起動したAndroid端末をUSBで接続しておくと、下記でSSH接続できます。

$ ssh 172.16.42.1

詳細はpostmarketOSのwikiを参照してください。

Wi-Fiの設定

インターフェースにphoshを選択しているのであれば、postmarketOSを起動すればAndroidのようなホーム画面を表示できるようになります。

設定もしくはSettingsからWi-Fiを選択し、Wi-Fiネットワークに接続できます。

接続はいわゆるAndroidでのWi-Fiの接続と変わりません。

docker のインストールとhello-world

下記でdockerインストールからhello-worldが表示できます。

簡単です。

$ sudo apk add docker
$ sudo service docker start
$ sudo rc-update add docker default
$ sudo docker run hello-world

# docker compose コマンドを使う場合は下記
## /etc/apk/repositories に http://dl-cdn.alpinelinux.org/alpine/edge/testing を追記

$ sudo vim /etc/apk/repositories
http://dl-cdn.alpinelinux.org/alpine/edge/testing

Nexus 5の固有設定

postmarketOSのNexus 5のページは下記です。うまく行かない場合は参照ください。

https://wiki.postmarketos.org/wiki/Google_Nexus_5_(lg-hammerhead)

追記

  • 2025/01/14 USB経由でのSSH接続についてとWi-Fiについてを追記