基于镜像层关联的Docker注册表缓存预取策略
2021-02-05邓玉辉
张 晨,邓玉辉,2+
1.暨南大学信息科学技术学院计算机科学系,广州 510632
2.中国科学院计算技术研究所计算机体系结构国家重点实验室,北京 100190
在过去的十年中,Xen、VMware、KVM 和Hyper-V是大多数云计算系统使用的虚拟机管理程序,为云计算在共享池中快速配置和释放计算机资源提供支撑。随着操作系统虚拟化的快速发展,其较强的兼容性和较低的资源开销吸引Google 和IBM 等企业使用容器[1]来创建隔离的虚拟环境[2]。Docke 是Linux平台上的一款轻量级容器管理引擎,不仅具有很好的性能优势和安全性,而且能帮助用户提升持续集成/持续交付(continuous integration/continuous delivery,CI/CD)的效率。例如,ING 是全球十大金融服务公司之一,通过使用Docker 部署高度自动化的CD 流水线,为基础设施资源节约了50%的开销(https://www.docker.com/blog/docker-selected-as-gartner-cool-vendorin-devops)。在业界对容器技术强烈的需求导向之下,越来越多的企业在生产环境中使用Docker 进行大规模任务部署。
在实际项目中,企业通常利用Docker 提供的注册表服务来解决容器镜像的分发和存储问题。目前,市场上有不同云服务商提供的Docker 注册表实例,如Docker Hub(https://hub.docker.com/)、Google Container Registry(https://cloud.google.com/containerregistry/)、IBM Cloud Container Registry 和Amazon Elastic Container Registry(http://aws.amazon.com/cn/ecr/)等,注册表提供一套REST(representational state transfer)接口用于Docker客户端向注册表自由发布镜像并供他人下载。图1 是IBM Cloud Registry 的部署架构,负载均衡器将用户请求分配到不同地区的注册表服务器中,注册表服务器均采用对象存储服务(例如Amazon S3),无冲突地写入共同的后端存储[3-4]。据统计,大型容器公共注册表至少存储数百TB 数据,每天增加1 500 个公共镜像存储库[5],并且私人镜像存储库也在不断更新。有工作表明,从此类规模的注册表中拉取镜像的时间占容器总启动时间的76%[6]。……