TrueNASにDockerをインストールする【保存版】

今回は、TrueNASにDockerをインストールしていきたいと思います。

TrueNASは、さまざまなプラグインが用意されており、大抵の用途は対応するプラグインをインストールするだけで実現できます。
しかし、最新のOSSや細かいソフトウェアを起動するマイクロサービスは、Dockerを利用すると非常に便利です。

そのため、今回はTrueNASでDockerを利用する方法について解説します!

TrueNASを利用していなくて、Dockerを使ってオレオレサービスを運用したいエンジニアには、非常に役立つ内容となっていますので、ぜひ最後までご覧ください。

全体方針

まずは全体の方針をまとめておきます。

TrueNAS(FreeNAS)には、Dockerを直接インストールすることはできません。
そこでTrueNASの上に、Virtual Machine(以下VM)でUbuntuをインストールし、そこにDockerをインストールするという2段構造にします。

また、TrueNASのデータをDocker側に共有するために、NFS(Network File System)を利用します。

事前準備

VM用Dataset

VMを設定する際に、VM内のシステムデータを保存するためのDatasetが必要になります。
Pools > Add Datasetから好きな場所にDatasetの作成をしておきましょう。

私の場合は、AmygdalaというPoolの中に、vmというDatasetを作成しました。

Ubuntuイメージ

事前にUbuntuの公式サイトから、UbuntuのISOイメージをダウンロードしてください。
本記事では、ubuntu-20.04.3-live-server-amd64.isoを利用しました。

ダウンロードしたISOイメージは、TrueNAS内にアップロードしておくと後々の作業が楽になります(VM作成時に手元のPCから直接アップロードすることもできますが、私の場合は動作が不安定でした)。

Virtual Machine (VM)の作成

事前準備が終わったら、早速VMを作成しましょう。

左側のメインメニューのVirtual Machinesを選択し、Addをクリックします。

以下のような画面が現れるので、VMの設定を行っていきます。

OSの設定です。以下の画像の通りに入力すれば大丈夫です。
「Name」はVMの名前なので、自由に変えることができます。

次に計算資源の設定を行います。ここはご自身の環境に合わせて調整してください。
あまりメモリを多くし過ぎると、TrueNAS側の動作に支障が出るので注意してください。

保存容量の設定を行います。
Dockerイメージなどを保存する必要があるので、容量は多めに確保しておきましょう。

ネットワークの設定です。基本的にはそのままで大丈夫です。

次にディスクイメージを問われるので、先ほどダウンロードしたISOファイルを選択します。

最後に確認画面が表示されるので、問題なければSUBMITをクリックします。

ここで成功すれば、Virtual Machinesのページに戻るので、作成したubuntu_dockerがあるか確認しましょう。
存在が確認できたら、Stateのトグルボタンをクリックするか、プルダウンメニューからStartをクリックすればVMが起動します。

VMにUbuntuをインストール

作成したVMが起動したら、プルダウンメニューからVNCをクリックします(私は初見だと右上のプルダウンボタンが分からずに苦労しました)。
VNCを利用することで、ブラウザ経由でUbuntuにアクセスすることができます。

VNCにアクセスすると、以下の画面が現れますので、普通のPC画面を操作する容量でインストール作業を進めます。

基本的には、普通にインストールをすればいいのですが、いくつか注意点があるので、まとめておきます。

  • 「Installer update available」では、「Continue without updating」を選択する(長期サポートされている20.04 LTSを選んでいるから)
  • 「Network connections」で表示されるIPアドレス(192.168.0.xxx)をメモしておく(後で利用します)
  • 「Configure proxy」では何も入力しなくて大丈夫
  • 「Profile setup」で設定したユーザー名とパスワードはメモしておく
  • 「SSH Setup」では、「Install OpenSSH server」にチェックを入れる

Ubuntuのインストールが完了したら、TrueNASに戻って、Virtual Machines > ubuntu_docker > DEVICESからCDROMを削除します。

この状態で、再起動を行います。
私の環境では、この再起動が不安定でしたので、何回か試してやっと再起動できました。

Ubuntuの設定

Ubuntuをインストールし再起動できたら、SSH経由でUbuntuにアクセスできるようになっています。
先ほど設定したユーザー名とIPアドレスからログインを行いましょう。

$ ssh [username]@[IP address]

ここからは、SSH経由で作業をしていきます。
またSSHを使った開発については、こちらの記事でより詳しく解説しています。

まずはaptを利用して、ソフトウェアをアップデートします。

$ sudo apt update && sudo apt upgrade -y

次にDockerの公式ドキュメントに従い、Dockerをインストールします。

$ sudo apt install -y ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update
$ sudo apt-get install -y docker-ce docker-ce-cli containerd.io

これで、Dockerがインストールされたはずなので、動作確認します。
以下のようにDockerの利用方法が表示されれば成功です。

