上一篇我们试着将.NET 4.x的镜像推送到harbor私有镜像仓库,本篇我们来使用一下阿里云的镜像仓库服务并了解一下携程的实践。

1 关于阿里云镜像仓库

阿里云容器镜像服务(简称 ACR)是面向容器镜像、Helm Chart 等符合 OCI 标准的云原生制品安全托管及高效分发平台。ACR 支持全球同步加速、大规模/大镜像分发加速、多代码源构建加速等全链路提效,与容器服务 ACK 无缝集成,帮助企业降低交付复杂度,打造云原生应用一站式解决方案。

阿里云容器镜像服务有两种类型:

(1)容器镜像服务ACR个人版

容器镜像服务ACR个人版面向个人开发者,提供基础的容器镜像服务,包括应用镜像托管能力、镜像安全扫描功能、稳定的国内外镜像构建服务以及便捷的镜像授权功能,方便用户进行镜像全生命周期管理。

(2)容器镜像服务ACR企业版

容器镜像服务ACR企业版面向企业客户,是企业级云原生应用制品管理平台,提供容器镜像、Helm Chart,符合OCI规范制品的生命周期管理;支持大规模、多地域、多场景下应用制品的高效分发;与容器服务ACK无缝集成,帮助企业降低交付复杂度。

其中,个人版是免费使用的,但命名空间有限额3个,不过对于我们学习调研完全够用了。因此,本篇主要使用个人版实例来进行实验。

个人版具体的功能如下:

  • 多架构镜像托管支持

    支持Linux、Windows、ARM等多架构容器镜像

  • 灵活的地域选择

    • 您可以根据自己的业务需求,选择不同的地域创建和删除镜像仓库。

    • 每个镜像仓库都提供了公网、内网、VPC网络下对应的网络地址。

  • 镜像安全扫描

    • 支持便捷的镜像安全扫描功能,展示详细的镜像层信息。

    • 提供镜像漏洞报告,展示漏洞编号、漏洞等级、修复版本等多维度漏洞信息。

可以看到,阿里云容器镜像仓库也同时支持Linux 和 Windows多平台的容器镜像,完美符合我们的需求。

2 配置阿里云镜像仓库

创建命名空间

我们可以先创建几个命名空间,用于区分不同环境的镜像。

创建镜像仓库

我们在指定命名空间下创建几个镜像仓库,后面我们在 Windows Server 端推送镜像到这几个镜像仓库中。

后面的示例,我们就在客户端推送镜像到 dotnet-sdk、dotnet-runtime 以及 dotnet-samples 三个项目中。

3 推送镜像到阿里云镜像仓库

公网环境下

(1)登录阿里云docker registry:

$ docker login --username=**********@***.com registry.cn-chengdu.aliyuncs.com

这里 registry.cn-chengdu.aliyuncs.com 就是阿里云容器镜像服务的公网地址。
(2)将.NET镜像推送到阿里云docker registry:

$ docker tag reg.edisonzhou.cn/dotnet/sdk:framework-4.8 registry.cn-chengdu.aliyuncs.com/edisonzhou-dev/dotnet-sdk:framework-4.8
$ docker push registry.cn-chengdu.aliyuncs.com/edisonzhou-dev/dotnet-sdk:framework-4.8

容器镜像的推送速度取决于网络环境(如带宽)

推送后镜像仓库效果:

(3)在Windows Server从阿里云docker registry拉取镜像:

$ docker pull registry.cn-chengdu.aliyuncs.com/edisonzhou-dev/dotnet-sdk:framework-4.8

内网环境下

如果使用阿里云ECS,可以直接选择阿里云镜像仓库的内网地址,可以大幅度提高传输效率并减少公网流量开销。如果你的阿里云ECS是VPC专有网络,你可以参考下面的shell:

$ docker login --username=********@***.com registry-vpc.cn-chengdu.aliyuncs.com
$ docker push registry-vpc.cn-chengdu.aliyuncs.com/edisonzhou-dev/dotnet-sdk:framework-4.8

如果ECS是经典网络,你可以参考下面的shell:

$ docker login --username=********@***.com registry-internal.cn-chengdu.aliyuncs.com
$ docker push registry-vpc.cn-chengdu.aliyuncs.com/edisonzhou-dev/dotnet-sdk:framework-4.8

推送成功后,测试验证一下:

$ docker run --name aspnet_mvc_sample_1 --rm -it -d -p 8000:80 --cpus 1 -m 1024m registry-vpc.cn-chengdu.aliyuncs.com/edisonzhou-dev/dotnet-samples:framework-4.8-aspnetmvcapp

