如何使用ASP.NET技术构建一个容器并发布成ModelArts在线服务

举报
yangzilong 发表于 2022/03/12 17:21:28 2022/03/12
【摘要】 介绍操作流程:使用Visual Studio把一个ASP.NET代码容器化,并发布成ModelArts在线服务。

目标

将ASP.NET Core Web API应用程序进行容器化并部署在华为的ModelArts平台

准备工作

• 安装 .NET Core SDK 2.0
• 安装一个喜欢的代码编辑器,例如 Visual Studio(Code)。
• 安装 Docker CE for Windows


Visual Studio Docker 工具集

为应用程序添加 Docker 支持

要使 ASP.NET 与 Docker 集成,该项目必须是 .NET Core 项目,Linux 和 Windows 两种类别的容器都支持。ASP.NET Core 项目的 Container 类型必须与本机 Docker 引擎运行的 Container 类型相同。可通过在任务栏图标上右键单击 Docker 图标 -> Switch to Windows containers 或 Switch to Linux containers 功能来进行切换。

创建新的应用程序

对于新创建的 ASP.NET Core 项目,勾选 Enable Docker Support,并选择一个 Docker Container 类型。

为现有项目添加 Docker 支持

Visual Studio 仅支持为 .NET Core 项目添加 Docker 支持,有两种方式,首先打开一个项目
选择 Project 菜单 -> Docker Support
右键单击项目 -> 添加 -> Docker Support

Visual Studio Docker 概览

当对一个项目添加 Docker 支持后,VisualStudio 将项解决方案目录添加一个 docker-compose.dcproj 项目,其中包含:
.dockerignore: 生成 build 时需要忽略的文件和目录匹配字段
docker-compose.yml: Docker Compose 的定义文件,定义了一系列 Image 的集合用于 docker-compose build 和 docker-compose run。
docker-compose.override.yml: 一个可选文件,也会被 Docker Compose 读取,包含需要对服务进行重写的配置信息。Visual Studio 执行docker-compose -f "docker-compose.yml" -f "docker-compose.override.yml" 来合并这些文件
同时,ASP.NET Core 项目文件夹下自动生成了一个名为 Dockerfile 的文件(注意这里是自动生成的),该文件起始包含 4 个单独的生成环节,其根据 Docker multi-stage build 定义,内容如下:
 
此处需要按照华为给定的示例文档将监听ip设置为 "0.0.0.0", 对外监听的端口设置为 8080,故需要对dockerfile文档进行修改:

调试

在 Debug 模式下按下 F5,同时查看 Visual Studio 的输出窗口,其步骤如下:
microsoft/aspnetcore: 获取 aspnet core runtime Image。
microsoft/aspnetcore-build: 获取编译/发布 Image。
ASPNETCORE_ENVIRONMENT: Container 内环境变量设置为 Development。
Container 暴露 8080 端口了并映射到了主机的动态端口,该动态端口由 Docker 主机决定,可通过 docker ps 来查询。
应用程序被复制到了 Container 中
默认浏览器被打开,并通过动态端口将调试器附加到了 Container 中。
完成后执行docker images可以看到生成好的Image。
执行docker ps可以看到正在运行的 container。

编辑并继续

与传统 .NET 程序的调试一样,针对静态文件和 Razor 视图的更改都将实时更新,而无需重新编译,但针对源代码的修改,则需要重新编译并重启 Kestrel 服务器,这都在 Container 中完成。

发布 Docker Image

一旦开发和调试完成,需要首先将配置切换至 Release,然后生成应用程序,Docker 工具集会生成一个新的打上 latest 标签的 Image,最后可将该 Image 上传至私有仓库或 Docker Hub。

在本地验证

从dockerhub上拉取并验证镜像

这里在windows下是使用postman进行的测试(测试过程略),测试接口功能正常之后,按照说明文档将镜像上传部署即可。

部署成功后在页面点击预测对接口进行测试:

在“预测”界面能正常调用,说明服务部署成功。

至此,模型容器化改造及部署工作结束,用户可以用API开心的调用我们的模型了。

参考教程

  1. 使用自定义镜像创建AI应用: https://support.huaweicloud.com/bestpractice-modelarts/modelarts_10_0072.html
  2. NET Core 应用程序添加 Docker 支持:https://blog.frosthe.net/aspnetcore-host-in-docker-containers/
  3. ASP.NET应用程序容器化:https://sunnycoding.cn/2018/10/07/dockerize-aspnetcore-cicd-with-azure-devops-and-kubernetes-part1/

为防止参考链接失效,打印版放在了附件栏。

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。