如何将通用DLL打包到Azure Container Registry并供多个应用引用
使用Azure Container Registry(ACR)完全可以实现你需要的通用DLL跨应用共享需求,核心实现逻辑是将通用DLL打包为公共基础镜像存储在ACR中,所有上层业务应用镜像直接基于该公共镜像构建,即可复用所有内置依赖,无需每个应用单独维护公共DLL文件。
准备通用DLL镜像构建文件
创建独立的工作目录,将所有需要共享的.dll文件放入目录中,根据你的应用 runtime 类型编写Dockerfile:
*.NET Core/.NET 5+ 场景示例:# 选择和业务应用匹配的官方运行时基础镜像,可根据需要替换为对应版本 FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base # 创建通用DLL存放目录 WORKDIR /app/sharedlibs # 拷贝本地所有通用DLL到镜像内 COPY ./*.dll . # 配置.NET运行时DLL搜索路径,确保应用可以正常加载共享库 ENV DOTNET_ADDITIONAL_DEPS=/app/sharedlibs ENV DOTNET_PROBING_PATH=/app/sharedlibs*.NET Framework 场景示例:
# 选择和业务应用匹配的.NET Framework官方镜像 FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2019 # 拷贝通用DLL到IIS站点的bin目录 COPY ./*.dll C:/inetpub/wwwroot/bin/登录Azure Container Registry
先在Azure Portal完成ACR实例创建,本地安装好Azure CLI和Docker环境后,执行以下命令完成ACR登录:az acr login --name <替换为你的ACR实例名称>构建并推送公共DLL基础镜像到ACR
在DLL工作目录下执行构建命令:docker build -t <你的ACR名称>.azurecr.io/shared-dlls-base:v1 .
构建完成后推送到ACR存储:docker push <你的ACR名称>.azurecr.io/shared-dlls-base:v1业务应用镜像复用公共基础镜像
所有需要使用这些通用DLL的业务应用,编写Dockerfile时直接引用ACR中的公共基础镜像即可,无需再单独拷贝公共DLL,示例:# 直接引用ACR中内置了通用DLL的公共基础镜像 FROM <你的ACR名称>.azurecr.io/shared-dlls-base:v1 WORKDIR /app # 仅拷贝业务应用自身的构建产出即可 COPY ./bin/Release/net6.0/publish . ENTRYPOINT ["dotnet", "你的应用入口文件.dll"]配置Azure服务ACR拉取权限
部署到ACI或App Service时,需要给对应服务配置ACR镜像拉取权限:- App Service:在部署中心的容器设置页,选择你的ACR作为镜像源,平台会自动配置拉取权限
- ACI:部署时选择ACR作为镜像源,关联ACR管理员账号或配置服务主体完成授权即可
注意:公共基础镜像的底层运行时版本需要和上层业务应用的构建版本完全一致,避免出现DLL兼容问题

内容的提问来源于stack exchange,提问作者Dileepa Rajapaksa

