基于 debian:13.2 构建 .net9/10 基础镜像指南

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

debian-13

更多信息请查看

本篇文章介绍基于 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 ./
  • 输出信息:

docker-build

第二步:基于自定义基础镜像构建应用镜像

  • 创建 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

优势说明

  1. 标准化基础环境: 所有应用共享同一个基础镜像,确保环境一致性
  2. 安全更新: 只需更新基础镜像,所有应用都能受益
  3. 体积优化: 基础镜像只需构建一次,多个应用复用
  4. 可控性强: 完全控制基础环境的构建过程和包含组件
  5. 符合企业要求: 基于指定的 Debian 13.2 版本,满足合规要求

这种方式特别适用于企业环境中需要统一基础镜像、严格控制依赖版本的场景。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChaITSimpleLove

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值