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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 在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之旅吧。

相关文章
|
9天前
|
Docker Windows 容器
7-12|在window上 运行docker-compose文件
7-12|在window上 运行docker-compose文件
|
2月前
|
存储 Docker 容器
阿里云私有docker仓库构建海外镜像
【8月更文挑战第25天】
143 3
|
2月前
|
关系型数据库 MySQL 应用服务中间件
配置docker阿里云镜像地址
配置docker阿里云镜像地址
|
2月前
|
存储 运维 数据安全/隐私保护
如何高效利用阿里云Docker镜像仓库管理您的容器镜像
如何高效利用阿里云Docker镜像仓库管理您的容器镜像
|
2月前
|
前端开发 jenkins 持续交付
jenkins学习笔记之二十:docker in docker运行pipeline
jenkins学习笔记之二十:docker in docker运行pipeline
|
2月前
|
Kubernetes Linux 开发者
【实战秘籍】从零开始:用.NET与Docker打造现代化容器化应用之旅
【8月更文挑战第28天】本文详细介绍如何使用 .NET 框架构建并部署 Docker 容器化应用程序,涵盖环境搭建、项目创建、Dockerfile 编写等关键步骤。首先安装必要软件,如 Visual Studio 2022 及 Docker Desktop。接着创建 .NET Core 控制台应用,并在项目根目录编写 Dockerfile 文件。使用 .NET 运行时基础镜像,复制二进制文件,指定入口点。运行命令构建镜像并测试容器。为实现通信,映射端口。最后,标签化镜像并推送到 Docker Hub,为生产环境部署做好准备。掌握这些步骤,即可轻松应对从小型项目到大规模应用的各种需求。
66 0
|
2月前
|
开发框架 .NET 开发工具
【Azure 应用服务】App Service 的.NET Version选择为.NET6,是否可以同时支持运行ASP.NET V4.8的应用呢?
【Azure 应用服务】App Service 的.NET Version选择为.NET6,是否可以同时支持运行ASP.NET V4.8的应用呢?
|
2月前
|
开发框架 监控 .NET
【Azure 应用程序见解】在Docker中运行的ASP.NET Core应用如何开启Application Insights的Profiler Trace呢?
【Azure 应用程序见解】在Docker中运行的ASP.NET Core应用如何开启Application Insights的Profiler Trace呢?
|
2月前
|
开发框架 .NET Linux
【Azure Developer】已发布好的.NET Core项目文件如何打包为Docker镜像文件
【Azure Developer】已发布好的.NET Core项目文件如何打包为Docker镜像文件
下一篇
无影云桌面