C# .NET 5.0 部署到Docker
VS中存在Docker部署工具
1.创建项目时,勾选Docker支持,如果没有选择,创建项目后也可支持,如下所示
2.选择项目==》右键添加==》Docker支持
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <Project Sdk= "Microsoft.NET.Sdk.Web" > <PropertyGroup> <TargetFramework>net5.0</TargetFramework> <UserSecretsId>eb830265-ac01-4476-86d5-58fcac7d3973</UserSecretsId> <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS> <DockerfileContext>.</DockerfileContext> </PropertyGroup> <ItemGroup> <PackageReference Include= "Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version= "1.11.1" /> <PackageReference Include= "Swashbuckle.AspNetCore" Version= "5.6.3" /> </ItemGroup> <ItemGroup> <ProjectReference Include= "..\Models\Models.csproj" /> </ItemGroup> </Project> |
注: <DockerDefaultTargetOS>Linux/Windows</DockerDefaultTargetOS>
当添加或启用 Docker 支持时,Visual Studio 会向项目添加以下各项:
- Dockerfile** 文件
- .dockerignore 文件
- 对 Microsoft.VisualStudio.Azure.Containers.Tools.Targets 的 NuGet 包引用
同时,launchSettings.json 文件新增Docker,可在Docker中调试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | { "iisSettings" : { "windowsAuthentication" : false , "anonymousAuthentication" : true , "iisExpress" : { "applicationUrl" : "http://localhost:48098" , "sslPort" : 44372 } }, "$schema" : "http://json.schemastore.org/launchsettings.json" , "profiles" : { "IIS Express" : { "commandName" : "IISExpress" , "launchBrowser" : true , "launchUrl" : "swagger" , "environmentVariables" : { "ASPNETCORE_ENVIRONMENT" : "Development" } }, "Asp.Netcore.Demos" : { "commandName" : "Project" , "launchBrowser" : true , "launchUrl" : "swagger" , "environmentVariables" : { "ASPNETCORE_ENVIRONMENT" : "Development" }, "dotnetRunMessages" : "true" , "applicationUrl" : "https://localhost:5001;http://localhost:5000" }, "Docker" : { "commandName" : "Docker" , "launchBrowser" : true , "launchUrl" : "{Scheme}://{ServiceHost}:{ServicePort}/swagger" , "publishAllPorts" : true , "useSSL" : true } } } |
Dockerfile文件解释:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. #Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed. #For more information, please see https://aka.ms/containercompat #--------------------多阶段构建 4个阶段,提升效率----------------------------- #基础阶段 FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443 #构建阶段,包含所有构建工具 FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build WORKDIR /src COPY [ "Asp.Netcore.Demos.csproj" , "." ] COPY [ "../Models/Models.csproj" , "../Models/" ] RUN dotnet restore "./Asp.Netcore.Demos.csproj" COPY . . WORKDIR "/src/." RUN dotnet build "Asp.Netcore.Demos.csproj" -c Release -o /app/build #发布阶段 FROM build AS publish RUN dotnet publish "Asp.Netcore.Demos.csproj" -c Release -o /app/publish #最终阶段 FROM base AS final WORKDIR /app COPY -- from =publish /app/publish . ENTRYPOINT [ "dotnet" , "Asp.Netcore.Demos.dll" ] |
有了Dockerfile就可以创建镜像:
注:需要下载并安装 Docker Desktop应用,略
安装过程遇到问题:
发生原因(参考:https://blog.csdn.net/u013374164/article/details/115841910):
如果下载的是官网中最新的版本的docker的话,会出现该问题,原因是最新版本docker需要安装在window10系统环境下。
如果是win7安装的话,可使用:http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/ 进行安装,亲测有效
解决步骤:
第一步:下载 DockerToolbox-18.03.0-ce.exe、VirtualBox-6.1.30-148432-Win.exe
第二步:安装DockerToolbox-18.03.0-ce.exe
第三步:C:\Users\当前用户\AppData\Roaming\Kitematic\Local Storage 删除文件夹内容
第四步:安装路径下运行:D:\Program Files\Docker Toolbox\kitematic Kitematic.exe
第五步:卸载 安装路径下:D:\Program Files\Docker Toolbox\installers\virtualbox virtualbox.msi
第六步:安装VirtualBox-6.1.30-148432-Win.exe
第七步:启动Docker Quickstart Terminal,如下所示,表示成功
注:
其中VirtualBox提供了linux虚拟机的运行环境;
Docker Quickstart Terminal用于快速介入linux虚拟机,提供命令行交互;
Kitematic是docker GUI很少用到;
选择Dockerfile文件==》右键==》生成Docker映像,如下所示:
1.查看docker images 镜像
cmd==》docker images
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本