访问URL效果:

4 探究镜像层信息

在第一次推送dotnet-sdk:framework-4.8镜像时,由于镜像仓库没有基础镜像层,因此推送速度比较慢,因为要全新存储不能共享。

而在推送完dotnet-sdk:framework-4.8镜像后,如下图所示的基础镜像层已经可以直接挂载复用了,因此推送速度大幅加快。

可以看到,无论是dotnet-sdk, dotnet-runtime(即微软官方的aspnet镜像)还是 dotnet-samples 镜像,它们都会直接挂载 Windows Server Core base ltsc2019、.NET Framework 等基础镜像层 而不是 每次都重新从docker client推送到仓库来存储。我们也可以发现,Windows Server Core base ltsc2019、.NET Framework 等基础镜像层是文件大小最大的几个基础层,因此后续推送的速度会很快。

5 携程的Windows Container实践

携程是.NET应用大户,并早在多年前就开始了Java转型,在转型过程中是需要长时间的多语言技术栈应用系统并行共存的,而如果能统一运行环境和打包部署机制,对于像携程一样的转型期间的公司来说,是有必要的。因此,携程选择了Windows Container的实践,对传统.NET Framework应用进行了容器化的迁移。

扩展阅读:《.NET大户的选择:Windows Container在携程的应用

我司是一家建筑行业的产业互联网平台企业,主营的各业务线系统发布于2016年,也是.NET Framework应用大户,目前也在进行Java转型,有.NET 4.x、.NET 5 和 Java 三种技术(请原谅我将.NET 4.x 和 .NET 5划归为两种技术)的开发团队和应用系统运行,也正在经历和携程当年一样的路程。

如何让传统.NET应用享受容器化带来的红利,能够和Java与.NET Core/.NET 5统一运行环境实现Build Once, Run Anywhere的终极目标,是我们在思考的问题。Windows Container是一个解决方案,通过Windows Server 2019的容器化属性,可以实现不同技术栈应用的统一编排和部署,不需要为Java/.NET 5弄一套持续集成流程,而为.NET 4.x单独弄一套持续集成流程。

在容器编排领域,Kubernetes 已经成为事实上的标准容器编排器,Kubernetes 1.14 发行版本中包含了将 Windows 容器调度到 Kubernetes 集群中 Windows 节点上的生产级支持,从而使得巨大 的 Windows 应用生态圈能够充分利用 Kubernetes 的能力。对于同时投入基于 Windows 应用和 Linux 应用的组织而言,不必寻找不同的编排系统 来管理其工作负载,其跨部署的运维效率得以大幅提升,而不必关心所用操作系统。

扩展阅读:《Kubernetes对Windows Container的支持

此外,阿里云ACK服务也提供了对Windows Container的支持,即我们可以将Windows Server节点作为Node角色加入K8s集群,由ACK的Master节点进行统一编排。对于没有基础运维团队的企业来说,更推荐这种方式:

阿里云ACK(容器服务K8s版): https://www.aliyun.com/product/kubernetes

6 总结

本文介绍了如何快速配置一个阿里云容器镜像仓库,并将.NET 4.x应用程序镜像推送到阿里云容器镜像仓库中,最后探究了一下.NET容器镜像的层信息。

对于传统.NET 4.x应用的容器化迁移,我们也还在探索,相信探索和实践的深入,我会分享更多相关的内容。

作者:周旭龙

出处:https://edisonchou.cnblogs.com

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

