ASP.NET Core 的 Docker 映像创建

yangliuhbhd 2019-12-28

本教程演示如何在 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 安装包。查看电脑是否已开启虚拟化,可在任务管理器中查看,选择【性能】选项卡,在右下角【虚拟化】中查看。具体如下图。

ASP.NET Core 的 Docker 映像创建

 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)复制并粘贴到浏览器地址栏以测试应用。

手动生成和部署

 参考官方文档吧:https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/docker/building-net-docker-images?view=aspnetcore-3.1#download-the-sample-app

这里记录一下我遇到的问题:

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 。

ASP.NET Core 的 Docker 映像创建

 其他运行时镜像可以在以下网址的链接中打开:https://github.com/dotnet/dotnet-docker 链接,在ReadME.md文件中查看。这是微软官方提供的sdk和runtime镜像包。

Featured Repos

这里aspnet core 3.0 应用 发布到docker 基本完成。 

本文参考微软官方文档:

1.ASP.NET Core 入门  

2.Docker:ASP.NET Core 的 Docker 映像

3.下载 ASP.NET SDK和 ASP.NET CORE Runtime

4.示例 asp.net core 代码

ASP.NET Core 的 Docker 映像

相关推荐