ASP.NET Core 的 Docker 映像创建
本教程演示如何在 Docker 容器中运行 ASP.NET Core 应用
具体步骤参考文末官方文档:ASP.NET Core 的 Docker 映像,本文只记录我发布过程中遇到的一些问题。
系统要求
1.操作系统:我的是Windows10(家庭版),这里需要升级到windows10专业版,或者企业版。具体怎么升级你们懂的(万能淘宝买吧)。升级后重启电脑。
2.下载安装 Docker For Desktop,下载地址:https://www.runoob.com/docker/windows-docker-install.html。
主要是开启电脑的Hyper-V功能。然后点击安装docker for desktop 安装包。查看电脑是否已开启虚拟化,可在任务管理器中查看,选择【性能】选项卡,在右下角【虚拟化】中查看。具体如下图。
3. 运行系统安装开发必要软件和aspnet core sdk 、aspnet runtime 运行时捆绑包。
下载安装网址 :Build apps - SDK 和 Run apps - Runtime
参考文档:ASP.NET Core 入门 https://docs.microsoft.com/zh-cn/aspnet/core/getting-started/?view=aspnetcore-3.1&tabs=windows
下载示例应用
下载地址: https://github.com/dotnet/dotnet-docker 。可以用git下,也可以直接下载个压缩包。
本地运行应用
导航到下载文档中以下文件夹目录: dotnet-docker/samples/aspnetapp/aspnetapp 。
运行以下命令以本地生成并运行应用(在命令行cmd中运行,或者Windows Powershell命令行运行以下命令):
dotnet run
在浏览器中转到
http://localhost:5000
以测试应用。在命令提示符处按 Ctrl+C 以停止应用。
在 Linux 容器中运行
在 Docker 客户端中,切换到 Linux 容器。
导航到 dotnet-docker/samples/aspnetapp 下的 Dockerfile 文件夹。
运行以下命令以在 Docker 中生成并运行示例:
docker build -t aspnetapp . docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
build
命令参数:- 将映像命名为 aspnetapp。
- 在当前文件夹(末尾的句点)中查找 Dockerfile。
运行命令参数:
- 分配伪 TTY,即使未附加也使其保持打开状态。 (与
--interactive --tty
的效果相同。) - 容器在退出时自动删除。
- 将本地计算机上的端口 5000 映射到容器中的端口 80。
- 将容器命名为 aspnetcore_sample。
- 指定 aspnetapp 映像。
在浏览器中转到
http://localhost:5000
以测试应用。
在 Windows 容器中运行
- 在 Docker 客户端中,切换到 Windows 容器。
导航到 dotnet-docker/samples/aspnetapp
下的 docker 文件文件夹。
运行以下命令以在 Docker 中生成并运行示例:
docker build -t aspnetapp . docker run -it --rm --name aspnetcore_sample aspnetapp
对于 Windows 容器,你需要容器的 IP 地址(浏览到
http://localhost:5000
不起作用):打开另一个命令提示符。
运行
docker ps
以查看正在运行的容器。 验证其中是否包含“aspnetcore_sample”容器。运行
docker exec aspnetcore_sample ipconfig
以显示容器的 IP 地址。 该命令的输出如以下示例所示:Ethernet adapter Ethernet:Connection-specific DNS Suffix . : contoso.com Link-local IPv6 Address . . . . . : fe80::1967:6598:124:cfa3%4 IPv4 Address. . . . . . . . . . . : 172.29.245.43 Subnet Mask . . . . . . . . . . . : 255.255.240.0 Default Gateway . . . . . . . . . : 172.29.240.1
将容器 IPv4 地址(例如,172.29.245.43)复制并粘贴到浏览器地址栏以测试应用。
手动生成和部署
这里记录一下我遇到的问题:
Unable to load the service index for source https://api.nuget.org/v3/index.json
具体原因是:docker builder和 run aspnet core 项目时应该使用不同的sdk包。 而我 build 和 runtime 都使用了相同的 mcr.microsoft.com/dotnet/core/sdk:3.0 。
其他运行时镜像可以在以下网址的链接中打开:https://github.com/dotnet/dotnet-docker 链接,在ReadME.md文件中查看。这是微软官方提供的sdk和runtime镜像包。
Featured Repos
- dotnet/core/sdk: .NET Core SDK
- dotnet/core/aspnet: ASP.NET Core Runtime
- dotnet/core/runtime: .NET Core Runtime
- dotnet/core/runtime-deps: .NET Core Runtime Dependencies
- dotnet/core/samples: .NET Core Samples
这里aspnet core 3.0 应用 发布到docker 基本完成。
本文参考微软官方文档:
2.Docker:ASP.NET Core 的 Docker 映像
3.下载 ASP.NET SDK和 ASP.NET CORE Runtime