使用Azure Functions自动同步国内外docker 镜像

时间: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)-&gt;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 Functions自动同步国内外docker 镜像

上一篇:腾讯云镜像类型简介
下一篇:什么是 Azure 应用程序网关?


版权声明:以上主题为“使用Azure Functions自动同步国内外docker 镜像"的内容可能是本站网友自行发布,或者来至于网络。如有侵权欢迎联系我们客服QQ处理,谢谢。
相关内容
推荐内容
扫码咨询
    使用Azure Functions自动同步国内外docker 镜像
    打开微信扫码或长按识别二维码

小提示:您应该对本页介绍的“使用Azure Functions自动同步国内外docker 镜像”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通使用Azure Functions自动同步国内外docker 镜像的相关事宜。

关键词:使用Azure,Functions自动同步

关于 | 业务 | 案例 | 免责 | 隐私
客服邮箱:sales@1330.com.cn
电话:400-021-1330 | 客服QQ:865612759
沪ICP备12034177号 | 沪公网安备31010702002418号