正文
第三层是应用层,这层仅包含已经打好包的各应用程序代码。
图2:Docker镜像分层约定
经验总结:如何让自己的镜像变的更小,PUSH的更快?
图3 优化前后对比
-
dockerfile构建应用镜像,在中间件层遇到一些需要安装的软件包时,尽可能的使用包管理工具(如yum)或以git clone方式下载源码包进行安装,目的是将软件包的copy和安装控制在同一层,软件部署成功后清除一些无用的rpm包或源码包,让基础镜像的尺寸更小。
-
Java应用镜像中并没有将jdk软件包打入镜像,将jdk部署在每台宿主上,在运行镜像时,通过挂载目录的方式将宿主机上的java家目录挂载至容器指定目录下。因为它会把基础镜像撑得非常大;
-
在构建应用镜像时,docker会对这两层进行缓存并直接使用,仅会重新创建代码出现变动的应用层,这样就提高了应用镜像的构建速度和构建成功后向镜像仓库推送的速度,从整体流程上提升了应用的部署效率。
容器的编排管理
编排工具的选型:
图4:编排工具选型对比
Rancher图形化管理界面,部署简单、方便, 可以与AD、LDAP、GITHUB集成,基于用户或用户组进行访问控制,快速将系统的编排工具升级至Kubernetes或者Swarm,同时有专业的技术团队进行支持,降低容器技术入门的难度。
图5: Rancher架构图
基于以上优点我们选择Rancher作为我们容器云平台的编排工具,在对应用的容器实例进行统一的编排调度时,配合Docker-Compose组件,可以在同一时间对多台宿主机执行调度操作。同时,在服务访问出现峰值和低谷时,利用特有的rancher-compose.yml文件调用“SCALE”特性,对应用集群执行动态扩容和缩容,让应用按需求处理不同的请求。https:/zhuanlan.zhihu.com/p/29093407
容器网络模型选型:
图6: 容器网络模型选型
由于后端开发基于阿里的HSF框架,生产者和消费者之间需要网络可达,对网络要求比较高,需要以真实IP地址进行注册和拉取服务。所以在选择容器网络时,我们使用了Host模式,在容器启动过程中会执行脚本检查宿主机并分配给容器一个独立的端口,来避免冲突的问题。
持续集成与持续部署