0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ARM CPU の Synology NAS で Docker を使う。

Last updated at Posted at 2024-06-09

この記事の概要 (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 は使えますが、以下の制限事項が存在します。

  1. ポートマッピングが使用できない。
    そのため、全て --network=host での対応となります。
  2. Container Manager 非対応の Synology NAS では、 Docker Compose は遅すぎるため、「使用可能ではあるが実用的ではない」と考えてください。
    そのため、この記事では Docker Compose のインストール方法は説明しません。
  3. メモリ 512MB の Synology NAS で、Home Assistant コンテナを稼働させている猛者を見ましたが、実用に耐えるメモリサイズは 1GB 以上です。

手順概要

Docker 非対応の Synology NAS で Docker を利用するための手順は以下の通りです。

  1. SSH で Synology NAS にログイン
  2. CPU のアーキテクチャを確認
  3. Docker の最新バージョンを確認
  4. Docker の最新ファイルをダウンロード
  5. ダウンロードしたファイルを解凍し、/usr/local/bin に保存
  6. Docker のデータが保存されるディレクトリを作成
  7. 設定ファイル( /etc/docker/daemon.json )を作成
  8. NAS 起動時に dockerd が実行されるように設定

さらに本記事では、コンテナ管理を簡単にする以下の 2 つのツールのインストール方法を説明します。

  1. Portainer-CE
    (👉 コンテナやイメージ、ボリューム等の状態をブラウザで簡単に確認・操作できるため、コンテナの管理が非常に楽になります。)
  2. 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 の操作は画像の方が分かりやすいと思いますので、以下の図で確認してください。

user: root

firefox_ii1v1BfuJn.png

コンテナ管理ツールのインストール

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 Password

Portainer の実行画面は以下のようになります。
( tailscaleMagicDNS を使用しているため、http://ds218play:9000 でアクセスしています。)

Portainer CE

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 の実行画面は以下のようになります。
( tailscaleMagicDNS を使用しているため、http://ds218play:8080 でアクセスしています。)

Dozzle

参考

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?