部署场景是这样的,我们基于 ASP.NET Core 2.0 Preview 1 开发了一个用于管理缓存的 Web API ,想通过阿里云容器服务基于 Docker 部署为内网服务。

在这篇博文中分享一下经过实践验证的操作步骤:

一、创建与配置集群

1)首先创建一个 Swarm Mode 的集群(注意创建时不要选择“自动创建负载均衡”,因为我们部署的是内网服务,自动创建的是公网负载均衡,需要手动创建内网负载均衡并绑定到集群):

2)集群创建成功后,会在集群列表中显示下面的信息:

3)接着创建一个内网负载均衡,并将它绑定到刚刚创建的集群。

绑定方法:在集群列表中对应的集群右侧点击“管理”->“负载均衡”,在“负载均衡”中点击“绑定SLB”进行绑定。

4)绑定好之后,为了可以通过自己的域名访问运行在 Docker 容器中的站点,需要进行“域名设置”:

(注:这里只需设置一级域名,设置之后一定要重新部署acsrouting系统应用,详见用nginx镜像创建容器,体验基于域名的路由机制)

二、创建自己的镜像仓库

1)进入“Docker镜像仓库”管理控制台,创建镜像仓库配置,这里配置为让阿里云容器服务自动从 GitLab 签出 cache-service 项目的代码并基于其中的 Dockerfile 构建镜像。

2)点击镜像仓库的“管理”,进入“构建”,点击“立即构建”,我们这里手动触发镜像的构建。

3)cache-service 项目使用的 Dockerfile 如下,使用的是微软官方提供的专门用于构建 asp.net core 2.0 项目的 Docker 镜像。

FROM microsoft/aspnetcore-build:2.0
WORKDIR /app
COPY src .
RUN dotnet restore CnblogsCache.sln && cd Cnblogs.Cache.WebApi && dotnet publish -c Release -o ./publish

(注:我们在构建与运行 cache-service 项目时分别用的是不同的微软官方 Docker 镜像 aspnetcore-build:2.0 与 aspnetcore:2.0 )

4)镜像仓库创建好之后,在容器服务控制台的“镜像与方案”->“镜像”->“用户镜像”中会看到。

三、创建编排

进入“镜像与方案”->“编排模板”,点击“创建”进入创建编辑页面,编写如下的编排:

version: '3'
services:
cache-service:
image: microsoft/aspnetcore:2.0
depends_on:
- dotnet-publish
volumes:
- share:/app
command: bash -c "cd /app && dotnet Cnblogs.Cache.WebApi.dll"
labels:
aliyun.routing.port_80: cache
dotnet-publish:
image: cnblogs/cache-service:latest
volumes:
- share:/app
command: bash -c "rm -rf /app/* && cd /src/Cnblogs.Cache.WebApi/publish && cp -r * /app && dotnet Cnblogs.Cache.WebApi.dll"
volumes:
share:

注:运行 web api 站点时,我们用的微软官方 Docker 镜像是 microsoft/aspnetcore:2.0 ,而 build 时用的是 microsoft/aspnetcore-build:2.0 ,这是两个分别针对运行时与构建时进行优化过的镜像。

编写编排中遇到的问题详见:

四、创建应用

1)以前一步中创建的“编排”创建应用

2)等一段时间,如果没有遇到问题,应用就会部署成功

3)检查所绑定的负载均衡的运行状态是否是“运行中”

有时在部署或重新部署应用的过程中,负载均衡会处于“已停止”的状态,如果出现这个问题,重新绑定一下负载均衡即可。

五、访问通过阿里云容器服务成功部署在 Docker 容器中的 Web API 站点

1)在一台用于测试的阿里云服务器的 hosts 文件中添加 cache.cnblogs.com 的内网解析,解析到集群所绑定的负载均衡的内网 IP。

2)用 curl 命令测试一下访问 cache service web api:

$ curl -X 'DELETE' --head -s http://cache.cnblogs.com/cache/test

测试结果:

大功告成!使用阿里云容器服务进行生产环境的自动化部署即将梦想成真!

