GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

新しい .NET Core Alpine Docker イメージを試す

最近、.NET および ASP.NET Docker ファイル サイズの最適化についてブログを書きました。 .NET Core 2.0 は、以前は Debian イメージ上に構築されていましたが、現在、Alpine を使用した .NET Core 2.1 nightlies のプレビュー イメージがあります。この新しい Alpine プレビュー イメージに関する発表については、こちらをご覧ください。 .NET と Docker に関する優れたロールアップの投稿もあります。

2 つの新しい画像が追加されました:

  • 2.1-runtime-alpine
  • 2.1-runtime-deps-alpine

Alpine のサポートは、.NET Core 2.1 リリースの一部です。 .NET Core 2.1 イメージは現在、新しい Alpine イメージを含む microsoft/dotnet-nightly リポジトリで提供されています。 .NET Core 2.1 イメージは、2018 年にリリースされると、microsoft/dotnet リポジトリに昇格されます。

注:-runtime-deps- イメージには、.NET Core アプリケーションに必要な依存関係が含まれていますが、.NET Core ランタイム自体は含まれていません。これは、アプリが .NET Core ランタイムのコピーを含む自己完結型のアプリケーションである場合に使用するイメージです。これは -r [runtimeid] で公開されたアプリです。ほとんどの人は、完全な .NET Core ランタイムを含む -runtime- イメージを使用します。明確にするために:

- runtime イメージには .NET Core ランタイムが含まれており、フレームワーク依存のデプロイされたアプリケーションを実行することを目的としています - サンプルを参照してください

- runtime-deps イメージには、.NET Core が必要とするネイティブの依存関係のみが含まれており、自己完結型のデプロイされたアプリケーションを実行することを目的としています - サンプルを参照してください

.NET Core ではマルチステージ ビルド ファイルを使用することをお勧めします。これにより、アプリをビルドする 1 つのコンテナーと、そのビルドの結果を含む 1 つのコンテナーが作成されます。そうすれば、不要な SDK やコンパイラを含むイメージを出荷することはなくなります。

<ブロック引用>

注:これを読んで、Dockerfiles のイメージ バージョンの詳細を確認し、必要に応じて適切なタグとダイジェストを選択できるようにしてください。理想的には、最新のサービス パッチを含めるためにロール フォワードする Docker ファイルを選択します。

この docker ファイルを使用して、SDK イメージを使用してビルドし、公開すると、結果は約 219 MB になります。

FROM microsoft/dotnet:2.0-sdk as builder  

RUN mkdir -p /root/src/app/dockertest
WORKDIR /root/src/app/dockertest

COPY dockertest.csproj .
RUN dotnet restore ./dockertest.csproj

COPY . .
RUN dotnet publish -c release -o published

FROM microsoft/dotnet:2.0.0-runtime

WORKDIR /root/
COPY --from=builder /root/src/app/dockertest/published .
ENV ASPNETCORE_URLS=http://+:5000
EXPOSE 5000/tcp
CMD ["dotnet", "./dockertest.dll"]

次に、これを Dockerfile.debian として保存し、次のようにビルドします:

> docker build . -t shanselman/dockertestdeb:0.1 -f dockerfile.debian

標準の ASP.NET アプリでは、この画像は最終的に 219 MB になります。

ここで、1 行だけ変更して、2.1 alpine ランタイムを使用します

FROM microsoft/dotnet-nightly:2.1-runtime-alpine

そして、次のようにビルドします:

> docker build . -t shanselman/dockertestalp:0.1 -f dockerfile.alpine

2 つを比較します。

> docker images | find /i "dockertest"
shanselman/dockertestalp 0.1 3f2595a6833d 16 minutes ago 82.8MB
shanselman/dockertestdeb 0.1 0d62455c4944 30 minutes ago 219MB

良い。 Hello World Web アプリの 219 メガバイトではなく、約 83 メガバイトになりました。 マイクロのアイデア サービスはより実現可能です!

こちらの GitHub イシュー (https://github.com/dotnet/dotnet-docker-nightly/issues/500) にアクセスして、これらの Alpine イメージをテストする際の考えと結果を提供してください。また、「-debian-slim」に興味はありますか?これは Alpine の中間ですが、-debian ほど重くはありません。

.NET と Docker の周りで多くの素晴らしいことが起こっています。また、最小限の ASP.NET Core Windows コンテナーの作成に関する Jeff Fritz の投稿もチェックして、Windows コンテナーで実行されている .(full) Framework アプリケーションを圧縮する方法も確認してください。たとえば、Windows Nano Server のイメージはわずか 93 MB しか圧縮されていません .

スポンサー: .NET Core 2.0 サポート、Value Tracking と Call Tracking、MSTest ランナー、新しいコード インスペクションとリファクタリング、デバッガーの Parallel Stacks ビューの最新の JetBrains Rider プレビューを入手してください。


Docker
  1. Docker Composev2の新機能

  2. Dockerイメージを変更する方法

  3. Dockerイメージの概要

  1. ビルド済みのDockerイメージ入門

  2. .NET Core アプリが Docker コンテナーで実行され、XUnit で SkippableFacts が実行されていることを検出する

  3. ASP.NET Core Docker イメージ サイズの最適化

  1. Dockerチュートリアル–LinuxでのDocker入門

  2. Dockerで.NETアプリを実行する方法

  3. Dockerイメージをクリーンアップおよび削除する方法