paint-brush
Docker イメージを大幅に削減するにはどうすればよいでしょうか?@infinity
2,203 測定値
2,203 測定値

Docker イメージを大幅に削減するにはどうすればよいでしょうか?

Rishabh Agarwal4m2024/01/19
Read on Terminal Reader
Read this story w/o Javascript

長すぎる; 読むには

コンテナ化は、アプリケーションのコードを、インフラストラクチャ上で実行するために必要なすべてのファイルおよびライブラリとバンドルするソフトウェア展開プロセスです。 Docker イメージを最適化することで、開発サイクル全体を迅速化できますが、同時にセキュリティ対策も強化され、より堅牢で効率的なソフトウェア環境が確保されます。
featured image - Docker イメージを大幅に削減するにはどうすればよいでしょうか?
Rishabh Agarwal HackerNoon profile picture

ソフトウェア開発業界に最も革命をもたらした唯一のものについて私が尋ねたとき、私のマネージャーは「コンテナ化」と明確に言いました。同氏は、コンテナ化がなければ、今日のソフトウェアの急速な拡張と世界的な展開は、はるかに困難な課題になっていただろうと主張しました。現在使用されているほぼすべてのソフトウェアがさまざまな機能でコンテナ化を活用していることは注目に値し、現代のソフトウェア エコシステムを強化する上でコンテナ化が不可欠な役割を果たしていることが強調されています。


知らない人のために、 AWS の Web サイトからの定義を示します ~

 *“Containerisation is a software deployment process that bundles an application's code with all the files and libraries it needs to run on any infrastructure. Traditionally, to run any application on your computer, you had to install the version that matched your machine's operating system.”*


イメージはコンテナの構成要素として機能し、コンテナの作成をガイドする青写真に似ています。したがって、軽量で合理化されたコンテナ イメージを維持すると、展開プロセスが加速され、これらのイメージの配布が容易になります。 Docker イメージを最適化することで、開発サイクル全体を迅速化できるだけでなく、実施されているセキュリティ対策を強化して、より堅牢で効率的なソフトウェア環境を確保できます。


この記事では、効率的な Docker イメージを作成し、最終的にアプリケーションの効率を向上させるためのさまざまな方法を検討します。

コンテナごとに 1 つのアプリをパッケージ化する

コンテナを仮想マシン (VM) のように扱い、複数のアプリケーションを 1 つのコンテナ内にパッケージ化するのはよくある間違いです。この方法にはコンテナのサイズが大きくなりますが、他にも欠点があります。


コンテナーの寿命は、コンテナーが実行しているアプリケーションと密接に関連していると予想されます。コンテナーはアプリの開始時に開始し、アプリの終了時に停止する必要があります。 Docker や Kubernetes などのコンテナ オーケストレーション ソリューションは、コンテナのこの属性に大きく依存しています。コンテナーが多数のアプリを実行している場合、オーケストレーション ツールはアプリケーションを識別して再起動できません。

キャッシュを賢く活用する

イメージはレイヤーで構成されており、Dockerfile 内の各命令によって新しいレイヤーが追加されます。 Docker などのコンテナ化テクノロジは、ビルド時間を短縮するために、可能な限り以前のビルドのレイヤーを再利用しようとします。レイヤーのキャッシュは、以前のビルド以降、基礎となるレイヤーが何も変更されていない場合にのみ使用できます。


イメージ構築の速度を向上するには、頻繁に変更される可能性のある命令を Dockerfile 内で下に配置すると有益です。このアプローチにより、Docker はキャッシュ システムをより効果的に活用できるようになります。たとえば、ソース コードは頻繁に変更されることが多いため、プロセスの最後の方でソース コードをイメージにコピーすることをお勧めします。


画像キャッシュ ~ https://cloud.google.com/architecture/best-practices-for-building-containers


画像が軽くなるわけではありませんが、ビルド プロセスが高速化されます。

不要な工具を取り除く

多くの場合、コンテナー イメージには不要なツールが含まれており、イメージの肥大化や潜在的なセキュリティ脆弱性につながります。たとえば、 netcatなどのツールは、ハッカーが不正アクセスを取得すると、コンテナ内で悪意のあるアクティビティを実行するために悪用される可能性があります。


コンテナー イメージに同梱される一連のツールとライブラリを厳密に保守すると、セキュリティの脅威を軽減するのに大きく役立ち、イメージのスリム化にもつながります。イメージが小さいほどダウンロードが速くなり、コンテナーの起動が速くなります。

最小のベースイメージを使用する

FROM 命令で参照するイメージはベース イメージと呼ばれます。ベースイメージは、作成される最終イメージのサイズを大きく左右します。画像の最終的なサイズを小さくするには、可能な限り最小のベース画像を使用するように努める必要があります。


アルパイン イメージはサイズが小さく、開発活動をサポートするのに十分なツールが含まれていることが多いため、可能な限りアルパイン イメージを使用するようにしてください。


小さなイメージに必要なツールがすべて含まれていない場合でも、それを使用する方が良い選択肢になる可能性があります。必要なパッケージを軽い基本イメージの上にインストールすると、重いイメージを使用するよりも節約できる可能性があります。

必要なものだけをコピーしてください!

ソース コードをコピーしているときに、不要なファイルやフォルダーの多くもコピーされる可能性があります。これにより画像のサイズが増大し、最終的には肥大化につながります。コピーされるファイルの量を最小限に抑え、最小限に抑えるようにしてください。


コンテナイメージの最適化とベストプラクティスの確立の重要性は、私たちの業界ではしばしば見落とされています。ただし、これらの慣行を遵守することで得られる大きな利点は、どれだけ誇張してもしすぎることはありません。開発者としては、スリムで高速なコンテナー イメージの作成を常に優先することが重要です。


これでこの記事は終わりになります。楽しんで読んでいただければ幸いです!