ようやくRoonがDockerで動くようになる。正式版リリースは、4/20->4/27になった様子。よく考えたら、なんですぐしなかったんだろうかと思ったが。野良のイメージは前からあったが、これは本家のもの。たまにLinux版出ました!みたいなソフトウェアがあるけど、どういうわけだかDocker版がない。特にEnterprise系だと。多分、ここら辺をわかっている人がいないのか、それともそもそもコンテナを意識したソフトウェアではないかのいずれかなのかもしれない。しかし、このDocker版Roonは、Roonのバイナリ自体はブラックボックスである。この手法を使えば、多くのLinux版出ましたー!なソフトウェアもDockerで動かせそうだが。
閑話休題
Dockerだから万能というわけではなく、元のネイティブで動かしていた環境と同じ程度のリソースが必要。自分の場合、DBが大きすぎるので、NASでの稼働はだいぶ前からできていない。Docker版は、NASのパッケージとか、NASのネイティブファイルシステムに押し込む必要がない(正確には、Docker配下のローカルファイルシステムを使う)ので、NASでRoonを動かしていた人は、絶対移行したほうがいいと思う。Roonの動作要件は、Dockerが全て満たしてくれるし。
動作環境
- Linux / Synology / QNAP などのNAS.
- MacのDockerは原理的に行けそうだが、Windows Dockerはダメ
- アーキテクチャ:AMD64あるいはARM64
- ARM64のNASや Raspberry PI 4、DGX Sparkとかでも動きそう。
- Dockerが動作する環境
- いまさらインストール、設定は書くまでもないだろうが。
構築方法
1 .Roonのバックアップ(移行する場合のみ)
これをやらないと資産が消える。
また、念の為、音源データのマウントパスとRoon Backupのパスを調べておくこと。これの情報がないと、バックアップデータから戻せない。
自分は、
音源ファイル: /mnt/Media配下のいくつかのフォルダを指定していた。
バックアップ:/mnt/RoonBackupの下に保存をしていた。
Linuxであれば、df / mountコマンドの出力を保存しておけばどうにかなる。
2.既存のRoonサーバの停止(移行する場合のみ)
Linux版のServerを立てていたので、念の為/var/roonもバックアップしておいた。(リネームした)
もしかして、やはりネイティブに戻りたいなんていうことがあるかもしれないので、とりあえず停止させておくことをお勧めする。
3 .Compose.ymlの作成
以下のページでcompose.ymlを作る。
https://roonlabs.github.io/roon-docker/
環境をまず選ぶ。
Githubのコメントを見ると、デフォルトはあえてSynologyにした様子。やはりユーザが一番多いのか?ここに記載されていないNASやNUCは、Linuxを選べばいいと思う。NASのDockerは、ベンダーそれぞれ、永続的なデータをおけるパスが異なるので親切に記載したらしい。
このボリュームが、Docker管理のボリュームになってもいけなく、あくまでもLinuxホストやNASのローカルストレージに置かれなければならない。そうしないと場合によってはRoonに関する設定が消える可能性がある。
compose.ymlの作成ページで作っておけば、そういう事故はないだろうが、Dockerのボリュームについて理解をしていないのであれば、ページの設定で使うか、素直にネイティブ版を使った方がいいかもしれない。
右側にDocker ComposeやDockerのコマンドラインが表示されるので、それで起動する。

注意:以下に注意が記載されている
network_mode: host for Roon’s device discovery (SSDP/mDNS). No port mapping needed.Windows Dockerでは、network_mode: hostが使えなく、ポートマッピングするしかないのだが、Roonが使うポートを列記するのは、無理ゲーだと思う。逆にMACだと動くと思われる。
コンテナイメージバージョンは以下で確認できる。
https://github.com/roonlabs/roon-docker/pkgs/container/roonserver
自分のcompose.ymlはとりあえずこれ。Early accessにしたら接続できなかった。太字が自分のローカル設定。
ボリュームの設定のコツ
Roonコンテナから見て、元のマウントポイントと同じになるようにする。
元のRoon Serverの環境
メディアファイル:/mnt/Media
バックアップ: /mnt/RoonBackup
このパスがコンテナから見えるようにしておくことで、バックアップからスムーズにリストアできる。
注意:コンテナパス:/Musicにある音源は、起動した瞬間にスキャンされる。ウィザードでDisableにしてもスキャン走る。もともとのデータが/Musicにしている場合で大容量のデータがある場合、ちょっと面倒かも。
4.起動してみる
docker composeあるいは、dockerで起動してみる。
初回起動時パッケージをインストールするらしい。つまり、コンテナ自体にはバイナリは入っておらず、実質ホスト側にバイナリが設置される。つまりリソース管理だけDockerということに。
5. Roonクライアントからの接続
Roonクライアントからの接続は、マルチキャストなので、接続先のIPアドレスなどを入力する必要はなく、Roonを立ち上げれば、自動的に接続先が見えるはず。見えない場合は、Dockerのネットワークの設定やdockerホストと同じネットワークセグメントかを確認する。
あとは、初期セットアップは通常のRoonと変わらない。
セットアップがおわったらバックアップからリストアをする。
動作確認をする。
6. 既存のRoonサーバが立ち上がらないうようにする(移行の場合のみ)
Linux版Roonサーバだと以下を実行
感想
何が変わったって、何も変わらない。しかし、Roon Serverに他の機能を持たせやすくなったか???しかし、調べてみると結果として
Dockerを選ぶべきケース
✔ 複数サービス統合したい(ただし、network modeがホストなので、ネットワークを使うコンテナは不向き)
✔ NASのDockerや仮想環境で運用
✔ IaC / 自動化重視
✔ バックアップ・移行を簡単にしたい
ネイティブを選ぶべきケース
✔ 音質・安定性最優先
✔ USB DAC直結
✔ トラブルを減らしたい
✔ Roon専用機(ROCK的用途)
ということで、自分のDBは20GB以上あり、もともと専用機として使っていたのでネイティブ版を使うことにした。なんやねん。。。
ただし、NAS(QNAP、Synology、新興NAS)でRoonを動かしている人は、Docker版が絶対お勧め。