品尝阿里云容器服务:初步尝试ASP.NET Core Web API站点的Docker自动化部署的更多相关文章

  1. 品尝阿里云容器服务:用nginx镜像创建容器,体验基于域名的路由机制

    在前一篇博文中我们了解了阿里云容器服务的路由机制: 请求 -> 负载均衡80端口 -> 容器主机9080端口 -> acsrouting路由容器80端口 --基于域名--> W ...

  2. 品尝阿里云容器服务:5个2核4G节点使用情况记载

    使用5台2核4G非IO优化的ECS作为节点创建集群,节点操作系统是Ubuntu 16.04.2 LTS.创建后3个为mananger节点,2个为worker节点,每个节点默认会运行7个容器,其中3个s ...

  3. 基于阿里云容器服务用docker容器运行ASP.NET 5示例程序

    小试阿里云容器服务 之后,接下来有一个挡不住的小试冲动--用docker容器运行程序.首先想到的程序是 ASP.NET 5示例程序,于是参考msdn博客中的这篇博文 Running ASP.NET 5 ...

  4. 阿里云容器服务与ASP.NET Core部署:用 docker secrets 保存 appsettings.Production.json

    这是我们使用阿里云容器服务基于 docker 容器部署 asp.net core 应用遇到的另一个问题 —— 如果将包含敏感信息的应用配置文件 appsettings.Production.json ...

  5. Knative 应用在阿里云容器服务上的最佳实践

    作者|元毅 阿里云智能事业群高级开发工程师 相信通过前面几个章节的内容,大家对 Knative 有了初步的体感,那么在云原生时代如何在云上玩转 Knative?本篇内容就给你带来了 Knative 应 ...

  6. 阿里云容器服务--配置自定义路由服务应对DDOS攻击

    阿里云容器服务--配置自定义路由服务应对DDOS攻击 摘要: 容器服务中,除了slb之外,自定义路由服务(基于HAProxy)也可以作为DDOS攻击的一道防线,本文阐述了几种方法来应对普通规模的DDO ...

  7. 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1

    摘要: 全球开源区块链领域影响最为广泛的Hyperledger Fabric日前宣布了1.1版本的正式发布,带来了一系列丰富的新功能以及在安全性.性能与扩展性等方面的显著提升.阿里云容器服务区块链解决 ...

  8. 在阿里云容器服务上开发基于Docker的Spring Cloud微服务应用

    本文为阿里云容器服务Spring Cloud应用开发系列文章的第一篇. 一.在阿里云容器服务上开发Spring Cloud微服务应用(本文) 二.部署Spring Cloud应用示例 三.服务发现 四 ...

  9. 阿里云容器服务中国最佳,进入 Forrester 报告强劲表现者象限

    近日,全球知名市场调研机构 Forrester 发布首个企业级公共云容器平台报告. 报告显示:阿里云容器服务创造了中国企业最好成绩,与谷歌云位于同一水平线,进入强劲表现者象限. 究其原因,分析师认为: ...

随机推荐

  1. Emacs 设置C++代码风格

    ;; C++代码风格设置 (defconst cobbcpp '("linux" ; this is inheritance from the linux style (c-bas ...

  2. html元素不可见的三种方式

    html中使元素不可见有三种方法: 使用hidden属性 使用style中的display=none 使用style中的visibility=false 显然,使元素不可见有两类方式: 元素彻底不可见 ...

  3. iOS 测试版系统安装说明(粗略翻译)

    我们常常看到在https://developer.apple.com/download/这里会有beta版本的ios系统 或者开发软件 关于beta版本的应用,其实有很大用处,好多人会在正式版没有发布 ...

  4. apache的性能调配 MaxClients 与MaxRequestsPerChild

    因近期服务不稳定,现象和这个比较类似http://hi.baidu.com/xinfeng999/blog/item/1aea470e214ab1cd7acbe1ed.html根据现象来对APACHE ...

  5. Oracle voting文件的管理

    在12c中,不再支持使用dd命令进行voting disk文件的备份和恢复 投票文件的管理需要OCR文件正常工作.在删除.添加.替换或者还原voting文件之前,使用ocrcheck检查ocr文件的状 ...

  6. javascript中的this在不同场景下的区别

    javascript在初版的设计上存在失误,导致了这门语言在使用时,经验型写法并不能得到像其它几个流行语言一样预期.其中的this的使用就是一个典型. this在javascript中是由解释器注入的 ...

  7. request.GetResponse()超时的解决办法

    var request = (HttpWebRequest)WebRequest.Create(url); request.Timeout = Timeout.Infinite; request.Ke ...

  8. Selenium:注解@FindBy、@FindBys、@FindAll的用法

    方式有3种:@FindBy.@FindBys.@FindAll.下文对3中类型的区别和使用场景进行介绍 1)@FindBy @FindBy(id= "A") private Web ...

  9. Atitit 提升效率 界面gui方面的前后端分离与cbb体系建设 规范与推荐标准

    Atitit 提升效率 界面gui方面的前后端分离与cbb体系建设 规范与推荐标准 1. 界面gui方面的前后端分离重大意义1 2. 业务逻辑也适当的迁移js化1 3. 常用分离方法2 3.1. 页面 ...

  10. Vue中使用ECharts画散点图加均值线与阴影区域

    [本文出自天外归云的博客园] 需求 1. Vue中使用ECharts画散点图 2. 在图中加入加均值线 3. 在图中标注出阴影区域 实现 实现这个需求,要明确两点: 1. 知道如何在vue中使用ech ...