$ sudo docker run --rm hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:97a379f4f88575512824f3b352bc03cd75e239179eea0fecc38e597b2209f49a
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

現在のままだとdockerコマンドを実行するためには、sudo権限が必要です。
毎回、sudoを打つのは面倒なので、sudoなしでDockerを利用できるようにします。

方法は簡単で、自分の利用しているユーザーをdockerグループに追加するだけです。

$ sudo usermod -aG docker ${USER}

再ログインすると、以下のようにsudoなしでdokcerコマンドが使えます。

$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

NFSの設定

Dockerを利用する際は、何かしらのサービスをコンテナ上で起動すると思います。
TrueNAS上で動かす用途なので、NASとDockerコンテナとのデータのやり取りは必要になります。

データのやり取りには、前述の通りNFS(Network File System)というプロトコルを用いて、Ubuntu VMとの共有ファイル設定を行います。

TrueNAS

TrueNASに戻り、Sharing > Unix Shares (NFS) > Addから新規設定を行います。

基本的には、共有フォルダ(Dataset)を選択するだけで大丈夫です。
私の場合には、全てのフォルダを共有したいので、「All dirs」にチェックを入れています。

NFSの設定ができたら、NFSサービスを起動します。
Services > NFSで、Runningボタンをオンにすれば起動できます。

Ubuntu VM

ここからは、Ubuntu VMの設定を行います。前節と同様に、SSH経由でログインして作業を進めます。
まずはNFSクライアントをインストールします。

$ sudo apt install -y nfs-common

NFSを行う前に、TrueNASの共有フォルダがマウントされる場所を用意しておきます。
私の場合は、Mediasというフォルダが共有されるので、そのようなフォルダを作りました。

$ sudo mkdir -p /nfs/Medias

これで、NFSをマウントします。
[Host IP address]は、ホスト側(TrueNAS)のIPアドレスであることに注意してください。

$ sudo mount [Host IP address]:/mnt/Amygdala/Medias /nfs/Medias

dfコマンドで、きちんと認識されている確認しましょう。

$ df -h
Filesystem                         Size  Used Avail Use% Mounted on
...
192.168.0.92:/mnt/Amygdala/Medias  2.0T  1.3T  740G  64% /nfs/Medias

また、以下のコマンドでアンマウントできます。

$ sudo umount /nfs/Medias

お疲れ様です。
これでDockerの設定は終了です!

ここからは、あると便利な設定を行っていきます。

Docker-composeのインストール

Docker-composeを導入することで、Dockerコンテナの管理が非常に簡単になります。

基本的には、公式ドキュメントに従ってインストールを行います。

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

以上になります。簡単ですね😄

Portainerの起動

複数のDockerコンテナを簡単に管理するために、Portainerを導入します。
Portainerを使うことで、いちいちSSHで接続を行わなくても、ブラウザからDockerコンテナを管理することができるようになります。

今回は、せっかくDockerをインストールしたので、Docker上でPortainerを動かしてみます。
dockerコマンドを利用する方法と、docker-composeを利用する方法を紹介します。

dockerコマンドを利用する方法

$ docker run -d -p 8000:8000 -p 9443:9443 --name portainer \
    --restart=always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v [portainer_data]:/data \
    portainer/portainer-ce:2.11.1

ここで、[portainer_data]は好きなフォルダを指定できます。
私の場合は、TrueNASとの共有フォルダに設定しました(例:/nfs/Medias/Projects/portainer/portainer_data)。

docker-composeを利用する方法

別の方法として、Docker-composeを利用してもPortainerを起動できます。

最初に以下のような内容のファイルを、docker-compose.ymlとして保存します。

docker-compose.yml
version: "3.9"
services:
  app:
    image: portainer/portainer-ce:2.11.1
    container_name: portainer
    ports:
      - "8000:8000"
      - "9443:9443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /nfs/Medias/Projects/portainer/portainer_data:/data
    restart: always

あとはこのファイルを実行するだけです。
実行は、docker-compose.ymlがあるフォルダに移動して行ってください。

$ docker-compose up -d --build

動作確認

ブラウザからhttp://[Ubuntu IP address]:9443にアクセスしてください。
この際に、TrueNASではなく、Ubuntu VMのIPアドレスを入力してください。

以下のような画面が表示されるので、ユーザー名をadmin、パスワードをportainerでログインできます。

ログインが成功すると以下のような画面が表示されます。

お疲れ様でした。
これでPortainerの導入は終了です!

まとめ

大変お疲れ様でした!

TrueNASにDockerを導入すると一気に用途が広がります。
私の場合は、お気に入りの画像管理ソフトを入れたり、ちょっとしたOSSのプログラムを動かしたりして使っています。

皆様も良いDockerライフを!!

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA