前言

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。   

Docker不同于虚拟机通过软件模拟机器的硬件来虚拟出一台计算机,docker是直接调用系统资源来使用,因此docker无论是在运行性能上还是在工作效率上,相对虚拟机有更大的优势。

背景

目前华讯云网系统应用采用docker容器部署,但是在产品之外,例如很多客户的个性化定制需求以及运维操作依旧采用直接安装部署应用的方式,这就导致很多定制功能的可维护性相对较低,同时正式的生产环境往往不能连接外网,因此应用开始部署时各种环境依赖会造成工作效率的大大降低。

应用依赖关系:

docker开发还是运维 docker在开发和运维中的优势_linux

应用依赖环境搭建:

docker开发还是运维 docker在开发和运维中的优势_docker开发还是运维_02

除此之外,频繁的安装和切换环境依赖还会造成依赖环境混乱,给应用带来一定的风险隐患。

docker开发还是运维 docker在开发和运维中的优势_nginx_03

如果能够将定制化应用和运维应用像云网产品应用一样,彼此之间相互隔离,便可以很好的解决如上问题,同时也可以提高网管运维的效率。

docker开发还是运维 docker在开发和运维中的优势_nginx_04

实现过程

实现过程有多种方案,以下只展示其中一种。我们通过制作“nginx代理转发udp请求”镜像为例(由于nginx默认不支持udp协议的负载均衡,我们需要手动为nginx添加对应插件并编译应用)。

1) 从基础镜像中创建对应应用容器。

我们以centos7作为基础镜像,创建对应容器

docker开发还是运维 docker在开发和运维中的优势_nginx_05

2) 为容器安装对应的依赖环境

docker开发还是运维 docker在开发和运维中的优势_docker开发还是运维_06

docker开发还是运维 docker在开发和运维中的优势_linux_07

3) 将安装部署文件拷贝至容器内部并编译安装

docker开发还是运维 docker在开发和运维中的优势_docker_08

docker开发还是运维 docker在开发和运维中的优势_负载均衡_09

docker开发还是运维 docker在开发和运维中的优势_linux_10

开始编译安装:

docker开发还是运维 docker在开发和运维中的优势_docker_11

docker开发还是运维 docker在开发和运维中的优势_负载均衡_12

安装完成:

docker开发还是运维 docker在开发和运维中的优势_负载均衡_13

4)制作启动脚本

docker开发还是运维 docker在开发和运维中的优势_docker开发还是运维_14

5) 导出并制作镜像

docker开发还是运维 docker在开发和运维中的优势_负载均衡_15

编辑Dockerfile1文件

docker开发还是运维 docker在开发和运维中的优势_负载均衡_16

docker开发还是运维 docker在开发和运维中的优势_linux_17

编译生成新镜像

docker开发还是运维 docker在开发和运维中的优势_docker_18

docker开发还是运维 docker在开发和运维中的优势_linux_19

6) 编辑docker-compose.yml脚本

docker开发还是运维 docker在开发和运维中的优势_docker开发还是运维_20

7) 启动镜像应用到容器

docker开发还是运维 docker在开发和运维中的优势_nginx_21

8) 浏览器访问nginx页面

docker开发还是运维 docker在开发和运维中的优势_docker开发还是运维_22

至此,应用安装部署完成

9) 最后,导出镜像并上传至生产环境即可

docker save eccom/josen/nginx/udp_load_balancer:v1-dc | gzip > nginx.load_balancer.tgz

docker开发还是运维 docker在开发和运维中的优势_负载均衡_23


总结

如上所示,通过docker容器将各个应用(脚本)相互隔绝,使应用之间不会相互影响从而提高所有应用的稳定性,尤其在某些需要涉及公共依赖环境的情况下(例如gcc,python环境等),该方式可以很好的保护其他应用不受影响。