一般的な Docker のベストプラクティス
この Docker ガイドラインのセクションでは、すべてのプログラミング言語の間で共通して通用するベストプラクティスを紹介しており、Node.js に限ったものではありません。
COPY コマンドを ADD コマンドよりも優先する
TL;DR: ADD はリモートのサイトからバイナリをダウンロードするといった高度なフェッチ機能をサポートしていますが、COPY はローカルファイルをコピーするためより安全です。
ベース OS をアップデートすることを避ける
TL;DR: ビルド中にローカルのバイナリをアップデートする(例:apt-get update)と、実行のたびに一貫性のないイメージが作成され、高度な権限が要求されます。代わりに、頻繁に更新されるベースイメージを利用してください。
ラベルを利用してイメージを分類する
TL;DR: 各イメージにメタデータを提供することで、Ops の専任者がイメージを適切に扱うことの助けになるかもしれません。例えば、管理者名やビルド日時、その他の情報を含めることで、誰かがイメージについて推測する必要がある際に有用となる場合があります。
権限の無いコンテナを利用する
TL;DR: 権限を持つコンテナは、ホストマシンの root ユーザと同じ権限と機能を持っています。このような権限が必要になることは滅多に無く、経験則として、公式の Node イメージ内で作成された「node」ユーザを使用するべきです。
最終的な結果を検査し、検証する
TL;DR: シークレットの漏洩や、不要なファイルなど、ビルドプロセスでの副作用を見落としがちなことがあります。Dive のようなツールを利用することで、作成されたイメージを検査し、そのような問題を用意に特定することができます。
完全性チェックを行う
TL;DR: ベースイメージや最終イメージをプルする際に、ネットワークがミスリードされて悪意のあるイメージをダウンロードするようにリダイレクトされる可能性があります。コンテンツに署名して検証しない限り 、標準の Docker プロトコルではこれを防ぐことはできません。Docker Notary はこれ防ぐためのツールの一つです。