如何自动化nginx负载 多个docker
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何自动化nginx负载 多个docker相关的知识,希望对你有一定的参考价值。
参考技术A Docker介绍Docker号称是下一代的虚拟机,它在启动和创建速度、性能、移植性等方面均优于传统虚拟机。Docker是PaaS提供商dotCloud开源的一个基于LXC的高级容器引擎。它能够让开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。目前,通过Boot2Docker已能使Docker运行在Windows和OSX中。Docker容器完全使用沙箱机制,相互之间没有任何接口。Docker几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或系统。Docker在其网站上明确地提到的Docker的典型应用场景如下:对应用进行自动打包和部署创建轻量、私有的PAAS环境自动化测试和持续整合与部署部署和扩展Web应用、数据库和后端服务在自动化测试领域,Docker大有取代传统虚拟机技术的趋势,原因如下:自动化测试依赖的是测试所需要的应用,而并非整个操作系统。因此,传统的虚拟机技术存在资源浪费。Docker构建于LXC之上。借助LXC轻量级的特性,相比于目前的虚拟机技术,Docker启动更快、资源占用更小。Docker比虚拟机轻量、灵活,便于管理。Docker标准化的构建方法(Dockerfile)和良好的RESTAPI,使得自动测试和持续集成/部署能够很好的集成进来。回页首Sahi介绍Sahi是一个开源的WebUI自动化测试框架。尽管它的知名度不及Selenium,用户群也不及Selenium庞大,但它确有它独特的魅力,例如:基于上下文的页面元素识别机制。隐式页面加载响应等待机制。良好的浏览器支持。优秀的跨浏览器录制回放调试工具SahiController。这些特性都大大地加快了自动化测试脚本的开发速度,并降低了维护成本。Sahi通过一个用Java编写的代理服务器,将用户的脚本转换为javascript后注入往返的HTTP请求及响应中,从而驱动浏览器事件。编程语言方面,除Sahi脚本(其本质是一个JavaScript库)以外,还支持Java和Ruby。Sahi有开源和收费两个版本。虽然收费版本提供了很多开源版本不具备的高级特性,不过开源版本已经能够满足大部分的功能要求。点此查看开源版本与收费版本的差异。点此查看Sahi与其他Web自动化测试框架的对比。回页首Jenkins介绍Jenkins是一种开源的基于Java开发的持续集成工具,前身称作Hudson。Jenkins提供了用于监控持续重复工作的软件平台。它支持丰富的插件,用户可以按照需求进行选择安装和配置,以实现生成执行状态表格,自动部署、更新自动化测试包等高级功能。本文将要介绍Jenkins的Docker插件,它能够动态地创建Docker容器作为JenkinsSlave节点,并在执行任务后,自动关闭容器。另外,它还支持一些额外功能,比如当构建任务成功完成后自动将容器保存为镜像、自动将镜像上传到资源库等。回页首实例演示该实例演示如何制作一个运行Sahi的镜像以及如何在Jenkins上配置Docker插件以运行Sahi测试脚本。准备Docker镜像本实例需要准备三个镜像:一个运行Jenkins,一个运行Subversion,另外一个运行Sahi。首先,制作运行Sahi的镜像。DockerHub是一个用于分享Docker镜像的资源库。目前,该资源库还没有运行Sahi的镜像,所以必须自己创建Dockerfile来构建镜像。下图是用来制作Sahi镜像的目录。图1.制作Sahi镜像的目录下图是Dockerfile的文件内容。图2.Dockerfile文件内容整个过程大体分为八个步骤:指定基础镜像我们使用的是evarga/jenkins-slave。该镜像基于Ubuntu,安装了SSH服务,并创建了用户Jenkins。替换系统默认更新源。把系统更新源替换为163的,后面的软件安装速度会比较快一些。安装必要的软件(不包括OracleJava和Sahi):Firefox,Unzip以及Xvfb。删除OpenJDK是为了后面安装OracleJava做准备。Firefox不用多说,因为该镜像用于WebUI自动化测试,所以安装了最新版本的Firefox。安装Unzip是因为后面安装Sahi需要用到它。Xvfb(Xvirtualframebuffer)是一个X11显示服务器的实现。它不是将图形在屏幕上显示出来,而是在内存中运行所有的图形操作。对客户端来说,除了无法看到真正的图形显示,没有其他分别。一般称这种运行方式为headless。安装OracleJava8。理论上Sahi应当也支持OpenJDK,所以安装OracleJava不是必须的。安装Sahi。上传了zip文件后,用Unzip解压,Sahi是基于Java的,所以解压后即已安装好Sahi。之后,替换了几个文件,它们的作用如下:Userdata.propertiesuserdata.properties中有个属性叫proxy_alert.disabled,默认值为false。用户第一次启动SahiDashboard的时候,会弹出一个如下图所示的对话框。用户勾选了“Donoshowthismessageagain”并点击Continue按钮之后,Sahi修改该属性值为true。之后就不会在跳出这个对话框了。由于用headless的方式运行Sahi无法点击该对话框,所以必须事先用一个已将该属性设置为true的文件替换Sahi默认的userdata.properties。图3.Sahi代理问题对话框sahi_example_com这是一个证书文件。用户第一次在SahiDashboard中打开Firefox时的页面如下图所示。用户需要点击SSLManager链接手动接受SSL证书。此时,文件sahi_example_com被生成到userdata/certs目录下。之后,就不需要再进行该操作了。所以,复制的sahi_example_com目的也是为了自动完成这步需要在图形界面下才能完成的操作。图4.Sahi启动页图5.SSLManager的非信任连接页面browser_types.xml替换该文件是为了使Sahi以headless的方式工作。在该文件中,事先添加了一个名字为firefox-xvfb的浏览器配置信息。之后,测试脚本就可以指向该浏览器运行。具体配置Sahi和Xvfb的步骤参考。添加init.sh文件init.sh文件用于启动Xvfb和Sahi。其内容如下。图6.init.sh文件内容“sleep5”是因为Sahi启动需要一点时间,若立即运行测试脚本会导致失败。修改权限最终运行的容器是作为JenkinsSlave节点用Jenkins用户运行,因此将整个/usr/local目录及子目录的所有人修改为Jenkins,并给Shell文件添加执行权限。Jenkins用户是在基础镜像evarga/jenkins-slave中创建的,所以在这个Dockerfile里没有创建Jenkins用户的语句。指定默认执行的命令CMD["/usr/sbin/sshd","-D"]–该语句令镜像默认启动SSH服务。事实上,这条语句也可以不添加,因为evarga/jenkins-slave的Dockerfile中已包含该语句。一切就绪之后,在该目录中执行“dockerbuild-tshenrui/sahi–rm=true”。命令成功执行后,通过“dockerimages”应当可以查看到名为“shenrui/sahi”的镜像。该镜像已经上传到DockerHub,有需要的读者可以自行拉取。Sahi镜像构建好之后,接下来准备Jenkins容器。DockerHub上已有官方的Jenkins镜像,直接用命令“dockerpulljenkins”拉取。在Docker主机上,创建一个目录(例如,/data/jenkins_home),并修改权限(chmod777)以便Jenkins容器能读写该目录,然后用命令“dockerrun-d-t--namemyjenkins-p8080:8080-v/data/jenkins_home:/var/jenkins_homejenkins”启动。此时,打开mitmysvn”把上面所做的修改保存下来创建一个新镜像mysvn。最后,用命令“dockerrun-t-d-p3690:3690--namemysvnmysvnsvnserve-d--foreground-r/var/svn/repos”启动mysvn容器。启动时,添加容器到主机的端口映射“-p3690:3690”以便之后直接通过主机IP提交测试脚本。至此,Docker上有两个正在运行的容器(dockerps),名字分别是myjenkins和mysvn。以上是关于如何自动化nginx负载 多个docker的主要内容,如果未能解决你的问题,请参考以下文章