zl程序教程

您现在的位置是:首页 >  后端

当前栏目

在阿里云上运行ASP.NET Docker应用

NetDockerASP应用阿里 运行 云上
2023-09-14 09:04:38 时间

微软的.NET开源后可以运行在Mac和Linux平台,也支持运行在Docker容器里。我们今天要尝试的是在Mac上开发一个.NET应用,并且把它用Docker跑起来,然后部署到阿里云容器服务上。

本文的后续文章介绍了如何访问SQLServer数据库,点击[在Docker中运行SQLServer ASP.NET应用]。(https://yq.aliyun.com/articles/60857)

在Mac上安装.NET Core

按照微软的官方文档,我们可以非常容易地在Mac上安装.NET Core。

安装openssl

在Mac上安装.NET Core需要先安装openssl。

brew update

brew install openssl

brew link --force openssl
安装 .NET Core SDK

下载.NET Core SDK官方安装包,按照提示安装即可。

可选: 安装 Visual Studio Code

这步不是必须的,你可以用自己喜欢的编辑器写.NET代码。和Visual Studio不同,Visual Studio Code是一个跨平台的代码编辑器,还有调试能力,如果你想尝试一下新的体验,可以下载Visual Studio Code。解开压缩包后把应用拷贝到系统Application目录下。

编译,运行,并构建Docker镜像 本地运行Hello World

使用dotnet命令行可以创建.NET HelloWorld程序。dotnet restore是将所有依赖信息恢复出来。

$ dotnet new

$ dotnet restore

运行新生成的程序

$ dotnet run

Project dotnet-hello (.NETCoreApp,Version=v1.0) will be compiled because expected outputs are missing

Compiling dotnet-hello for .NETCoreApp,Version=v1.0

Compilation succeeded.

 0 Warning(s)

 0 Error(s)

Time elapsed 00:00:01.2329439


运行ASP.NET应用

为了部署到云上,我们需要一个Web应用。按照ASP.NET官方入门文档的步骤可以创建一个Web应用。

不愿意自己敲字的同学可以从这里复制代码:
https://code.aliyun.com/libin.libin/dotnet-helloworld

$dotnet restore

$dotnet run

Project dotnet-helloworld (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.

Hosting environment: Production

Content root path: /Users/****/netcoreapp1.0

Now listening on: http://*:5000

Application started. Press Ctrl+C to shut down.

启动浏览器访问http://localhost:5000可以看到输出了:

localhost

构建Docker镜像

首先看看例子目录下都有哪些文件:

$ tree

├── Dockerfile

├── Program.cs

├── README.md

├── Startup.cs

├── build.sh

├── docker-compose.yml

├── project.json

└── project.lock.json

0 directories, 8 files

Dockerfile用来生成Docker镜像,内容如下:

FROM microsoft/dotnet:latest

COPY bin/Debug/netcoreapp1.0/publish/ /root/

EXPOSE 5000/tcp

ENTRYPOINT dotnet /root/helloworld.dll

基础镜像为微软的官方镜像,另外bin/Debug/netcoreapp1.0/publish/由dotnet publish命令生成。要生成Docker镜像需要执行如下命令:

dotnet publish

docker build -t dotnet-helloworld .

上传到阿里云容器Hub,记得先在其中的 name 替换成自己的名字。

docker tag dotnet-helloworld registry.aliyuncs.com/ name /dotnet-helloworld

docker push registry.aliyuncs.com/ name /dotnet-helloworld
本地Docker运行Web应用

本地运行Docker应用的命令如下:

$ docker run -it -p 5000:5000 dotnet-helloworld

Hosting environment: Production

Content root path: /root

Now listening on: http://*:5000

Application started. Press Ctrl+C to shut down.

如果你按照官方文档,会发现应用仅侦听localhost,造成浏览器访问不了。可以在代码中指定应用侦听所有地址。

public static void Main(string[] args)

 var host = new WebHostBuilder()

 .UseKestrel()

 //侦听所有地址

 .UseUrls("http://*:5000")

 .UseStartup Startup ()

 .Build();

 host.Run();

}
将应用部署到阿里云容器服务

还记得例子目录下有个docker-compose.yml文件吗?

dotnet-helloworld:

 image: registry.aliyuncs.com/ name /dotnet-helloworld:latest

 labels:

 aliyun.scale: 1

 aliyun.routing.port_5000: http://helloworld

 restart: always

把上面内容中 name 替换为自己的名字,在集群里创建应用时,选择使用编排模版创建:

create_app1

在模版编辑器中粘贴docker-compose.yml文件内容,然后点击创建并部署:

create_app2

应用创建成功后进入服务页面,发现服务的访问端点已经自动生成了:

accesspoint

点击访问端点,启动浏览器可以看到ASP.NET的输出了:

access_screenshot

微软的开源和对非Windows的支持力度越来越大,在Docker上运行.NET应用使得原来的Windows开发者也可以享受容器技术带来的诸多好处。访问阿里云容器服务 开始你的Docker之旅吧。


更安全更稳定,阿里云斩获多项云系统稳定安全运行优秀案例 近日,阿里云凭借在稳定性领域的全栈投入,获评中国信通院混沌工程实验室 2022 年度杰出贡献企业,并斩获“云系统稳定安全运行优秀案例”活动中多领域优秀案例。阿里云持续推动企业 IT 系统建设,保障千行百业安全稳定的实现数字化转型与创新。
阿里云白嫖学生服务器30元2核2G运行内存14天 服务器使用尽量选你所在地区或者附近这样延迟就低很多,推荐使用ubuntu22.06或者最新系统,如果是开发游戏就得选高配置独立服务器了,最好延迟低,网速越高越好,还要处理器是目前最好的服务器处理器,ddr5运行内存,固态5.0硬盘,Ubuntu系统得注意有没有开防火墙,大多数打不开就是你防火墙没有开。
阿里云PAI DLC实例运行LeNet Sample PAI-DLC(Deep Learning Containers)是基于阿里巴巴容器服务ACK(Alibaba Cloud Container Service for Kubernetes)的深度学习训练平台,为您提供灵活、稳定、易用和极致性能的深度学习训练环境。本文主要演示如何在PAI DLC上面运行LeNet Sample。
阿里云DSW实例运行LeNet Sample LeNet,它是最早发布的卷积神经网络之一,因其在计算机视觉任务中的高效性能而受到广泛关注。 这个模型是由AT&T贝尔实验室的研究员Yann LeCun在1989年提出的(并以其命名),目的是识别图像中的手写数字。本文主要演示在阿里云PAI DSW实例中使用GPU资源运行LetNet网络。
libinjingshan 李斌,目前负责阿里云容器服务解决方案的研发工作。加入阿里之前,李斌曾在IBM工作,专注于企业软件开发,DevOps,微服务和Docker实践。