なぜ私はアプリを直接NASにインストールするのではなく、Dockerを使用するのか
まだメーカーのアプリストアからNASにアプリをインストールしていますか?もう止める時です。私はネイティブアプリストアを使う代わりに、NASにアプリをインストールするためにDockerだけを信頼しています。なぜでしょう?それにはいくつかの理由があり、ほとんどすべてがセキュリティに関してです。
Dockerコンテナは、私が許可したものだけにアクセスできます。
Dockerの好きな特長の一つは、そのセキュリティの強さです。Dockerコンテナは、私が許可するものにだけアクセスできるのです。
もし私が非常に安全に保ちたいのであれば、Dockerに格納用にアクセスするための隔離されたボリュームを作成させることができ、他の何物もそれに触れることができない(そしてそれも他の何物にも触れない)でしょう。または、OSからコンテナにフォルダー(または特定のファイル)をマウントすることを選択することもできます。
私がDockerコンテナにアクセスを与えるもの以外は、それは完全に自己完結しています。実際、他のDockerコンテナとネイティブにネットワーク接続することはできず、複数のコンテナが使用するためのネットワークを作成するか、別のネットワークアダプタを指定するか、Docker Composeを使用して複数のコンテナを同時に起動しない限り、そうはなりません。
これらはすべてDockerが提供する素晴らしいセキュリティ機能であり、Dockerは多くのアプリストアよりも安全です。たとえば、NASシステムのネイティブアプリストアからアプリをインストールすると、そのアプリがあなたのファイルやフォルダにネイティブにアクセスできる可能性が高いです。インストール時ではなくても、一つのフォルダへのアクセスを許可すると、通常はすべてのフォルダへのアクセスも得られることになります。
これはすべてのNASシステムに当てはまるわけではありませんが、多くはそのように機能します。私のSynologyシステムでの経験から言えば、それが彼らの動作方法でした。これは大きな欠点ではありませんが、NAS上の他のすべてのサービスからアプリを分離するよりも、セキュリティリスクが高くなります。
Dockerの柔軟性はネイティブアプリストアを常に上回る
Dockerコンテナは一種のミニ仮想マシンであるため、その全体的な機能は比類がありません。実際、Docker内で完全なオペレーティングシステムを実行することが可能です。
ただし、Dockerの柔軟性は自分自身のコンテナを構築できることから来ています。Dockerコンテナは、あらかじめインストールされ、あらかじめ設定されたサービスを持つオペレーティングシステムに過ぎないため、自分のコンテナを簡単に構築することができます。
数週間前、私はCalibre-Webで特定のことを試みていましたが、うまくいきませんでした。その時、信頼できるホームラボの仲間であるChatGPTに助けを求め、古くなったコンテナを使っていたため、依存関係を更新したカスタムのCalibre-Web Dockerコンテナを作成する作業に取り組み始めました。
ChatGPTの助けを借りて、必要な依存関係を持ち、自分が望むように動作するDockerコンテナを構築することができました。公式のDockerコンテナでは私の必要なものを提供していなかったのですが、もしネイティブアプリストアを使わざるを得なかったら、こんな選択肢は決してなかったでしょう。
アプリが時代遅れになったり、ネイティブアプリストアで使用できなくなると、単に運が悪いだけです。Dockerを使用すれば、私が使おうとしているアプリの新しい更新版を簡単に作成できます。
一度Dockerを学べば、他のすべてが使いづらく感じる。
Dockerのもう一つ素晴らしい点は、WindowsからUbuntu、TrueNASまで、すべてのプラットフォームで同じだということです。一度あるシステムでDockerを学べば、実質的にはすべてのシステムでDockerを学んだことになります。確かに、フォルダーのマッピングのようにいくつかの違いはありますが、Dockerの大部分は他のすべてのプラットフォームで同じです。
しかし、ネイティブアプリストアはこれほど統一されてはいません。例えば、SynologyのアプリストアはUGREENやTerra Masterのストアとは大きく異なります。
しかし、Dockerを使えば、他のアプリストアと同じくらい簡単に、全てのシステムで統一された管理プラットフォームをインストールできます。ポートレーナーはDockerを管理する私のお気に入りの方法で、実際にかなり簡単です。
私はDockerを使って、どのシステムでも同じスタックを実行できます。
一部のアプリはすべてのプラットフォームで利用できないことがあります。また、利用できる場合でも、古くなっているか、もはや使用できない可能性があります。
Dockerを使えば、それは単純な問題ではありません。一つのサーバーからスタック(Docker Composeファイル)を取って、別のサーバーに移動すれば、すぐに稼働できます。また、一つのサーバーでDockerを停止し、すべてのファイルを別のサーバーに移動して、そのサーバーでDockerを起動することもできます。
Dockerコンテナのポータビリティは、どのNASのネイティブストアのアプリよりもはるかに優れています。
私はほとんどのアプリストアよりもDockerを信頼します
ネットワーク上で実行するアプリには、内在する信頼が与えられています。特に、ストレージサーバーのファイルにアクセスするものについてはなおさらです。ファーストパーティのアプリストアを使用する場合、アプリ内のコードに悪意のあることが起こっていないと信頼するしかありません。Dockerコンテナを使用すれば、通常は自分でそれを確認することができます。
Dockerコンテナ内で実行できるいくつかのクローズドソースサービスを除いて、コンテナ内で実行されるほとんどのサービスはオープンソースです。つまり、そのサービスをコンピュータ上で実行するために必要なすべてのコードを参照したり見ることができるということです。
コンテナを実行するコードを表示して確認することは、サービスをインストールしたときに正確に何が起こっているかを検証できることを意味します。あなたのデータはどこに送信されますか?誰がアクセスできますか?それは何をしていますか?そのような情報は、通常ほとんどのDockerコンテナで利用可能です。
それだけでなく、Dockerコンテナは通常、ファーストパーティのアプリストアよりも最新の状態に保たれています。これは、企業やサービスが自分たちでDockerコンテナを更新するためであり、ファーストパーティのアプリストアがアプリの更新を承認する必要がない(あるいはアプリ自体がアプリストアによって公開される必要がある)ためです。
あなたが今、NASの他のアプリストアの代わりにDockerを使用することに納得していることを願っています。もしDockerを始めたばかりなら、私が考える家庭用ラボで実行すべき10のコンテナがあります。私のリストは、あなたがDockerの旅を始めるための助けになるでしょう。

