凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 8173
  • 博文数量: 6
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 60
  • 用 户 组: 普通用户
  • 注册时间: 2021-07-15 10:45
文章分类

(6)

  • (6)
文章存档

(6)

我的朋友
最近访客
相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: linux

2021-09-16 17:27:50

阿里云opsx镜像站

借助阿里云ecs实现传统.net应用容器化-凯发app官方网站

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

node1:windows server 2019 with container,docker client

node2:centos 7.5,harbor

其中,node1作为客户端,主要用来推送镜像到harbor镜像仓库 和 从harbor拉取镜像运行容器实例。node2作为服务端,主要用来运行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项目中。

在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的镜像。

有了私有镜像仓库,又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内核。

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

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

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

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

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

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

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

个人版具体的功能如下:

  • 多架构镜像托管支持

    支持linux、windows、arm等多架构容器镜像

  • 灵活的地域选择
  • 您可以根据自己的业务需求,选择不同的地域创建和删除镜像仓库。
  • 每个镜像仓库都提供了公网、内网、vpc网络下对应的网络地址。* 镜像安全扫描

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

创建命名空间

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

创建镜像仓库

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

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

公网环境下

(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效果:

本文介绍了如何快速搭建一个harbor私有镜像仓库,并通过在windows server客户端推送asp.net应用程序的镜像到harbor 和 阿里云镜像仓库,最后在windows server客户端拉取windows container镜像并成功运行。

事实证明,对于传统.net framework 4.x应用程序,从物理机/虚拟机迁移到容器中运行是可行的,并且windows server 2019版本做了许多对容器的支持做了许多优化,大家可以尝试使用。


本文转自:https://developer.aliyun.com/article/785533?spm=a2c6h.14164896.0.0.d06b6847mf9zxk

阅读(967) | 评论(0) | 转发(0) |
0

上一篇:

下一篇:没有了

给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图