この記事の概要 (tl;dr)
DS220j や DS120j 以降の Synology NAS であれば ARM CPU でも Container Manager
(旧パッケージ名 Docker
)が使えますが、それ以前の ARM CPU の Synology NAS では、 Docker は正式にサポートされていません。
この記事では Docker 非対応の Synology NAS で Docker を使うための手順を説明します。
制限事項
Container Manager
非対応の Synology NAS でも Docker は使えますが、以下の制限事項が存在します。
-
ポートマッピングが使用できない。
そのため、全て--network=host
での対応となります。 -
Container Manager
非対応の Synology NAS では、Docker Compose
は遅すぎるため、「使用可能ではあるが実用的ではない」と考えてください。
そのため、この記事ではDocker Compose
のインストール方法は説明しません。 - メモリ 512MB の Synology NAS で、Home Assistant コンテナを稼働させている猛者を見ましたが、実用に耐えるメモリサイズは 1GB 以上です。
手順概要
Docker 非対応の Synology NAS で Docker を利用するための手順は以下の通りです。
- SSH で Synology NAS にログイン
- CPU のアーキテクチャを確認
- Docker の最新バージョンを確認
- Docker の最新ファイルをダウンロード
- ダウンロードしたファイルを解凍し、
/usr/local/bin
に保存 - Docker のデータが保存されるディレクトリを作成
- 設定ファイル(
/etc/docker/daemon.json
)を作成 - NAS 起動時に
dockerd
が実行されるように設定
さらに本記事では、コンテナ管理を簡単にする以下の 2 つのツールのインストール方法を説明します。
-
Portainer-CE
(👉 コンテナやイメージ、ボリューム等の状態をブラウザで簡単に確認・操作できるため、コンテナの管理が非常に楽になります。) -
Dozzle
(👉 各コンテナのログを簡単に確認できるため、コンテナが正常に動作しない場合の原因究明が楽になります。)
手順 1. SSH で Synology NAS にログイン
Synology NAS への SSH 接続は、公開鍵認証方式がお勧めです。
設定方法は以下のページを参照してください。
手順 2. CPU のアーキテクチャを確認
以下のコマンドを実行します。
これで ARCH
という変数に、CPU のアーキテクチャが保存されます。
最初の行は、uname -m
の動作確認です。
uname -m
ARCH=$(uname -m)
手順 3. Docker の最新バージョンを確認
以下のコマンドを実行します。
これで DOCKER_VERSION
という変数に、Docker の最新バージョン(e.g. 27.3.1
)が保存されます。
最初の行は、DOCKER_VERSION
に格納される値の確認です。
curl -s https://api.github.com/repos/moby/moby/releases/latest \
| grep '"tag_name":' | sed -e 's/[^0-9.]//g'
DOCKER_VERSION=$(curl -s https://api.github.com/repos/moby/moby/releases/latest | grep '"tag_name":' | sed -e 's/[^0-9.]//g')
手順 4. Docker の最新ファイルをダウンロード
以下のコマンドを実行します。
最初の行では、ダウンロードするファイルの URL を表示します。
ダウンロードに失敗する場合、ブラウザから URL にアクセスし、ファイルがダウンロードできるか確認してください。
echo "https://download.docker.com/linux/static/stable/${ARCH}/docker-${DOCKER_VERSION}.tgz"
wget "https://download.docker.com/linux/static/stable/${ARCH}/docker-${DOCKER_VERSION}.tgz"
手順 5. ダウンロードしたファイルを解凍し、/usr/local/bin
に保存
以下のコマンドを実行します。
sudo tar -zxvf "docker-${DOCKER_VERSION}.tgz" -C /usr/local/bin --strip-components=1
2024 年 10 月時点では、/usr/local/bin
以下に以下の 8 つのファイルが作成されます。
containerd
containerd-shim-runc-v2
ctr
docker
docker-init
docker-proxy
dockerd
runc
上記手順 2 ~ 5 のコマンドを一度に実行する場合は以下のコマンドを使用してください。
(👉 下記コマンドは、 Docker のアップデートスクリプトとしても使用できます。)
uname -m
ARCH=$(uname -m)
curl -s https://api.github.com/repos/moby/moby/releases/latest \
| grep '"tag_name":' | sed -e 's/[^0-9.]//g'
DOCKER_VERSION=$(curl -s https://api.github.com/repos/moby/moby/releases/latest | grep '"tag_name":' | sed -e 's/[^0-9.]//g')
echo "https://download.docker.com/linux/static/stable/${ARCH}/docker-${DOCKER_VERSION}.tgz"
wget "https://download.docker.com/linux/static/stable/${ARCH}/docker-${DOCKER_VERSION}.tgz"
sudo tar -zxvf "docker-${DOCKER_VERSION}.tgz" -C /usr/local/bin --strip-components=1
rm "docker-${DOCKER_VERSION}.tgz"
手順 6. Docker のデータが保存されるディレクトリを作成
以下のコマンドを実行します。
DOCKER_DIR=/volume1/docker/var
mkdir -p "$DOCKER_DIR"
👉 Container Manager
が利用できる機種では、Docker のイメージやボリュームなどのデータは /var/packages/ContainerManager/var/docker
に保存されます。
(👉 /var/packages/ContainerManager/var/docker
の実体は /volume1/@docker
です。)
手順 7. 設定ファイル( /etc/docker/daemon.json
)を作成
以下のコマンドを実行します。
sudo mkdir -p /etc/docker
sudo cat <<EOT > /etc/docker/daemon.json
{
"data-root": "${DOCKER_DIR}",
"storage-driver": "vfs",
"iptables": false,
"bridge": "none"
}
EOT
👉 Container Manager
が利用できる機種では、上記設定ファイルは /var/packages/ContainerManager/etc/dockerd.json
となります。
手順 8. NAS 起動時に dockerd
が実行されるように設定
ブラウザから Synology NAS にログインし、 [コントロールパネル] の [タスクスケジューラー] から [トリガーされたタスク] を作成します。
スクリプトの内容は dockerd &
です。 (👉 末尾の &
は必要です。)
DSM の操作は画像の方が分かりやすいと思いますので、以下の図で確認してください。
コンテナ管理ツールのインストール
1. Portainer-CE
上記手順 8.の設定を行った後、一度 NAS を再起動します。
(Docker について知識があるなら、再起動しなくても sudo dockerd &
を実行するだけで十分です。)
NAS の再起動後、以下のコマンドを実行します。
mkdir -p /volume1/docker/portainer-ce
sudo docker run -d \
--net=host \
--name portainer-ce \
--restart=always \
-v /volume1/docker/portainer-ce:/data \
-v /var/run/docker.sock:/var/run/docker.sock \
portainer/portainer-ce:latest
Portainer のイメージがダウンロードされ、コンテナが起動されたら、Portainer の GUI パスワードを設定するため、以下のどちらかの URL を使用して Portainer のコンソール画面を表示します。
( [SYNOLOGY_NAS_IP] の部分は自分の NAS の IP アドレスに変更してください。)
http://[SYNOLOGY_NAS_IP]:9000
https://[SYNOLOGY_NAS_IP]:9443
(👉 Portainer の説明では port 9000
は legacy とされていますが、Chromium 系のブラウザ では Not Secure
な接続ではパスワードが保存できないため、パスワードが保存できる port 9000
を使用する方が便利でしょう。)
Portainer の起動が完了していれば、コンソール画面が表示され、以下のようなパスワードの設定画面が表示されるはずです。
好きなパスワードを設定してください。
Portainer の実行画面は以下のようになります。
( tailscale の MagicDNS を使用しているため、http://ds218play:9000
でアクセスしています。)
2. Dozzle
Portainer の GUI のパスワードの設定が終わったら、以下のコマンドを実行します。
sudo docker run -d \
--net=host \
--name dozzle \
--restart=unless-stopped \
--volume=/var/run/docker.sock:/var/run/docker.sock:ro \
amir20/dozzle:latest \
--enable-actions
Dozzle のイメージがダウンロードされ、コンテナが起動されたら、以下の URL にアクセスします。
( [SYNOLOGY_NAS_IP] の部分は自分の NAS の IP アドレスに変更してください。)
http://[SYNOLOGY_NAS_IP]:8080
Dozzle の実行画面は以下のようになります。
( tailscale の MagicDNS を使用しているため、http://ds218play:8080
でアクセスしています。)
参考