Docker非対応のNAS上でDockerを動かしてみた


はじめに

以前から所持していたSynology DS420j上でDockerを動かしてみました。
SynologyのパッケージとしてDockerは提供されておりますが、DS420jは公式ではサポート外となっていた為、無理やり動かしています。
Docker - アドオン パッケージ | Synology Incorporated

手順は以下を参考にしました。
Can I install Docker on arm8 based Synology Nas - Stack Overflow

※NASのシステム層をいじくるので、データ破損してしまった場合、復旧できなくなる可能性があります!
 実施する場合はくれぐれも注意し、自己責任でお願いします。

手順

NASへのSSH接続を有効化

NASの設定

WebブラウザからNASへアクセスし、管理者権限でログインします。

コントロール パネルを開き、「端末とSNMP」を選択します。

『SSHサービスを有効化する。』にチェックを入れ、「適用」を押します。

これで、クライアントからNASへの接続が可能となります。

SSH接続確認

今回はMacOSから操作を行いました。
Windowsからの接続はTeraTermを利用するとよいかと思います。

Terminalを起動します。

以下コマンドを実行します。

ssh
ssh <接続するNASのユーザー名>@<接続するNASのIPアドレス>

NASのパスワードを入力します。

セッションが確立されたことを確認します。

切断は以下コマンドを実行します。

exit
exit

Dockerのインストール

Dockerバイナリのダウンロード

今回インストール対象のNASのアーキテクチャはaarch64でした。
以下からDockerのバイナリを確認します。
(必要に応じて、最新版を選択してください。)
Index of linux/static/stable/aarch64/
アーキテクチャはNASにSSH接続し、以下コマンドで確認ができます。

uname
uname -m
# aarch64

NASにSSH接続し、以下コマンドを実行します。

curl
sudo mkdir -p /usr/local/temp
sudo curl -L <上記で確認したBinaryのURL> -o /usr/local/temp/docker

Dockerバイナリの配置

アーカイブファイルを/usr/local/bin配下に解凍します。
※私は/usr/bin配下に解凍してしまいました。。。本来なら/usr/local/binのほうが好ましいかと思いますので、ここでは/usr/local/binで記載いたします。不具合があれば、ご報告いただけると助かります。

tar
sudo tar xzvf /usr/local/temp/docker -C /usr/local/bin

Dockerの構成

Dockerデーモンの構成ファイルをJSON形式で作成します。
以下のコマンドで構成ファイルを手動で作成します。

vi
sudo mkdir /etc/docker
sudo vi /etc/docker/daemon.json

構成ファイルは以下の通りの内容を記述します。

daemon.json
{
    "data-root": "/docker",
    "storage-driver": "vfs",
    "iptables": false,
    "bridge": "none"
}

Dockerのルートディレクトリを作成しておきます。

mkdir
sudo mkdir -p /volume1/@Docker/lib
sudo mkdir /docker

Dockerデーモンの起動設定

Dockerデーモンの起動設定を行います。

SSH接続を有効化と同じ手順で、WebブラウザにてNASへ接続します。

コントロールパネルを開き、「タスク スケジューラー」を選択します。

「作成」→「トリガーされたタスク」→「ユーザー指定のスクリプト」を選択します。

『全般』タブは以下のような要領で入力します。

タスク:なんでもOK
ユーザー:root
イベント:ブートアップ
プリタスク:指定なし
有効:非アクティブ(起動できなくなる恐れもあると思った為、動作確認に問題がなければ有効に切り替えます)

『タスク設定』タブは以下のような要領で入力し、「OK」を押します。

通知:お好みで設定してください
コマンドを実行:以下のコマンドを指定

dockerd
mount -o bind "/volume1/@Docker/lib" /docker
dockerd

「実行」を選択し、「はい」を選択します。

NASへSSH接続されたTerminalから以下コマンドを実行し、エラーなく出力されることを確認します。

docker
docker run hello-world

動作確認

WebブラウザにてNASへ接続し、タスクスケジューラーにて先程作成したタスクを有効化します。

NASを再起動します。

再起動完了後、TerminalからNASへSSH接続し、以下コマンドを実行し、エラーなく出力されることを確認します。

docker
docker run hello-world

以下コマンドを実行し、/dockerディレクトリ内が空でないか確認します。

ls
sudo ls /docker

以上で完了です。
お疲れさまでした。