NAS×Dockerでお手軽にLinux環境を作った話

NASのDocker機能を使ってお手軽にLinux環境を作った話。NASで小規模なLinux環境を作りたい方の参考になれば幸いです。最近のものであれば他メーカーのNASでもよく似た感じなのだと思います(QNAP ContainerStation)。

今のNASはホント色々できる

かつての家庭SOHO用NASは、”WindowsとMacからファイル共有ができる”だけでしたが、今時のNASはホント色々できてファイル共有はもちろん、専用スマートフォンアプリによる外部からのファイル・写真・動画の共有/閲覧、DropboxやGoogleDriveとの連携、DLNAやDBなどの各種サーバ機能などなど、ちょっと良い奴になるとモニターがつながってhdmiから映像が出たり、VMの中でWindowsを動かすこともできたりして、もうPCサーバと一緒と言った感じになってます。

今時はNASなんか買わなくてもインターネットのストレージサービスの値段も下がって良い感じになっていますが、光回線が来てない田舎に住んでいるので上りの速度が遅すぎて、オンラインサービスでは まだまだ大きなファイルを気軽には扱えません。

管理画面もブラウザで動いているとは思えないリッチな感じに

管理画面もブラウザで動いているとは思えないリッチな感じに

それって小型のPCじゃダメなの?

サーバものに精通していて時間と予算さえあればPCでも良いと思います。

当初は小さいMini-ITXなどで作ろうかなぁとも思ったのですが、ディスクを数本入れられるマザーボード&ケースや、静音性、耐久の事を考えて色々選ぶと結構なお値段&大きくなる&何より面倒くさい… と言うことでNASを探しました。

安定して早く動くNASが欲しい

価格.comや2chなんかを見ていると、いろんな製品があることがわかり 今回の予算帯(3万前後)では下記の製品で迷いました。

で、結局選んだのは、下記の製品。

ちょっとその前に(セキュリティ)

QNAPは普通に設定すると勝手に「NASのファイルを外から取れるようにしておきましたよ。便利でしょ!」機能をONにしてしまうので、QNAPにログイン→myQNAPcloud→自動ルータ構成→UPnPポート転送を有効化のチェックを外しましょう。最近のアプリてんこ盛りNASは初期状態で色んなサービスが上がってるのが怖いです。

2016-10-11_13h08_42

なぜDocker?

上記のNASはどれもLinuxベースなので、SSHでNASへログインし、あれこれすると(場合によってはマウスでポチポチするだけで)そのまま良い感じのLinuxマシンになります。ただ、用意されてない事をちょっとでもしようとすると、よく使うコマンドすら入れるのに苦労したり、再起動したら設定が消えたりと、「制限の回避」に時間と労力を使うのでちょっと面倒。

Dockerなら速度も早く、NASのOSとは分離された仮想環境ができるので上記のような制限も受けないため、従来通りの環境をストレス無く作ることができます。作った環境を丸々引っ越せるのも便利です。

QNAP ContainerStationのインストール

Docker環境を作るのはマウスでポチッとすれば良いだけでした(ver 1.2.19.593)。

このボタンを押すだけ

このボタンを押すだけ

ただ、今回の場合はポチッとしただけでは1時間位待ってもブラウザが白くなり先に進まなかったので、sshでnasへ接続し、インストール時に決めたDockerのデータが入る場所の権限の変更とnasの再起動をしたら使えるようになりました(権限の変更が必要だったのかは不明)。まぁ使えているのでこのままにしておきます。


chown -R admin.administrators ./container-station-data

ContainerStationを使うと、docker serverの設定変更、コンテナイメージのダウンロードやコンテナ生成、コンテナの起動/停止、ログの確認などをブラウザから行えます。黒い画面は一切無し!

2015-12-22_09h49_05

すっきりして見やすい画面

コンテナイメージのダウンロード

左側の「コンテナの作成」を選ぶとQNAP推奨イメージが幾つかでてきて、右上の「イメージ検索」に入力するとDockerHubのイメージを探してくれます(レジストリは手動でも追加可能)。

