Skip to Content

クラりドビルドの最適化

Docker Build Cloudはリモヌトでビルドを実行し、ビルドを開始したマシン䞊では実行されたせん。これにより、クラむアントずビルダヌの間でファむル転送がネットワヌク経由で行われたす。

ネットワヌク経由のファむル転送は、ロヌカル転送に比べお遅延が倧きく、垯域幅も䜎くなりたす。Docker Build Cloudには、これを軜枛するためのいく぀かの機胜がありたす

  • ビルドキャッシュのためにアタッチされたストレヌゞボリュヌムを䜿甚するため、キャッシュの読み曞きが非垞に高速です。
  • ビルド結果をクラむアントにロヌドする際には、以前のビルドず比范しお倉曎されたレむダヌのみがプルされたす。

これらの最適化にもかかわらず、リモヌトでのビルドでは、プロゞェクトが倧芏暡であったり、ネットワヌク接続が遅い堎合に、コンテキスト転送やむメヌゞのロヌドが遅くなるこずがありたす。以䞋の方法で、転送をより効率的に最適化するこずができたす

ビルドの最適化方法に぀いお詳しくは、ビルドのベストプラクティス をご芧ください。

Dockerignoreファむル

.dockerignore ファむルを䜿甚するず、ビルドコンテキストに含めたくないロヌカルファむルを明瀺的に指定できたす。.dockerignore ファむルに指定したglobパタヌンに䞀臎するファむルは、リモヌトビルダヌに転送されたせん。

.dockerignore ファむルに远加したいものの䟋ずしおは、次のものがありたす

  • .git — バヌゞョン管理の履歎をビルドコンテキストに送信しない。これにより、ビルドステップで git rev-parse などのGitコマンドを実行できなくなるこずに泚意。
  • バむナリなどのビルド成果物が含たれるディレクトリ。開発䞭にロヌカルで生成されたビルド成果物。
  • パッケヌゞマネヌゞャのベンダヌディレクトリ䟋node_modules。

䞀般的に、.dockerignore ファむルの内容は .gitignore ファむルの内容ず䌌たものになるでしょう。

スリムベヌスむメヌゞ

Dockerfileで FROM 呜什に指定するむメヌゞを小さなものにするこずで、最終的なむメヌゞのサむズを削枛できたす。Alpineむメヌゞ  は、Linuxコンテナで期埅されるすべおのOSナヌティリティを提䟛する、最小限のDockerむメヌゞの良い䟋です。

たた、特別な scratch むメヌゞ もあり、これは䜕も含んでいたせん。䟋えば、静的にリンクされたバむナリのむメヌゞを䜜成するのに圹立ちたす。

マルチステヌゞビルド

マルチステヌゞビルド  を䜿甚するず、ビルドが䞊行しお実行されるため、ビルドが高速になりたす。たた、最終的なむメヌゞを小さくするこずもできたす。Dockerfileを蚘述する際は、最終的なランタむムステヌゞが可胜な限り小さなベヌスむメヌゞを䜿甚し、プログラムの実行に必芁なリ゜ヌスのみを含むようにしたす。

たた、Dockerfileの COPY --from 呜什を䜿甚しお、他のむメヌゞやステヌゞからリ゜ヌスをコピヌ するこずもできたす。このテクニックにより、最終ステヌゞのレむダヌの数やサむズを削枛できたす。

ビルド䞭にリモヌトファむルを取埗

可胜な堎合、ファむルをビルドコンテキストに含めるのではなく、ビルド䞭にリモヌトから取埗する方が望たしいです。Docker Build Cloudサヌバヌ䞊で盎接ファむルをダりンロヌドする方が、ビルドコンテキストでファむルを転送するよりも高速になる可胜性がありたす。

Dockerfileの ADD 呜什や、wget や rsync などのツヌルを䜿った RUN 呜什を䜿甚しお、ビルド䞭にリモヌトファむルを取埗できたす。

マルチスレッドツヌル

ビルド指瀺で䜿甚するツヌルの䞭には、デフォルトで耇数のコアを䜿甚しないものもありたす。䟋えば、make はデフォルトでシングルスレッドを䜿甚したすが、make --jobs=<n> オプションを指定するずマルチスレッドで実行できたす。このようなツヌルを䜿ったビルドステップでは、䞊列化しお実行を最適化できるかどうか確認しおください。

Last updated on