前言
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker不同于虚拟机通过软件模拟机器的硬件来虚拟出一台计算机,docker是直接调用系统资源来使用,因此docker无论是在运行性能上还是在工作效率上,相对虚拟机有更大的优势。
背景
目前华讯云网系统应用采用docker容器部署,但是在产品之外,例如很多客户的个性化定制需求以及运维操作依旧采用直接安装部署应用的方式,这就导致很多定制功能的可维护性相对较低,同时正式的生产环境往往不能连接外网,因此应用开始部署时各种环境依赖会造成工作效率的大大降低。
应用依赖关系:
应用依赖环境搭建:
除此之外,频繁的安装和切换环境依赖还会造成依赖环境混乱,给应用带来一定的风险隐患。
如果能够将定制化应用和运维应用像云网产品应用一样,彼此之间相互隔离,便可以很好的解决如上问题,同时也可以提高网管运维的效率。
实现过程
实现过程有多种方案,以下只展示其中一种。我们通过制作“nginx代理转发udp请求”镜像为例(由于nginx默认不支持udp协议的负载均衡,我们需要手动为nginx添加对应插件并编译应用)。
1) 从基础镜像中创建对应应用容器。
我们以centos7作为基础镜像,创建对应容器
2) 为容器安装对应的依赖环境
3) 将安装部署文件拷贝至容器内部并编译安装
开始编译安装:
安装完成:
4)制作启动脚本
5) 导出并制作镜像
编辑Dockerfile1文件
编译生成新镜像
6) 编辑docker-compose.yml脚本
7) 启动镜像应用到容器
8) 浏览器访问nginx页面
至此,应用安装部署完成
9) 最后,导出镜像并上传至生产环境即可
docker save eccom/josen/nginx/udp_load_balancer:v1-dc | gzip > nginx.load_balancer.tgz
总结
如上所示,通过docker容器将各个应用(脚本)相互隔绝,使应用之间不会相互影响从而提高所有应用的稳定性,尤其在某些需要涉及公共依赖环境的情况下(例如gcc,python环境等),该方式可以很好的保护其他应用不受影响。