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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 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之旅吧。

相关文章
|
1月前
|
Linux Docker 容器
Docker学习重点(2)~docker安装、配置阿里云镜像加速
Docker学习重点(2)~docker安装、配置阿里云镜像加速
113 0
|
5月前
|
Docker 容器
windows10 docker配置阿里云镜像服务加速
首先需要进入阿里云,搜容器镜像服务即可找到如下页面,前题先注册登录。
170 0
|
5月前
|
应用服务中间件 Linux Docker
Docker安装Tomcat 外网访问Tomact 阿里云镜像仓库
Docker安装Tomcat 外网访问Tomact 阿里云镜像仓库
174 0
|
5月前
|
安全 数据安全/隐私保护 Docker
docker<应用分享> 发布镜像到阿里云、从阿里云拉取镜像
之前博文讲过了如何把docker的镜像上传到dockerhub,以及从dockerhub下载镜像操作
|
6月前
|
Docker 容器
使用阿里云 docker 镜像加速
1.创建docker daemon.json 2.添加docker镜像加速地址 3.重启守护进程
594 1
|
7月前
|
Java Docker 容器
发布Docker镜像到阿里云
发布Docker镜像到阿里云
639 0
|
10月前
|
Linux Docker 容器
为Docker配置阿里云镜像加速器
为Docker配置阿里云镜像加速器
4968 0
为Docker配置阿里云镜像加速器
|
10月前
Docker---配置阿里云镜像加速
Docker---配置阿里云镜像加速
Docker---配置阿里云镜像加速
|
10月前
|
Linux Docker 容器
|
11月前
|
数据可视化 jenkins 应用服务中间件
在阿里云Centos7.6上利用docker搭建Jenkins来自动化部署Django项目
一般情况下,将一个项目部署到生产环境的流程如下: 需求分析—原型设计—开发代码—内网部署-提交测试—确认上线—备份数据—外网更新-最终测试,如果发现外网部署的代码有异常,需要及时回滚。 整个过程相当复杂而漫长,其中还需要输入不少的命令,比如上传代码,git的拉取或者合并分支等等。
在阿里云Centos7.6上利用docker搭建Jenkins来自动化部署Django项目
相关产品
容器镜像服务
容器服务Kubernetes版
推荐文章
更多