ライト級.Balenaの上のNET 5コンテナ


Balenaに加わる前に、私は純粋でした.ネットガイ.コーディングしています.2002年に発売されて以来、私は小学生の時には、1 , 466 , 915円の講義を積極的に避けています.
Balenaに加わることは、私が休みをとるのを見ました.ネットとBalenaのスタックの学習に私のエネルギーを集中し、私のDocker、Pythonとノードの改善.JSスキル.最近、しかし、私はかゆみがありました.閉じるこの動画はお気に入りから削除されています.私は私の75457915アンペアプロジェクトでは75457915円でだまされていたが、ドッカーのイメージサイズにはあまり注意を払わなかった.私は私の最初のグラウンドアッププロジェクトをリリースすることに集中していました.それは私自身のコードでした.その結果は、全体の多くをしない単一のページwebappのために~ 300 MBイメージです.
きっと私たちはもっとうまくできる.

すぐにリリースされるため、バージョン4667915円のバージョン2は動的にそれを設定するAPIを持っています-私はそれのためのリモートコントロールを作りたかったです.ブレザーを使います.NET 5、およびいくつかのオプションを探索するイメージサイズをできるだけ小さくする.
レッツゴー!

私はブラウザブロックにいくつかのAPI呼び出しを送信し、結果を表示する迅速なBlazorページをノックしました.何も複雑です.プロジェクトの構築

1 MBの実行可能ファイルになりました.ディー

そして、私はプロジェクトを構築し、それを私のBalenaアプリにプッシュするBOGベーシック、シングルステージDockerFileを行った.

Whoaは、円周率を非難します!

1 GB ...それは私が全体を引っ張っているからです.私は私の小さな実行可能を実行する必要はありません.

呼び出しの最初のポートは多段Dockerfileです.すべてのビルド依存関係を実行する必要はありません.NET実行可能ファイルを一度構築します.それで、私たちはそれを構築することができて、結果をスリムな実行イメージにコピーします:

結果は以下の通りです:

OK!したがって、私たちはちょうどマルチステージのDockerfileを使用することによって280 MBまで下がっていて、すべてのビルド依存関係を維持していません.これは私の以前のBlazorプロジェクトと同等です.しかし、より多くのことが行われます.アルパイン画像で遊ぼう.

アルパインは、軽量Linuxディストリビューションです.私たちはコンテナのためにより小さなイメージを作るためにそれを使うことができます、しかし、onusはすべてのランタイム依存関係があることを確認するために開発者に押されます.このプロジェクトのために、私は確認する必要があります.NET 5ランタイムデプスがインストールされています

私はアルパイン画像を使っていて、それを入れるために、75457914円を使っていることが分かります.NET実行時依存.それから、私は2つのenv声明をして、コンテナをASPNetCore HTTPサーバ(Kestrel)を走らせるためにセットアップして、コンパイルされた実行可能ファイルを走らせます.
画像サイズ?井戸

157 MB!それはすばらしい.
...
しかし、さらにあります.

ネット今ではいくつかのトリックをあなたのイメージのサイズを小さくするためにスリーブのです.これらは次のとおりです.

DLL依存性のEXEと束ではなく、配布可能な単一のファイルを作成する

パッケージ.実行時にNetランタイムを実行します.上記の高山ステップにも注意してください.

自己充足したファイルはデバイス・アーキテクチャを目標とする必要があります(さもなければ、それは彼ら全員と無駄なスペースを目標とする必要があります).私はインテルNucにこの実験を行っているので、X 64をターゲットにしています.RIDS(ランタイム識別)の選択は、7547915円である.

マジック部分:バンドルトリミング.この手順では、ソースを分析する(数分かかる)と不要です.NET Frameworkコンポーネントが公開されている実行可能ファイルから削除されます.

もっと魔法.一言で言えば、このパラメータがなければ、結果の実行可能ファイルは、一部のフレームワークアセンブリを使用している場合でも、全体のフレームワークアセンブリを持ちます.このオプションを使用すると、各アセンブリの各メンバーが評価され、参照されるオブジェクトのみが含まれます.これは私のために見つけました、しかし、私は実行時問題の報告を見ました.私のプロジェクトのためにこれをセットしないことは~ 10 MBの違いを引き起こします、それで、若干のテストをするか、注意の側でちょうどerrをして、この最適化を残してください.

さて、上記のdockerfileの発行ラインは次のようになります.

これにより、最終的なイメージサイズが得られます.

1 GBのベースラインから95 MBのダウン.甘い!

それで、あなたが使用について考えているならば.Balenaアプリを含むDockerのネット、次に、いくつかの出版の最適化と多段高山DockerFilesに見てください.あなたはかなり小さいイメージにかなり多くの機能を詰め込むことができます.
ハッピーハッキング!