|
翻訳者 |ブガッティ 校正者 | Chonglou Dockerは人気のコンテナ化ソフトウェアですが、誰もが効率的に活用しているわけではありません。Dockerのベストプラクティスに従わないと、アプリケーションはセキュリティやパフォーマンスの問題に簡単に影響を受ける可能性があります。 この記事では、 Dockerの機能を効率的に活用するためのベストプラクティスをいくつか紹介します。これらの対策により、セキュリティが向上し、メンテナンスしやすいDockerfilesを作成できます。 1.公式Dockerイメージを使用するアプリケーションをコンテナ化する場合は、 Dockerイメージを使用する必要があります。カスタム構成を使用してイメージを構築することも、公式のDockerイメージを使用することもできます。 独自のイメージを構築するには、すべての設定を自分で行う必要があります。例えば、 Nodex.jsアプリケーションのイメージを構築する場合、 Nodex.jsとその依存関係をダウンロードする必要があります。このプロセスは時間がかかり、正しい設定がすべて生成されない可能性があります。 Dockerは、すべての正しい依存関係を含む公式Node.jsイメージの使用を推奨しています。Dockerイメージはセキュリティが優れ、軽量で、様々な環境でテストされています。公式イメージはDockerの公式イメージページから入手できます。 2. Dockerイメージの特定のバージョンを使用する公式イメージをプルすると、通常は「latest」タグが付きます。これは、そのイメージの最新の更新バージョンであることを意味します。そのイメージを使用してコンテナをビルドするたびに、以前のコンテナとは異なるバージョンになります。 異なるバージョンのDockerイメージを使用してビルドすると、予期しないアプリケーションの動作が発生する可能性があります。他の依存関係とのバージョン競合が発生し、最終的にアプリケーションが失敗する可能性があります。 Dockerは、プルとビルドに特定のバージョンのイメージを使用することを推奨しています。公式イメージには、最も一般的なユースケースを説明したドキュメントも付属しています。 例えば、 `docker pull alpine`ではなく`docker pull alpine :3.18.3`を使用してください。Dockerは特定のバージョンをプルします。その後のビルドでそのバージョンを使用することで、アプリケーションのエラーを減らすことができます。特定のバージョンのイメージは、公式Dockerイメージページの「Supported」タブと対応するDockerfileリンクで確認できます。 3.画像をスキャンしてセキュリティの脆弱性を見つけます。ビルドしたいイメージにセキュリティ上の脆弱性がないかどうかを確認するにはどうすればよいですか?単純にスキャンするだけです。Dockerイメージをスキャンするには、 「Docker scan」コマンドを使用します。構文は次のとおりです。 イメージをスキャンする前にDockerにログインする必要があります。 次に、検査したい特定の画像をスキャンします。 Synkというツールは、イメージをスキャンし、深刻度に基づいて脆弱性をリストアップできます。脆弱性の種類と関連情報(修正方法を含む)へのリンクを確認できます。スキャン結果から、そのイメージがアプリケーションにとって十分に安全かどうかを判断できます。 4. 小さなDockerイメージを使用するDockerイメージをプルすると、すべてのシステムユーティリティが付属します。そのため、不要なツールのためにイメージサイズが大きくなってしまいます。 大きなDockerイメージは多くのストレージ容量を消費し、コンテナの動作を遅くします。また、セキュリティ上の脆弱性が含まれる可能性も高くなります。 Alpineイメージを使用すると、Dockerイメージのサイズを縮小できます。Alpineイメージは軽量で、必要なツールのみが付属しています。ストレージ容量を削減し、アプリケーションの実行速度と効率を向上させます。 ほとんどの公式DockerイメージのAlpineバージョンはDocker上で見つかります。以下はPostgreSQLのAlpineバージョンの例です。 5. キャッシュイメージレイヤーを最適化するDockerfile内の各コマンドは、イメージ上のレイヤーを表します。これらのレイヤーはそれぞれ異なるユーティリティを持ち、異なる機能を実行します。Docker Hubの公式イメージを見ると、作成手順が記載されています。 Dockerfileには、イメージを作成するために必要なものがすべて含まれています。これが、多くの開発者が仮想マシンよりもDockerを好む理由の一つです。 以下は、 Alpine イメージの例の構造です。 イメージベースのアプリケーションをビルドすると、実際にはイメージにレイヤーが追加されます。DockerはDockerfileの上から下へと命令を実行し、あるレイヤーが変更されると、Dockerは後続のレイヤーを再構築する必要があります。 ベストプラクティスとしては、 Dockerfile を、変更頻度の低いものから高いものの順に並べます。変更されない命令( install など)は、ファイルの先頭に配置できます。 ファイルを変更すると、Docker は変更されたファイルに基づいてビルドを行い、その上に変更されていないファイルをキャッシュします。その結果、プロセスの実行速度が向上します。 上の画像の例をご覧ください。アプリケーションファイルが変更された場合、Dockerはそこからビルドを実行します。NPMパッケージを再インストールする必要はありません。 イメージからビルドする場合、他のすべてのレイヤーを最初から再構築するよりもはるかに高速に実行されます。また、キャッシュにより、 Docker Hubからのイメージのプルとプッシュも高速化されます。 6. .dockerignoreファイルを使用するDockerfileを使用してイメージをビルドする際に、特定の情報のプライバシーを保護したい場合があります。プロジェクトの一部であるファイルやフォルダであっても、ビルドプロセスには含めたくない場合があります。 .dockerignore ファイルを使用すると、イメージサイズを大幅に削減できます。これは、ビルドプロセスに必要なファイルのみがビルドに含まれるためです。また、ファイルの機密性を保ち、キーやパスワードの漏洩を防ぐのにも役立ちます。 .dockerignoreファイルは、Dockerfile と同じフォルダに作成するファイルです。.gitignoreファイルと同様に、ビルドプロセス中に含めたくないファイルの名前を含むテキストファイルです。 以下に例を示します。 7.最小権限の原則を使用します。デフォルトでは、Dockerはコマンド実行権限を取得するために管理者としてrootユーザーを使用しますが、これは好ましくない方法です。コンテナの1つに脆弱性がある場合、ハッカーがDockerホストにアクセスできる可能性があります。 このような状況を回避するには、専用のユーザーとユーザーグループを作成する必要があります。ユーザーグループに適切な権限を設定することで、機密情報を保護できます。ユーザーが侵害された場合、プロジェクト全体を公開することなく、そのユーザーを削除できます。 次の例は、ユーザーを作成し、権限を設定する方法を示しています。 一部のベースイメージでは、擬似ユーザーが作成されます。rootユーザー権限の代わりに、インストールされたユーザーを使用できます。 ベストプラクティスは、脆弱性を軽減し、よりクリーンなコードを書くための優れた方法です。多くのベストプラクティスは、使用するすべてのDocker機能に適用できます。 適切に整理されたプロジェクトは、 Kubernetes などの他のオーケストレーションツールとの同期が容易になります。この記事で概説した方法から始めて、 Docker を学びながら、より多くのアプローチを採用していくことができます。 原題:知っておくべき 8 つの Docker ベストプラクティス、著者: Sandra Dindi |