传统.NET 4.x应用容器化体验(4)的更多相关文章

  1. 传统.NET 4.x应用容器化体验(1)

    我们都知道.NET Core应用可以跑在Docker上,那.NET Framework 4.x应用呢?借助阿里云ECS主机(Windows Server 2019 with Container版本), ...

  2. 传统.NET 4.x应用容器化体验(5)

    前面几篇都是基于阿里云ECS直接玩的,有童鞋问直接用Windows Server 2019可以玩不,本篇就为你介绍一下如何给Windows Server 2019配置Docker环境. 1 准备工作 ...

  3. 传统.NET 4.x应用容器化体验(2)

    上一篇我们基于Windwos Server 2019 with Container初步跑了一个ASP.NET WebForm应用程序.本篇我们来自己编译部署一个ASP.NET MVC应用程序到Wind ...

  4. 传统.NET 4.x应用容器化体验(3)

    上一篇我们自己通过编写Dockerfile来编译部署一个ASP.NET MVC应用程序到Windows Container,这一篇我们来试着将.NET 4.x的镜像推送到harbor私有镜像仓库. 1 ...

  5. 容器化ICT融合初体验

    [编者的话]本次将分享的容器化ICT融合平台是一种面向未来ICT系统的新型云计算PaaS平台,它基于容器这一轻量级的虚拟化技术以及自动化的"微服务"管理架构,能够有效支撑应用快速上 ...

  6. Rio手把手教学:如何打造容器化应用程序的一站式部署体验

    11月19日,业界应用最为广泛的Kubernetes管理平台创建者Rancher Labs(以下简称Rancher)宣布Rio发布了beta版本,这是基于Kubernetes的应用程序部署引擎.它于今 ...

  7. Docker最全教程——MongoDB容器化(十二)

    MongoDB容器化 MongoDB是一个免费的.开源的.跨平台分布式面向文档存储的数据库,由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和 ...

  8. 开箱即用,Knative 给您极致的容器 Serverless 体验

    作者 | 冬岛  阿里巴巴技术专家 导读:托管 Knative 开箱即用,您不需要为这些常驻实例付出任何成本.结合 SLB 云产品提供 Gateway 的能力以及基于突发性能型实例的保留规格功能,极大 ...

  9. 4 个场景揭秘,如何低成本让容器化应用 Serverless 化?

    作者 | changshuai FaaS 的门槛 Serverless 形态的云服务帮助开发者承担了大量复杂的扩缩容.运维.容量规划.云产品打通集成等责任,使得开发者可以专注业务逻辑.提高交付速度 ( ...

随机推荐

  1. 将视频插入视频:CVPR2019论文解析

    将视频插入视频:CVPR2019论文解析 Inserting Videos into Videos 论文链接: http://openaccess.thecvf.com/content_CVPR_20 ...

  2. 一枚通过参数污染绕过百度RASP的XSS

    日常工作过程中,偶然发现一个网站登录页面,在页面返回包中存在一个隐藏参数"mess",且该页面部署了百度RASP进行防护,本文介绍如何发现隐藏参数以及如何通过参数污染方式造成XSS ...

  3. 九、配置Tomcat集群

    配置Tomcat集群所需服务器三台:192.168.1.5(调度服务器).192.168.1.10(WEB1),192.168.1.20(WEB2) 1.调度服务器设置 [root@proxy ~]# ...

  4. iSCSI网络磁盘

    一.fdisk 划分 分区 [root@server0 ~]# lsblk [root@server0 ~]# fdisk /dev/vdb 三个主分区 , 分别2个G大小 两个逻辑分区 , 分别1个 ...

  5. 【NX二次开发】不健全的双击按钮。

    为什么说不健全,是因为 双击按钮时会先运行单击事件,这个后面再解决.但是模仿某公司的图层操作工具是没有问题了,因为这个工具运行双击事件时本来就需要运行单击事件,不仔细看容易被唬住. 图层操作工具(双击 ...

  6. Eclipse安装Pydev插件时所遇到的问题

    安装pydev插件折腾了半天,因为总是安装不成功,不成功的表现就是:windows-preferences设置里没有pydev 由于第一次安装这个插件所以不了解安装pydev插件的版本是有要求的,根据 ...

  7. SpringBoot 自动配置原理,翻源码看一下

    ​ 初始化一个Springboot项目,在主启动类会有这么一个注解:@SpringBootApplication,自动装配的秘密全在主启动类这个注解里面了 点进去一层会发现有三个子注解组成,分别是 @ ...

  8. 生成树协议(STP)

    一.交换网络环路的产生 1.广播风暴的形成 2.多帧复制 3.MAC地址表紊乱 二.STP简介 STP-Spanning Tree Protocol(生成树协议) 逻辑上断开环路,防止广播风暴的产生 ...

  9. 从菜鸟到大神:Java高并发核心编程(连载视频)

    任何事情是有套路的,学习是如此, Java的学习,更是如此. 本文,为大家揭示 Java学习的套路 背景 Java高并发.分布式的中间件非常多,网上也有很多组件的源码视频.原理视频,汗牛塞屋了. 作为 ...

  10. 你应该这样去开发接口:Java多线程并行计算

    所谓的高并发除了在架构上的高屋建瓴,还得需要开发人员在具体业务开发中注重自己的每一行代码.每一个细节,面子有的同时,更重要的还是要有里子. 面对性能,我们一定要有自己的工匠精神,不可以对任何一行代码妥 ...