时间:2021-07-15 | 标签: | 作者:Q8 | 来源:云科技网络
小提示:您能找到这篇{使用Azure Functions自动同步国内外docker 镜像}绝对不是偶然,我们能帮您找到潜在客户,解决您的困扰。如果您对本页介绍的使用Azure Functions自动同步国内外docker 镜像内容感兴趣,有相关需求意向欢迎拨打我们的服务热线,或留言咨询,我们将第一时间联系您! |
< ">对于一家业务遍布全球的企业来说,往往会遇到数据同步的困境,明明是一份代码,国内更新之后,还要同步一份到国外,反之亦然。尤其在当前微服务技术发展下,应用程序代码的迭代速度越来越快,如何能保持一份代码,减少人为同步的干扰,并且确保同步机制的高可用性、易维护性?本篇我们将为大家介绍,使用Azure Container registries的Web Hook功能,通过调用Azure Functions服务,将国内外container image自动同步,方便出海或入华的客户快速部署和更新container image。 < ">准备工作 < ">我们先了解下本次涉及的Azure服务: < ">Azure Functions:Azure Functions是Azure平台的serverless函数计算服务,您只用将代码上传到Azure Functions就可以运行,而无需创建和维护服务器。Azure Functions是为事件触发所设计,可以响应数据变动触发、计划事件触发或HTTP请求触发等。支持丰富的编程语言如C#,Java,JavaScript,Python,PowerShell等。Azure Functions的运行时也已在GitHub上开源。 < ">Azure Container Registry:Azure Container Registry(ACR)是一个基于开源Docker Registry 2.0所构建的一个托管的私有registry服务,ACR不仅仅能够存储您的docker image,还能build image。这意味着您只用将Docker file传给ACR,通过简单的API操作,就能够在Azure上直接Build镜像(Windows docker image和Linux docker image均支持) < ">操作步骤 < ">创建Function App < ">1.在Global Azure Portal界面,搜索Function App,然后点击”Add”按钮,添加一个Function。语言选择”Python”,版本为3.8,在下一步Hosting界面,Plan选择为”Consumption(Serverless)”,之后完成创建。 < ">2.在创建的Function App的Setting设置项中,点击Identity,然后将System assigned的Status设置为On,点击保存,之后在role assignments中,添加AcrPush,AcrPull,AcrDelete,AcrImageSinger,AcrQuarantineWriter,AcrQuarantineReader权限。这一步的目的是:让Function App有权限访问Azure Container Registries,这样从国内ACR里读取镜像之后,有权限写入到Global ACR中。 < ">在VS Code中配置Azure Functions < ">1.在自己电脑上安装VS Code,在Extensions中搜索”Azure Functions”,然后安装Azure Functions插件。同时需要在自己电脑上安装Python3.8和Nodejs的环境。安装完成之后,在VS Code中,点击Azure的图标,Sign in to Azure,之后会自动打开浏览器,在浏览器登录页面,输入Azure的用户名和密码完成登录。登录完成,在VS Code左侧将会看到Azure订阅名,以及在第一步创建的Function < ">2.参考下图创建Azure Functions本地package.创建本地package的目的是:我们可以在本地进行代码的编辑,以及调试,等调试通过之后,可以push到Azure Functionss进行使用。在创建的时候,选择“HTTP trigger”,trigger名字可以根据自己的需要写,比如”acr_web_trigger”,Authorization Level选择”Admin”。创建完成之后,我们会看到VS Code自动打开__init__.py文件,在该文件中,提供了一些示例代码. < ">3.使用下面的代码替换自动生成的代码。 < ">注:标红的代码需要修改成您自己的值, < ">SUBSCRIPTION_ID为Global Azure的订阅ID < ">TARGET_RESOURCE_GROUP为Global Azure的资源组 < ">TARGET_IMG_REPO为Global Azure的ACR名字 < ">passwd为国内Azure ACR的密码(在ACR中,点击Access Keys,启用Admin user,能看到两个password,使用任意一个即可) < ">import logging,json < ">import azure.functions as func < ">from msrestazure.azure_active_directory import MSIAuthentication < ">credentials=MSIAuthentication() < ">SUBSCRIPTION_ID='5fb605ab-c16c-4184-8a02-fee38cc11b8c' < ">import azure.mgmt.containerregistry as acr < ">acrclient=acr.ContainerRegistryManagementClient(credentials=credentials,subscription_id=SUBSCRIPTION_ID) < ">def main(req:func.HttpRequest)->func.HttpResponse: < ">logging.info('Python HTTP trigger function processed a request.') < ">acr_event=json.loads(req.get_body()) < ">SRC_REGISTRY_NAME=acr_event['request']['host'].split('.')[0] < ">SOURCE_IMG=acr_event["target"]['repository']+':'+acr_event["target"]['tag'] < ">SRC_REGISTRY_URI=acr_event['request']['host'] < ">TARGET_IMG_TAG=[SOURCE_IMG] < ">TARGET_RESOURCE_GROUP='xiangliu_csa' < ">TAEGET_IMG_REPO='xiangliurep网络营销服务团队o2' < ">src_image_url=acr_event[湖南网络整合营销9;request']['host']+'/'+acr_event["target"]['repository']+':'+acr_event["target"]['tag'] < ">passwd=‘xxxxxxxxx‘ < ">imp_src_cred=acrclient.models().ImportSourceCredentials(password=passwd,username=SRC_REGISTRY_NAME) < ">import_img_src=acrclient.models().ImportSource(source_image=SOURCE_IMG,registry_uri=SRC_REGISTRY_URI,credentials=imp_src_cred) < ">img_mode=acrclient.models().ImportMode.force < ">import_img_para=acrclient.models().ImportImageParameters(source=import_img_src,target_tags=TARGET_IMG_TAG,mode=img_mode) < ">imp_img=acrclient.registries.import_image(resource_group_name=TARGET_RESOURCE_GROUP,registry_name=TAEGET_IMG_REPO,parameters=import_img_para) < ">return func.HttpResponse(src_image_url+"copied successfully") < ">4.找到代南京营销推广码中requirements.txt文件,在文件中添加下面的几个依赖程序包 < ">azure-functions < ">azure-mgmt-containerregistry==2.8.0 < ">msrestazure < ">5.完成上述操作之后,点击”Deploy to Function App”按钮,然后选择先前创建的Function名字”acrcopydemo”进行部署。如果安装了Azure Functionss Core Tools,您也可以通过下面的命令发布Azure Functionss代码:func Azure Functionsapp publish acrcopydemo < ">发布完成之后,在Azure Functions中可以看到之前传过来的代码 < ">在国内Azure Container registries添加Webhooks < ">1.先在Global Azure的Function App处,找到先前创建的acrcopydemo,然后在Functions处,点击”Get Function Url”,选择”masterKey(host key)”将其复制 < ">2.回到国内Azure,在国内Azure的Azure Container registries处,找到要同步的registries,然后点击Webhooks—Add,添加一个Webhook。在Webhook中,Service URI为3.1复制的地址,Actions中勾选所有,点击创建 < ">3.使用docker客户端登陆国内ACR,上传一个docker image,然后观察Webhooks的执行结果,如果执行成功,将返回http 200的status code。同时切换到Global Azure的ACR界面,我们将看到docker image已经成功同步过来。 < ">总结 < ">本文提供了利用Azure Functions来实现国内外容器镜像的同步的思路与步骤,除了本文所提及的这个应用场景之外,稍加改动,也很容易就能实现将GitHub Repo或其他托管的docker image repo和ACR的同步。有关Azure Functions的介绍,您也可以点击文末阅读原文,了解更多详情。 |
上一篇:腾讯云镜像类型简介
下一篇:什么是 Azure 应用程序网关?
基于对传统行业渠道的理解,对互联网行业的渠道我们可以下这样一个定义:一切...
小米应用商店的后台操作和苹果是比较相似的,因为都能填写100字符关键词,允许...
小米的规则目前是在变更中的,但是根据经验小米的搜索排名评分的高低是个很重...
为了恰饭,有时候是要接入一些广告的,所以FB也专门有一个广告的SDK,这就是A...
在 2018 年于旧金山举行的游戏开发者大会上,Amazon Web Services (AWS) 曾宣布,目前世...
关于Facebook Audience Network如何收款的问题,其实官方已经给了详细的步骤。本文主要...
本文介绍了Audience Network对广告载体的质量检查,以及它重点广告形式需要注意的问...
随着iOS开发,作为开发者或公司需要针对iOS App开发涉及的方方面面作出对应的信息...
Facebook和谷歌对出海企业广告渠道都很熟悉,但事实上,在国外还有一些渠道也很...
卖家从做号的第1分钟开始,就一定要想好变现路径是什么?一定要以变现为目的去...
小提示:您应该对本页介绍的“使用Azure Functions自动同步国内外docker 镜像”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通使用Azure Functions自动同步国内外docker 镜像的相关事宜。
关键词:使用Azure,Functions自动同步