ただ、注意したいのは今回の機種(TS-231+)のCPUはARM系。数多あるDockerHubのイメージの殆どはIntel系なので、ほとんど使えません。買う前から主要ディストリビューションのARM版があることは確認していたのでまぁいいやと思っていましたが、いざ作る段階になると(人が作ったイメージを使う方が楽なので)やっぱり若干面倒でした。

初回はダウンロードと下記コンテナ作成と同時におこないます。直ぐにローカルディレクトリをマウントしたい場合などはこの時点で設定(下記 コンテナの作成を参照)をおこないます。

イメージのダウンロードは結構時間がかかり、ブラウザに何も出てこないので若干心配になりますが、ほっといたらダウンロード完了→コンテナが起動します(今回はHTML5ベースブラウザでVNCが使えるubuntu-noVNCでテストしました)。

推奨"画像"は今のところarm系だと6つだけ

推奨”画像”は今のところarm系だと6つだけ

ARM系CPUの場合イメージ検索時は「armhf」を

ARM系CPUの場合イメージ検索時は「armv7」や「armhf」をつける

コンテナの作成

ここで、Dockerfileに記述するような内容を設定します。設定項目はこんな感じ。

  • コンテナ名
  • コマンド
  • エントリーポイント
  • CPUリミット、メモリー制限
  • NAS起動時の自動起動設定 !
  • 環境変数
  • ネットワークのポートフォワーディング
  • ローカルディレクトリをマウント/他のコンテナの接続

ローカルディレクトリのマウント場所をNAS内の共有ディレクトリ(/share/??????/hoge)などにしておくとDocker内で生成されたファイルがそのまま外部から閲覧/編集できて幸せです。

コンテナ名や自動起動の設定。ボリュームの変更などは詳細設定を押す

コンテナ名や自動起動の設定。ボリュームの変更などはコンテナ生成前に左下 詳細設定を押す。

ポートフォワードの設定(生成されたコンテナはグレーアウトで変更できません)

ポートフォワードの設定(生成されたコンテナはグレーアウトで変更できません)

ローカルディスクにマッピング。

ローカルディスクにマッピング。1がNAS、2がDocker内の場所。

色々設定変更→コンテナのコミット

ベースイメージでは色々と過不足があったので作ったコンテナに接続し、ソフトを入れたり消したりしました(ちなみに今回のイメージのsudoパスワードはubuntuだった)。

一旦この状態をイメージ化したかったのですが、(今のところ)Web上にはコミットするようなボタンはありません。sshでnasに接続し、dockerコマンドでコミットしました(今回は同一イメージに上書き)。この辺りは今後のバージョンアップで良い感じになっていきそうな気がします。


docker commit ubuntu-novnc-armhf-1 colinhuang/ubuntu-novnc-armhf
(docker commit コンテナ名 イメージ名)

コンテナの再作成

ContainerStationから上記コンテナを削除し、先ほどコミットしたローカルイメージからコンテナを生成→設定内容が正しいことを確かめます。ちゃんと動いてる。楽ちん。

Dockerfileからのビルド

これを書いている時点ではGUIからDockerfileをペーストしてビルドみたいな機能はありません。SSHでログインし、docker buildは可能です。

最後に

NASでDockerなんて、もうちょっと不安定なものかなぁとも思っていましたが、管理ツールのデキも良く、なかなかよい感じでした。

おまけ機能を越えている多機能NAS。数年経つとNASって言葉の定義も変わってそうだなぁと思いました。いやー便利な世の中になったものです。

【2016/10追記】数ヶ月使ってみたのですが結果としては、動きはするのですがこの機種ではメモリが少なく(最大1GB/後付できない)、メモリ不足がNASの性能にも影響出ている気がしたので運用をやめました。Dockerをもう少しましに使いたいなら、もう1ランク上のIntel CPUがのっていて、メモリも後付で最大8GBまでつめるTS-251+が良さそうな気がします。

このエントリーをはてなブックマークに追加

同一タグの最新記事:

同一カテゴリ(IT)の最新記事:

最近投稿された記事:

他のカテゴリの記事も読んでみる: