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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 在Mac上开发一个.NET应用,并且把它用Docker跑起来,然后部署到阿里云容器服务上。

微软的.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


Hello World!

运行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之旅吧。

相关文章
|
11天前
招募!阿里云x魔搭社区发起Create@AI创客松邀你探索下一代多维智能体应用
招募!阿里云x魔搭社区发起Create@AI创客松邀你探索下一代多维智能体应用
261 0
|
3天前
|
开发框架 前端开发 JavaScript
采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示
技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架:MVC、SQLSugar等 数 据 库:SQLserver 2012
|
7天前
|
云安全 数据采集 安全
阿里云安全产品,Web应用防火墙与云防火墙产品各自作用简介
阿里云提供两种关键安全产品:Web应用防火墙和云防火墙。Web应用防火墙专注网站安全,防护Web攻击、CC攻击和Bot防御,具备流量管理、大数据防御能力和简易部署。云防火墙是SaaS化的网络边界防护,管理南北向和东西向流量,提供访问控制、入侵防御和流量可视化。两者结合可实现全面的网络和应用安全。
阿里云安全产品,Web应用防火墙与云防火墙产品各自作用简介
|
17天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
14 0
|
17天前
|
Linux Docker 容器
Linux彻底卸载Docker包括运行拉取的镜像
Linux彻底卸载Docker包括运行拉取的镜像
21 1
|
25天前
|
Java 关系型数据库 数据库
Seata常见问题之docker运行报错如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
97 0
|
25天前
|
Nacos 数据库 Docker
nacos常见问题之docker部署的seata,成功注册到nacos运行报错如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
36 2
|
1月前
|
弹性计算 人工智能 物联网
挖掘阿里云ECS的潜力:创意应用和未来可能性
在云厂商中,我觉得开发者更信赖阿里云的云产品,而且随着阿里云最近宣布云产品降价的消息,会有更多的开发者和企业选择阿里云的云产品。这里拿阿里云的云服务器来做说明,阿里云的云服务器ECS为用户提供了强大的计算资源和灵活的扩展性,使其成为搭建各种有趣和创意应用的理想平台。除了已知的小游戏、小程序和个人网盘等应用案例之外,本文还会进一步探讨ECS在特定场景下的实践经验,并挖掘其在其他领域的潜力,为大家带来更多创意和启发。
556 3
挖掘阿里云ECS的潜力:创意应用和未来可能性
|
1月前
|
JavaScript Shell Docker
|
24天前
|
Ubuntu JavaScript 关系型数据库
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
在阿里云Ubuntu 20.04服务器上部署Ghost博客的步骤包括创建新用户、安装Nginx、MySQL和Node.js 18.x。首先,通过`adduser`命令创建非root用户,然后安装Nginx和MySQL。接着,设置Node.js环境,下载Nodesource GPG密钥并安装Node.js 18.x。之后,使用`npm`安装Ghost-CLI,创建Ghost安装目录并进行安装。配置过程中需提供博客URL、数据库连接信息等。最后,测试访问前台首页和后台管理页面。确保DNS设置正确,并根据提示完成Ghost博客的配置。
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客