Skip to content

Approach for using Crossgen2 #1791

@richlander

Description

@richlander

I was reading through #1775. It seems that there are a bunch of choices and trade-offs to make.

To date, we valued the following:

  • Small (as possible) images.
  • Creating dependencies between images to single instance binaries in docker layers as much as possible (for example, the aspnet image depends on the runtime one. That benefits in cases where you use both images. We intend to do more of this over time. The biggest win is getting the SDK to depend on the aspnet image (which then in turn depends on runtime). That would help docker-based builds alot!

Going forward, we are going to have to make more tradeoffs, and likely give up on some desirable scenarios.

I see the following rough-hewn options:

  • Each layer is monolithic and optimized for itself (aspnet includes but does not depend on runtime; this matches the current state of the PR). Basically, aggregation not inheritance at every layer.
  • The runtime uses composite images and nothing else. ASP.NET and the SDK build on top of the runtime (and the sdk might build on top of aspnet) and are in the same version bubble as the runtime but do not use composite images. Same with apps that build on top.
  • Self-contained apps can generate fully composite and linked apps. (one layer on top of runtime-deps). This option stands along from the rest. It's not an alternative, but just another option for people to opt-into and support.

I'm attracted to the second option as the default story. My guess is that it would be a sweet spot, assuming crossgen supports it. This option enables the new crossgen2 features, while keeping us on our current path (described at the start of this issue).

/cc @davidwrighton, @MichaelSimons

Metadata

Metadata

Labels

area-dockerfilesConcerns the official .NET Dockerfiles or Dockerfile templates

Type

No type
No fields configured for issues without a type.

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions