Skip to content

Commit 4819bd1

Browse files
ivdiazsalbussell
andauthored
Add Dockerfiles for Linux .NET Composite Images (#4594)
Co-authored-by: Logan Bussell <loganbussell@microsoft.com>
1 parent be06137 commit 4819bd1

File tree

25 files changed

+448
-45
lines changed

25 files changed

+448
-45
lines changed

.mar/portal/README.aspnet.portal.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@
88

99
This image contains the ASP.NET Core and .NET runtimes and libraries and is optimized for running ASP.NET Core apps in production.
1010

11+
### Composite container images
12+
13+
Starting from .NET 8, a composite version of the ASP.NET images, `denoted with the -composite` tag part, is being offered alongside the regular image. The main characteristics of these images are their smaller size on disk while keeping the performance of the default [ReadyToRun (R2R) setting](https://learn.microsoft.com/dotnet/core/deploying/ready-to-run). The caveat is that the composite images have tighter version coupling. This means the final app run on them cannot use handpicked custom versions of the framework and/or ASP.NET assemblies that are built into the composite binary.
14+
15+
For a full technical description on how the composites work, we have a [feature doc here](https://github.com/dotnet/runtime/blob/main/docs/design/features/readytorun-composite-format-design.md).
16+
1117
Watch [discussions](https://github.com/dotnet/dotnet-docker/discussions/categories/announcements) for Docker-related .NET announcements.
1218

1319
## Featured Tags

README.aspnet.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@
1717

1818
This image contains the ASP.NET Core and .NET runtimes and libraries and is optimized for running ASP.NET Core apps in production.
1919

20+
## Composite container images
21+
22+
Starting from .NET 8, a composite version of the ASP.NET images, `denoted with the -composite` tag part, is being offered alongside the regular image. The main characteristics of these images are their smaller size on disk while keeping the performance of the default [ReadyToRun (R2R) setting](https://learn.microsoft.com/dotnet/core/deploying/ready-to-run). The caveat is that the composite images have tighter version coupling. This means the final app run on them cannot use handpicked custom versions of the framework and/or ASP.NET assemblies that are built into the composite binary.
23+
24+
For a full technical description on how the composites work, we have a [feature doc here](https://github.com/dotnet/runtime/blob/main/docs/design/features/readytorun-composite-format-design.md).
25+
2026
Watch [discussions](https://github.com/dotnet/dotnet-docker/discussions/categories/announcements) for Docker-related .NET announcements.
2127

2228
# Usage
@@ -73,6 +79,7 @@ Tags | Dockerfile | OS Version
7379
-----------| -------------| -------------
7480
8.0.0-preview.5-bookworm-slim-amd64, 8.0-preview-bookworm-slim-amd64, 8.0.0-preview.5-bookworm-slim, 8.0-preview-bookworm-slim, 8.0.0-preview.5, 8.0-preview, latest | [Dockerfile](https://github.com/dotnet/dotnet-docker/blob/nightly/src/aspnet/8.0/bookworm-slim/amd64/Dockerfile) | Debian 12
7581
8.0.0-preview.5-alpine3.17-amd64, 8.0-preview-alpine3.17-amd64, 8.0-preview-alpine-amd64, 8.0.0-preview.5-alpine3.17, 8.0-preview-alpine3.17, 8.0-preview-alpine | [Dockerfile](https://github.com/dotnet/dotnet-docker/blob/nightly/src/aspnet/8.0/alpine3.17/amd64/Dockerfile) | Alpine 3.17
82+
8.0.0-preview.5-alpine3.17-composite-amd64, 8.0-preview-alpine3.17-composite-amd64, 8.0-preview-alpine-composite-amd64, 8.0.0-preview.5-alpine3.17, 8.0-preview-alpine3.17, 8.0-preview-alpine | [Dockerfile](https://github.com/dotnet/dotnet-docker/blob/nightly/src/aspnet/8.0/alpine3.17-composite/amd64/Dockerfile) | Alpine 3.17
7683
8.0.0-preview.5-jammy-amd64, 8.0-preview-jammy-amd64, 8.0.0-preview.5-jammy, 8.0-preview-jammy | [Dockerfile](https://github.com/dotnet/dotnet-docker/blob/nightly/src/aspnet/8.0/jammy/amd64/Dockerfile) | Ubuntu 22.04
7784
8.0.0-preview.5-jammy-chiseled-amd64, 8.0-preview-jammy-chiseled-amd64, 8.0.0-preview.5-jammy-chiseled, 8.0-preview-jammy-chiseled | [Dockerfile](https://github.com/dotnet/dotnet-docker/blob/nightly/src/aspnet/8.0/jammy-chiseled/amd64/Dockerfile) | Ubuntu 22.04
7885

@@ -94,6 +101,7 @@ Tags | Dockerfile | OS Version
94101
-----------| -------------| -------------
95102
8.0.0-preview.5-bookworm-slim-arm64v8, 8.0-preview-bookworm-slim-arm64v8, 8.0.0-preview.5-bookworm-slim, 8.0-preview-bookworm-slim, 8.0.0-preview.5, 8.0-preview, latest | [Dockerfile](https://github.com/dotnet/dotnet-docker/blob/nightly/src/aspnet/8.0/bookworm-slim/arm64v8/Dockerfile) | Debian 12
96103
8.0.0-preview.5-alpine3.17-arm64v8, 8.0-preview-alpine3.17-arm64v8, 8.0-preview-alpine-arm64v8, 8.0.0-preview.5-alpine3.17, 8.0-preview-alpine3.17, 8.0-preview-alpine | [Dockerfile](https://github.com/dotnet/dotnet-docker/blob/nightly/src/aspnet/8.0/alpine3.17/arm64v8/Dockerfile) | Alpine 3.17
104+
8.0.0-preview.5-alpine3.17-composite-arm64v8, 8.0-preview-alpine3.17-composite-arm64v8, 8.0-preview-alpine-composite-arm64v8, 8.0.0-preview.5-alpine3.17, 8.0-preview-alpine3.17, 8.0-preview-alpine | [Dockerfile](https://github.com/dotnet/dotnet-docker/blob/nightly/src/aspnet/8.0/alpine3.17-composite/arm64v8/Dockerfile) | Alpine 3.17
97105
8.0.0-preview.5-jammy-arm64v8, 8.0-preview-jammy-arm64v8, 8.0.0-preview.5-jammy, 8.0-preview-jammy | [Dockerfile](https://github.com/dotnet/dotnet-docker/blob/nightly/src/aspnet/8.0/jammy/arm64v8/Dockerfile) | Ubuntu 22.04
98106
8.0.0-preview.5-jammy-chiseled-arm64v8, 8.0-preview-jammy-chiseled-arm64v8, 8.0.0-preview.5-jammy-chiseled, 8.0-preview-jammy-chiseled | [Dockerfile](https://github.com/dotnet/dotnet-docker/blob/nightly/src/aspnet/8.0/jammy-chiseled/arm64v8/Dockerfile) | Ubuntu 22.04
99107

@@ -115,6 +123,7 @@ Tags | Dockerfile | OS Version
115123
-----------| -------------| -------------
116124
8.0.0-preview.5-bookworm-slim-arm32v7, 8.0-preview-bookworm-slim-arm32v7, 8.0.0-preview.5-bookworm-slim, 8.0-preview-bookworm-slim, 8.0.0-preview.5, 8.0-preview, latest | [Dockerfile](https://github.com/dotnet/dotnet-docker/blob/nightly/src/aspnet/8.0/bookworm-slim/arm32v7/Dockerfile) | Debian 12
117125
8.0.0-preview.5-alpine3.17-arm32v7, 8.0-preview-alpine3.17-arm32v7, 8.0-preview-alpine-arm32v7, 8.0.0-preview.5-alpine3.17, 8.0-preview-alpine3.17, 8.0-preview-alpine | [Dockerfile](https://github.com/dotnet/dotnet-docker/blob/nightly/src/aspnet/8.0/alpine3.17/arm32v7/Dockerfile) | Alpine 3.17
126+
8.0.0-preview.5-alpine3.17-composite-arm32v7, 8.0-preview-alpine3.17-composite-arm32v7, 8.0-preview-alpine-composite-arm32v7, 8.0.0-preview.5-alpine3.17, 8.0-preview-alpine3.17, 8.0-preview-alpine | [Dockerfile](https://github.com/dotnet/dotnet-docker/blob/nightly/src/aspnet/8.0/alpine3.17-composite/arm32v7/Dockerfile) | Alpine 3.17
118127
8.0.0-preview.5-jammy-arm32v7, 8.0-preview-jammy-arm32v7, 8.0.0-preview.5-jammy, 8.0-preview-jammy | [Dockerfile](https://github.com/dotnet/dotnet-docker/blob/nightly/src/aspnet/8.0/jammy/arm32v7/Dockerfile) | Ubuntu 22.04
119128
8.0.0-preview.5-jammy-chiseled-arm32v7, 8.0-preview-jammy-chiseled-arm32v7, 8.0.0-preview.5-jammy-chiseled, 8.0-preview-jammy-chiseled | [Dockerfile](https://github.com/dotnet/dotnet-docker/blob/nightly/src/aspnet/8.0/jammy-chiseled/arm32v7/Dockerfile) | Ubuntu 22.04
120129

eng/Set-DotnetVersions.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ if ($SdkVersion) {
5959
}
6060

6161
if ($AspnetVersion) {
62-
$updateDepsArgs += @("--product-version", "aspnet=$AspnetVersion", "--product-version", "aspnet-runtime-targeting-pack=$AspnetVersion")
62+
$updateDepsArgs += @("--product-version", "aspnet=$AspnetVersion", "--product-version", "aspnet-runtime-targeting-pack=$AspnetVersion", "--product-version", "aspnet-composite=$AspnetVersion")
6363
}
6464

6565
if ($RuntimeVersion) {
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
{{
2+
set dotnetVersion to join(slice(split(PRODUCT_VERSION, "."), 0, 2), ".") ^
3+
set isAlpine to find(OS_VERSION, "alpine") >= 0 ^
4+
set isMariner to find(OS_VERSION, "mariner") >= 0 ^
5+
set isDistroless to find(OS_VERSION, "distroless") >= 0 || find(OS_VERSION, "chiseled") >= 0 ^
6+
set isFullMariner to isMariner && !isDistroless ^
7+
set isDistrolessMariner to isMariner && isDistroless ^
8+
set baseUrl to VARIABLES[cat("base-url|", dotnetVersion, "|", VARIABLES["branch"])] ^
9+
set isInternal to find(baseUrl, "msrc") >= 0 || find(baseUrl, "internal") >= 0 ^
10+
set isRpmInstall to false ^
11+
set isSingleStage to (isAlpine || isRpmInstall) && !isInternal ^
12+
set runtimeDepsBaseTag to
13+
cat("$REPO:", VARIABLES[cat("dotnet|", dotnetVersion, "|product-version")], "-", OS_VERSION, ARCH_TAG_SUFFIX) ^
14+
set osVersionBase to when(isDistroless, match(OS_VERSION, ".+(?=.*-)")[0], OS_VERSION_BASE) ^
15+
set installerImageTag to when(isDistrolessMariner,
16+
cat("mcr.microsoft.com/cbl-mariner/base/core:", OS_VERSION_NUMBER),
17+
when(isAlpine || isFullMariner,
18+
runtimeDepsBaseTag,
19+
cat(ARCH_VERSIONED, "/buildpack-deps:", osVersionBase, "-curl")))
20+
}}ARG REPO=mcr.microsoft.com/dotnet/runtime-deps{{ if isSingleStage:
21+
{{
22+
23+
_ SINGLE STAGE
24+
25+
}}FROM {{runtimeDepsBaseTag}}
26+
{{ if isAlpine:
27+
{{InsertTemplate("../Dockerfile.alpine.invariant-mode")}}
28+
}}
29+
{{InsertTemplate("../runtime/Dockerfile.envs")}}
30+
{{InsertTemplate("Dockerfile.envs")}}
31+
32+
# Install ASP.NET Composite Runtime
33+
{{InsertTemplate("../runtime/Dockerfile.linux.install-runtime",
34+
[
35+
"install-method": "download-and-install",
36+
"dest-dir": "/usr/share/dotnet",
37+
"add-symlink": !isRpmInstall,
38+
"is-rpm-install": isRpmInstall,
39+
"is-composite-runtime": "true",
40+
])}}^
41+
else:{{
42+
43+
_ MULTI STAGE
44+
45+
}}
46+
47+
# Installer image
48+
FROM {{installerImageTag}} AS installer
49+
{{ if isInternal:
50+
ARG SAS_QUERY_STRING
51+
}}{{ if isDistrolessMariner:
52+
{{InsertTemplate("../Dockerfile.linux.distroless-mariner-installer-prereqs")}}
53+
^elif isFullMariner && !isRpmInstall:
54+
RUN {{InsertTemplate("../Dockerfile.linux.install-pkgs",
55+
[
56+
"pkgs": ["tar"]
57+
])}}
58+
}}
59+
60+
# Retrieve ASP.NET Composite Runtime
61+
{{InsertTemplate("../runtime/Dockerfile.linux.install-runtime",
62+
[
63+
"install-method": when(isInternal && isRpmInstall, "download", "download-and-install"),
64+
"use-local-version-var": "true",
65+
"dest-dir": when(isDistroless, "/usr/share/dotnet", "/dotnet"),
66+
"is-internal": isInternal,
67+
"url-suffix": when(isInternal, "$SAS_QUERY_STRING", ""),
68+
"is-rpm-install": isRpmInstall,
69+
"is-composite-runtime": "true"
70+
])}}{{ if isDistroless:
71+
72+
RUN mkdir /dotnet-symlink \
73+
&& ln -s /usr/share/dotnet/dotnet /dotnet-symlink/dotnet}}
74+
75+
# ASP.NET Composite Runtime Image
76+
FROM {{runtimeDepsBaseTag}}
77+
78+
{{InsertTemplate("../runtime/Dockerfile.envs")}}
79+
{{InsertTemplate("Dockerfile.envs")}}
80+
{{ if isInternal && isRpmInstall:
81+
{{InsertTemplate("Dockerfile.linux.install-runtime",
82+
[
83+
"install-method": "copy-and-install",
84+
"dest-dir": when(isDistroless, "/usr/share/dotnet", "/dotnet"),
85+
"is-internal": isInternal,
86+
"url-suffix": when(isInternal, "$SAS_QUERY_STRING", ""),
87+
"installer-stage": "installer",
88+
"is-rpm-install": isRpmInstall
89+
])}}}}{{ if isDistroless:
90+
COPY --from=installer ["/usr/share/dotnet", "/usr/share/dotnet"]
91+
COPY --from=installer ["/dotnet-symlink", "/usr/bin"]{{ if !isMariner || dotnetVersion != "6.0":
92+
93+
ENTRYPOINT ["/usr/bin/dotnet"]
94+
CMD ["--info"]}}^
95+
elif !(isInternal && isRpmInstall):
96+
COPY --from=installer ["/dotnet", "/usr/share/dotnet"]
97+
RUN {{InsertTemplate("../runtime/Dockerfile.linux.symlink")}}}}}}
98+

eng/dockerfile-templates/runtime/Dockerfile.linux.install-runtime

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
is-internal (optional): Whether the Dockerfile is targeting an internal build of the product.
99
url-suffix (optional): Suffix string to append the end of the URL.
1010
installer-stage (optional): Name of the Dockerfile stage responsible for installation
11-
is-rpm-install (optional): Whether to install RPM versus tarball ^
11+
is-rpm-install (optional): Whether to install RPM versus tarball
12+
is-composite-runtime (optional): Whether to install aspnetcore composite version ^
1213

1314
set dotnetVersion to join(slice(split(PRODUCT_VERSION, "."), 0, 2), ".") ^
1415
set isAlpine to find(OS_VERSION, "alpine") >= 0 ^
@@ -19,15 +20,30 @@
1920
when(ARGS["is-internal"],
2021
VARIABLES[cat("runtime|", dotnetVersion, "|build-version")],
2122
"$DOTNET_VERSION")) ^
23+
set aspnetCompositeVersionDir to when(ARGS["use-local-version-var"],
24+
"$aspnetcore_version",
25+
when(ARGS["is-internal"],
26+
VARIABLES[cat("aspnet|", dotnetVersion, "|build-version")],
27+
"$ASPNET_VERSION")) ^
2228
set isInternalStableBranding to ARGS["is-internal"] &&
2329
(find(VARIABLES[cat("sdk|", dotnetVersion, "|build-version")], "-servicing") >= 0 ||
2430
find(VARIABLES[cat("sdk|", dotnetVersion, "|build-version")], "-rtm") >= 0) ^
2531
set runtimeVersionFile to when(isInternalStableBranding,
2632
VARIABLES[cat("dotnet|", dotnetVersion, "|product-version")],
2733
runtimeVersionDir) ^
28-
set runtimeBaseUrl to cat(
29-
VARIABLES[cat("base-url|", dotnetVersion, "|", VARIABLES["branch"])],
30-
"/Runtime/", runtimeVersionDir, "/") ^
34+
set aspnetCompositeVersionFile to when(isInternalStableBranding,
35+
VARIABLES[cat("dotnet|", dotnetVersion, "|product-version")],
36+
aspnetCompositeVersionDir) ^
37+
set fileArch to when(ARGS["is-rpm-install"] && ARCH_SHORT = "arm64", "aarch64", ARCH_SHORT) ^
38+
set fileExt to when(ARGS["is-rpm-install"], "rpm", "tar.gz") ^
39+
set filePlatform to when(ARGS["is-rpm-install"], "", when(isAlpine, "-linux-musl", "-linux")) ^
40+
set baseUrl to VARIABLES[cat("base-url|", dotnetVersion, "|", VARIABLES["branch"])] ^
41+
set runtimeBaseUrl to cat(baseUrl, "/Runtime/", runtimeVersionDir, "/") ^
42+
set aspnetCompositeUrl to cat(baseUrl, "/aspnetcore/Runtime/", aspnetCompositeVersionDir, "/aspnetcore-runtime-composite-", aspnetCompositeVersionFile,
43+
filePlatform, "-", fileArch, ".", fileExt, ARGS["url-suffix"]) ^
44+
set localVersionVar to when(ARGS["is-composite-runtime"],
45+
VARIABLES[cat("runtime|", dotnetVersion, "|build-version")],
46+
VARIABLES[cat("aspnet|", dotnetVersion, "|build-version")]) ^
3147
set rpmFileArch to when(ARCH_SHORT = "arm64", "aarch64", ARCH_SHORT) ^
3248
set rpms to [
3349
[
@@ -49,15 +65,24 @@
4965
"sha-var-name": "dotnet_sha512"
5066
]
5167
] ^
52-
set tarballs to [
68+
set tarballs to when(ARGS["is-composite-runtime"],
5369
[
54-
"filename": "dotnet.tar.gz",
55-
"url": cat(runtimeBaseUrl, "dotnet-runtime-", runtimeVersionFile, "-", varPlatform, "-", ARCH_SHORT, ".tar.gz",
56-
ARGS["url-suffix"]),
57-
"sha": VARIABLES[join(["runtime", dotnetVersion, varPlatform, ARCH_SHORT, "sha"], "|")],
58-
"sha-var-name": "dotnet_sha512"
59-
]
60-
] ^
70+
[
71+
"filename": "dotnet.tar.gz",
72+
"url": aspnetCompositeUrl,
73+
"sha": VARIABLES[join(["aspnet-composite", dotnetVersion, varPlatform, ARCH_SHORT, "sha"], "|")],
74+
"sha-var-name": "dotnet_sha512"
75+
]
76+
],
77+
[
78+
[
79+
"filename": "dotnet.tar.gz",
80+
"url": cat(runtimeBaseUrl, "dotnet-runtime-", runtimeVersionFile, "-", varPlatform, "-", ARCH_SHORT, ".tar.gz",
81+
ARGS["url-suffix"]),
82+
"sha": VARIABLES[join(["runtime", dotnetVersion, varPlatform, ARCH_SHORT, "sha"], "|")],
83+
"sha-var-name": "dotnet_sha512"
84+
]
85+
]) ^
6186
set files to when(ARGS["is-rpm-install"], rpms, tarballs) ^
6287
set copyEnabled to ARGS["install-method"] = "copy-and-install" ^
6388
set downloadEnabled to ARGS["install-method"] = "download" || ARGS["install-method"] = "download-and-install" ^
@@ -70,7 +95,8 @@ if copyEnabled:{{InsertTemplate("../Dockerfile.linux.copy-files",
7095
"destination": ""
7196
])
7297
}}
73-
}}RUN {{if ARGS["use-local-version-var"]:dotnet_version={{VARIABLES[cat("runtime|", dotnetVersion, "|build-version")]}} \
98+
}}RUN {{if ARGS["use-local-version-var"]:{{ if ARGS["is-composite-runtime"]:aspnetcore_version={{VARIABLES[cat("aspnet|", dotnetVersion, "|buildVersion")]}} ^
99+
else:dotnet_version={{VARIABLES[cat("runtime|", dotnetVersion, "|build-version")]}}}} \
74100
&& }}{{InsertTemplate("../Dockerfile.linux.download-and-install",
75101
[
76102
"files": files,

eng/mcr-tags-metadata-templates/aspnet-tags.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ $(McrTagsYmlTagGroup:8.0-preview-bookworm-slim-amd64)
33
customSubTableTitle: .NET 8 Preview Tags
44
$(McrTagsYmlTagGroup:8.0-preview-alpine3.17-amd64)
55
customSubTableTitle: .NET 8 Preview Tags
6+
$(McrTagsYmlTagGroup:8.0-preview-alpine3.17-composite-amd64)
7+
customSubTableTitle: .NET 8 Preview Tags
68
$(McrTagsYmlTagGroup:8.0-preview-jammy-amd64)
79
customSubTableTitle: .NET 8 Preview Tags
810
$(McrTagsYmlTagGroup:8.0-preview-jammy-chiseled-amd64)
@@ -20,6 +22,8 @@ $(McrTagsYmlTagGroup:8.0-preview-bookworm-slim-arm64v8)
2022
customSubTableTitle: .NET 8 Preview Tags
2123
$(McrTagsYmlTagGroup:8.0-preview-alpine3.17-arm64v8)
2224
customSubTableTitle: .NET 8 Preview Tags
25+
$(McrTagsYmlTagGroup:8.0-preview-alpine3.17-composite-arm64v8)
26+
customSubTableTitle: .NET 8 Preview Tags
2327
$(McrTagsYmlTagGroup:8.0-preview-jammy-arm64v8)
2428
customSubTableTitle: .NET 8 Preview Tags
2529
$(McrTagsYmlTagGroup:8.0-preview-jammy-chiseled-arm64v8)
@@ -37,6 +41,8 @@ $(McrTagsYmlTagGroup:8.0-preview-bookworm-slim-arm32v7)
3741
customSubTableTitle: .NET 8 Preview Tags
3842
$(McrTagsYmlTagGroup:8.0-preview-alpine3.17-arm32v7)
3943
customSubTableTitle: .NET 8 Preview Tags
44+
$(McrTagsYmlTagGroup:8.0-preview-alpine3.17-composite-arm32v7)
45+
customSubTableTitle: .NET 8 Preview Tags
4046
$(McrTagsYmlTagGroup:8.0-preview-jammy-arm32v7)
4147
customSubTableTitle: .NET 8 Preview Tags
4248
$(McrTagsYmlTagGroup:8.0-preview-jammy-chiseled-arm32v7)
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
This image contains the ASP.NET Core and .NET runtimes and libraries and is optimized for running ASP.NET Core apps in production.
2+
3+
{{InsertTemplate("About.composite-aspnet.md", [ "top-header": ARGS["top-header"] ])}}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{{
2+
_ ARGS:
3+
top-header: The string to use as the top-level header.
4+
readme-host: Moniker of the site that will host the readme
5+
}}{{ARGS["top-header"]}}# Composite container images
6+
7+
Starting from .NET 8, a composite version of the ASP.NET images, `denoted with the -composite` tag part, is being offered alongside the regular image. The main characteristics of these images are their smaller size on disk while keeping the performance of the default [ReadyToRun (R2R) setting](https://learn.microsoft.com/dotnet/core/deploying/ready-to-run). The caveat is that the composite images have tighter version coupling. This means the final app run on them cannot use handpicked custom versions of the framework and/or ASP.NET assemblies that are built into the composite binary.
8+
9+
For a full technical description on how the composites work, we have a [feature doc here](https://github.com/dotnet/runtime/blob/main/docs/design/features/readytorun-composite-format-design.md).

eng/readme-templates/About.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@
1111
"leading-line-break": "true",
1212
"readme-host": ARGS["readme-host"]
1313
])}}}}
14-
{{InsertTemplate(join(["About", templateQualifier, "md"], "."))}}
14+
{{InsertTemplate(join(["About", templateQualifier, "md"], "."), [ "top-header": ARGS["top-header"] ])}}
1515

1616
Watch [discussions](https://github.com/dotnet/dotnet-docker/discussions/categories/announcements) for Docker-related .NET announcements.

eng/update-dependencies/DockerfileShaUpdater.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ public DockerfileShaUpdater(
8686
{ "runtime-deps-cm.2", new string[] { $"$DOTNET_BASE_URL/Runtime/$VERSION_DIR/dotnet-runtime-deps-$VERSION_FILE-cm.2-{GetRpmArchFormat()}.$ARCHIVE_EXT" } },
8787

8888
{ "aspnet", new string[] { $"$DOTNET_BASE_URL/aspnetcore/Runtime/$VERSION_DIR/aspnetcore-runtime-$VERSION_FILE$OPTIONAL_OS-{GetRuntimeSdkArchFormat()}.$ARCHIVE_EXT" } },
89+
{ "aspnet-composite", new string[] { $"$DOTNET_BASE_URL/aspnetcore/Runtime/$VERSION_DIR/aspnetcore-runtime-composite-$VERSION_FILE$OPTIONAL_OS-{GetRuntimeSdkArchFormat()}.$ARCHIVE_EXT" } },
8990
{
9091
"aspnet-runtime-targeting-pack",
9192
new string[]

0 commit comments

Comments
 (0)