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

1 准备工作

假设有两台服务器,这里我使用的是阿里云ECS:

Node1:Windows Server 2019,Docker Client

Node2:CentOS 7.5,Harbor

其中,Node1作为客户端,主要用来推送镜像到harbor镜像仓库 和 从harbor拉取镜像运行容器实例。Node2作为服务端,主要用来运行harbor镜像仓库对企业内部提供容器镜像服务。

2 搭建Harbor镜像仓库

Why Harbor?

因为Harbor是目前最流行的企业级私有容器镜像仓库之一,而且它同时支持Linux Container 和 Windows Container 的镜像,使得它比较符合我的需求。

快速搭建过程

我们在Node2(CentOS)上来快速地基于Harbor搭建一个私有镜像仓库。

step1.安装docker compose

# curl -L https://github.com/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
# docker-compose -version

step2.下载并解压harbor离线安装包

# wget https://github.com/vmware/harbor/releases/download/v1.10.1/harbor-offline-installer-v1.10.1.tgz
# tar xvf harbor-offline-installer-v1.10.1.tgz

step3.修改harbor.yml配置,主要修改hostname 和 admin初始密码,注释掉https的配置(生产环境建议开启https,这里只做快速演示)。

hostname: 47.108.111.236
# http related config
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 80
# https related config
# https:
# https port for harbor, default is 443
# port: 443
# The path of cert and key files for nginx
# certificate: /your/certificate/path
# private_key: /your/private/key/path
# Uncomment external_url if you want to enable external proxy
# And when it enabled the hostname will no longer used
# external_url: https://reg.mydomain.com:8433
# The initial password of Harbor admin
# It only works in first time to install harbor
# Remember Change the admin password from UI after launching Harbor.
harbor_admin_password: EDC@123456

step4.安装harbor

# ./install.sh

安装完成后,确认没有问题,通过浏览器访问查看harbor管理界面。

使用账号 admin 和你配置的初始密码 即可进入管理面板,这里我们来创建一个项目,这里我们暂且命名为dotnet:

后面的示例,我们就在客户端推送镜像到这个dotnet项目中。

3 推送镜像到镜像仓库

在Node1,首先,配置一下hosts映射,这里配置了一个Node2的内网地址:

172.10.10.100 reg.edisonzhou.cn

然后,修改一下docker的配置文件,将 reg.edisonzhou.cn 作为可以使用http访问的仓库:

配置文件:C:\ProgramData\docker\config\daemon.json

{
"insecure-registries" : [ "reg.edisonzhou.cn" ]
}

然后,就是熟悉的push镜像过程了,还是原来的味道:

> docker login reg.edisonzhou.cn
> docker tag reg.edisonzhou.cn/samples:aspnetmvcapp reg.edisonzhou.cn/dotnet/samples:framework-4.8-aspnetmvcapp
> docker push reg.edisonzhou.cn/dotnet/samples:framework-4.8-aspnetmvcapp The push refers to repository [reg.edisonzhou.cn/dotnet/samples]
11d8e5abf6ac: Pushed
265452af5f33: Pushed
f9fe54bc871d: Pushed
ddaa4e132ef2: Pushed
0fd048ba07e9: Pushed
df61cb75b354: Pushed
825bd5d0379d: Pushed
0037a968c4d7: Pushed
6420f996a252: Skipped foreign layer
a7ba3db29ebb: Skipped foreign layer
4.8: digest: sha256:7da03aef9a9acb66678d5c14dda85c741268557bdcd55484e6351e373445157f size: 2779

最开始我以为.net 4.x的镜像动不动就7~8个G,即使是内网推送也可能很慢,但是没想到的是在阿里云ECS的内网推送,如此大的镜像也能很快的完成。

此外,建议先将.net 4.x sdk的基础镜像先推送到harbor,后续推送应用程序的镜像会共享基础镜像层的文件,因此速度也会加快很多。

当然,第一次push的过程还是需要耐心等待一下,速度取决于你的服务器的配置和网络环境(如是否内网、带宽等因素)如果出现以下错误:

received unexpected HTTP status: 500 Internal Server Error

你可以对harbor镜像仓库所在的linux服务器关闭SELinux:

setenforce 0

push完成之后再看看harbor中的仓库项目列表:

*.后面我又陆续push了sdk 和 runtime的镜像。

4 拉取镜像并运行

有了私有镜像仓库,又push了镜像,我们来模拟一下在Node1(Windows Server 2019)中拉取私有仓库中的镜像来运行一下:

