Debian 项目在推出 13.1 版本两个多月后,如期发布了 Debian 13 “Trixie” 系列的第二个稳定更新 —— Debian 13.2。这次更新没有加入新功能,而是把重点放在安全补丁、漏洞修复和系统稳定性上,属于典型的 “稳中求稳” 版本。

更多信息请查看:
本篇文章介绍基于 Debian 13.2 的自定义 ASP.NET Core 9.0 基础镜像,然后基于此构建应用镜像。
说明:如需构建
ASP.NET Core 10.0基础镜像也是类似的方法,只需修改更新包索引并安装ASP.NET 10.0运行时即可。
第一步:构建 ASP.NET 9.0 基础镜像
- 创建
Dockerfile.base:
# 基于 Debian 13.2 构建 ASP.NET 9.0 基础镜像
FROM debian:13.2
# 设置标签信息
LABEL maintainer="Custom Builder"
LABEL description="ASP.NET 9.0 Runtime on Debian 13.2"
LABEL version="1.0"
# 设置非交互模式
ENV DEBIAN_FRONTEND=noninteractive
# 更新包索引并安装基本依赖
RUN apt-get update && apt-get install -y \
curl \
wget \
gnupg \
apt-transport-https \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*
# 安装 Microsoft 包签名密钥
RUN curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o microsoft.gpg \
&& mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg \
&& chmod 644 /etc/apt/trusted.gpg.d/microsoft.gpg
# 添加 Microsoft 包仓库 (针对 bookworm)
RUN echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-debian-bookworm-prod bookworm main" > /etc/apt/sources.list.d/dotnetdev.list
# 更新包索引并安装 ASP.NET 9.0 运行时
RUN apt-get update && apt-get install -y \
aspnetcore-runtime-9.0 \
&& rm -rf /var/lib/apt/lists/*
# 创建应用工作目录
WORKDIR /app
# 设置默认环境变量
ENV ASPNETCORE_URLS=http://+:80
ENV DOTNET_RUNNING_IN_CONTAINER=true
# 暴露默认端口
EXPOSE 80
# 创建非 root 用户
RUN adduser --disabled-password --gecos '' app \
&& chown -R app:app /app
USER app
# 设置入口点
ENTRYPOINT ["dotnet"]
- 执行构建验证:
# 进入文件Dockerfile.base的根目录
docker build -f Dockerfile.base -t aspnet:9.0-debian13.2 ./
- 输出信息:

第二步:基于自定义基础镜像构建应用镜像
- 创建
Dockerfile.app:
# 使用自定义的 ASP.NET 9.0 基础镜像
FROM your-registry/aspnet:9.0-debian13.2
# 设置工作目录
WORKDIR /app
# 复制已发布的应用程序文件
COPY ./publish .
# 如果需要以特定用户运行,可以取消注释以下行
# USER app
# 应用程序入口点
ENTRYPOINT ["dotnet", "YourApplication.dll"]
第三步:完整构建流程脚本
- 创建
build-scripts/build-base-image.sh:
#!/bin/bash
# 构建 ASP.NET 9.0 基础镜像
echo "Building ASP.NET 9.0 base image on Debian 13.2..."
docker build -f Dockerfile.base -t your-registry/aspnet:9.0-debian13.2 .
# 推送到私有仓库(可选)
# docker push your-registry/aspnet:9.0-debian13.2
echo "Base image built successfully!"
- 创建
build-scripts/build-app-image.sh:
#!/bin/bash
# 发布 .NET 应用
echo "Publishing .NET 9 application..."
dotnet publish -c Release -o ./publish
# 构建应用镜像
echo "Building application image based on custom ASP.NET 9.0 base image..."
docker build -f Dockerfile.app -t your-app:latest ./
echo "Application image built successfully!"
第四步:使用 docker-compose 编排
- 创建
docker-compose.yaml:
version: '3.8'
services:
aspnet-base:
build:
context: .
dockerfile: Dockerfile.base
image: your-registry/aspnet:9.0-debian13.2
your-application:
build:
context: .
dockerfile: Dockerfile.app
image: your-app:latest
ports:
- "8080:80"
depends_on:
- aspnet-base
构建和使用指南
1. 构建基础镜像
# 构建 ASP.NET 9.0 基础镜像
docker build -f Dockerfile.base -t your-registry/aspnet:9.0-debian13.2 .
2. 验证基础镜像
# 检查镜像是否创建成功
docker images | grep aspnet
# 测试基础镜像
docker run --rm your-registry/aspnet:9.0-debian13.2 --info
3. 构建应用镜像
# 发布应用
dotnet publish -c Release -o ./publish
# 构建应用镜像
docker build -f Dockerfile.app -t your-app:latest ./
4. 运行应用
# 运行应用容器
docker run -d -p 8080:80 --name my-app your-app:latest
优势说明
- 标准化基础环境: 所有应用共享同一个基础镜像,确保环境一致性
- 安全更新: 只需更新基础镜像,所有应用都能受益
- 体积优化: 基础镜像只需构建一次,多个应用复用
- 可控性强: 完全控制基础环境的构建过程和包含组件
- 符合企业要求: 基于指定的
Debian 13.2版本,满足合规要求
这种方式特别适用于企业环境中需要统一基础镜像、严格控制依赖版本的场景。

2202

被折叠的 条评论
为什么被折叠?