>docker run --name aspnet_mvc_sample --rm -it -d -p 8000:80 --cpus 1 -m 1024m reg.edisonzhou.cn/dotnet/samples:framework-4.8-aspnetmvcapp

成功运行后,通过浏览器访问验证一下:

可以看到,成功运行,完美!

对于如此巨大的容器镜像,我跑了两到三个相同的asp.net mvc sample容器实例,验证发现磁盘空间会每个实例多占用0.2G左右,内存会每个多占用200M左右。当然,这也是因为这个asp.net mvc sample实在太简单,没有任何依赖交互,但是它也侧面反映,看似庞大的asp.net容器镜像,实则不会随着容器实例的增多而重复占用空间,而是共享Windows内核。

5 总结

本文介绍了如何快速搭建一个harbor私有镜像仓库,并通过在Windows Server客户端推送ASP.NET应用程序的镜像到harbor,最后在Windows Server客户端拉取harbor的镜像并成功运行。

作者:周旭龙

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

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

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

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

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

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

    上一篇我们试着将.NET 4.x的镜像推送到harbor私有镜像仓库,本篇我们来使用一下阿里云的镜像仓库服务并了解一下携程的实践. 1 关于阿里云镜像仓库 阿里云容器镜像服务(简称 ACR)是面向容器 ...

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

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

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

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

  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. 干货:ANR日志分析全面解析

    一.概述 解决ANR一直是Android 开发者需要掌握的重要技巧,一般从三个方面着手. 开发阶段:通过工具检查各个方法的耗时,卡顿情况,发现一处修改一处. 线上阶段:这个阶段主要依靠监控工具发现AN ...

  2. TVM适配NN编译Compiler缺陷

    TVM适配NN编译Compiler缺陷 内容纲要 前言 TVM针对VTA的编译流程 自定义VTA架构:TVM的缺陷与性能瓶颈 TVM缺陷与瓶颈 缺陷一:SRAM配置灵活性差 缺陷二:计算阵列配置僵硬 ...

  3. 20 岁发表 SCI 的学霸,梦想用算法改变世界

    2021 年 2 月,"新内容 新交互" 全球视频云创新挑战赛启幕.本次大赛由英特尔联合阿里云主办,与优酷战略技术合作,天池平台和阿里云视频云团队共同承办.大赛自开赛以来,吸引了全 ...

  4. 保姆级尚硅谷SpringCloud学习笔记(更新中)

    目录 前言 正文内容 001_课程说明 002_零基础微服务架构理论入门 微服务优缺点[^1] SpringCloud与微服务的关系 SpringCloud技术栈 003_第二季Boot和Cloud版 ...

  5. 『言善信』Fiddler工具 — 13、Fiddler断点功能的使用详解

    目录 1.Fiddler断点的应用 2.断点的分类 3.设置全局断点 (1)设置before Requests全局断点: (2)设置After Responses全局断点: 4.设置局部断点 (1)设 ...

  6. PHPList 安装

    邮件发送开源软件 PHPList 安装介绍 1:安装基本信息 官网地址 地址:https://www.phplist.com/ 其他:https://www.d-ip.jp/phplist/ 官网手册 ...

  7. NX二次开发-从一个坐标系到另一个坐标系的转换

    函数:UF_MTX4_csys_to_csys().UF_MTX4_vec3_multiply() 函数说明:从一个坐标系统到另一个坐标系统的转换.如下图红色坐标系下有个红色的点,将红色的点转到绿色的 ...

  8. 「模拟8.19 A嚎叫..(set) B主仆..(DFS) C征程..(DP+堆优化)」

    为啥这一套题目背景感到很熟悉. T1  嚎叫响彻在贪婪的厂房 考试一个小时没调出来,自闭了.......... 正解很好想,最后实在打不出来了只好暴力骗分了... 联想到以前做的题:序列(涉及质因数分 ...

  9. WEB安全漏洞扫描与处理(下)——安全报告分析和漏洞处理

    1 AppScan生成的安全报告分析 利用AppScan生成安全报告,可以提前对要生成的安全报告的内容进行选择,如下图,最全的安全报告内容,包括摘要,安全性问题,咨询和修订建议,应用程序数据等. 生成 ...

  10. 玩转STM32MP157- 使用fbtft驱动 lcd st7735r

    什么是fbtft fbtft 在 github 中的介绍是" Linux Framebuffer drivers for small TFT LCD display modules,翻译过来 ...