docker mysql总是退出_Docker提升测试效率之路

    现如今,Docker已经成为了很多公司部署应用、服务的首选方案。依靠容器技术,我们能在不同的体系结构之上轻松部署几乎任何种类的应用。作为测试一方,我们应与时俱进,将Docker容器技术应用到测试工作中。为了让小伙伴们可以快速上手Docker容器技术,本文主要从3个场景介绍Docker在测试中的应用:

  • 使用Docker管理测试环境
  • 使用Docker提高测试执行效率
  • 使用Docker管理测试数据 
一、使用Docker部署服务

    在讲解Docker在测试中的应用之前,先简单给大家介绍一下如何使用Docker部署一个服务。

前提条件:

假设你的服务器已经部署安装了Docker服务。(安装部署比较简单,各位小伙伴可以自行进行操作。)

Docker部署服务步骤:

1、将工程代码clone到服务器;

2、在工程目录新建一个Dockerfile文件,内容如下:

# 基于某个基础Docker镜像进行运行,如下的镜像已经包含了nginx+lua的环境FROM docker-reg.sogou-inc.com/library/nginx-sogou-lua:2.1.8.0-10ADD resources/vhosts                    /usr/local/nginx/conf/vhostsADD resources/html                      /usr/local/nginx/htmlADD resources/lua                       /usr/local/nginx/lua

3、使用Docker build命令打包我们的服务镜像:

# v1为tag标签,跟git的tag标签类似,方便记忆docker build -t helloworld:v1 .

4、打包后我们可以看到镜像:

e5fdbdc9e444f64e69e72c4b2cddd2be.png

5、运行该镜像:

# -p 指定主机端口和容器端口的映射关系# -d 指定容器在后台运行docker run -p 8080:80 -d helloworld:v1

总结一下:

1、根据服务需要的运行环境,编写Dockerfile文件;

2、使用build命令依据Dockerfile打包镜像;

3、镜像可以本地运行,或发布到公有/私有平台,以供他人使用。

# 官方docker镜像平台https://hub.docker.com/ 

二、使用Docker管理测试环境在开发或测试过程中,我们常常需要不同(版本)的依赖(应用)环境。以往我们通常直接在当前环境上安装需要的依赖(应用),考虑如下几个问题,是否都遇到过:
  • 新依赖(应用)部署完了,想回退/恢复到旧版本,就不好操作了;
  • 同一应用的不同版本不得不借助一些第三方式工具进行管理,甚至为了方便,将不同版本的应用部署在不同的机器上;
  • 开发提测了服务,但在测试环境却无法跑起来;
有了Docker容器技术后,以上问题就统统解决了。下面开始介绍如何使用Docker容器管理测试环境,本文以python依赖环境为例子:1、我们直接从Docker官方镜像平台拉取一个python环境,并将它运行起来:
# -it参数指定以/bin/bash交互式运行# --name参数给该容器起一个名字docker run -it --name python docker.io/python:3.6.4 /bin/bash
2、在容器里安装我们需要的依赖或其他第三方开源库,如下面安装freetds-dev和unixodbc-dev这两个依赖:
# 其他需要的依赖可以自行安装apt-get install freetds-devapt-get install unixodbc-dev
3、安装完后退出容器(可以使用ctrl+p+q快捷键),但不要结束容器;    4、将我们的修复提交,得到新的镜像:
# -m 参数为提交的log信息,相当于git log# 39eaa5aa7332为容器的id,可通过docker ps命令查看docker commit -m "add freetds-dev and unixodbc-dev lib" 39eaa5aa7332 python3.6.4-dev
1198a38094c150b531bc5690e1295633.png总结一下:Docker管理测试环境的步骤有3步:1、运行一个基础镜像容器;2、在容器进行修改:服务安装、依赖更新等;3、使用docker commit命令提交我们的修改。是不是特别方便?我们可以构建任意我们需要的镜像,并可以进行发布,与他人共享使用。在团队里使用此功能可以大大提高工作效率,还可以避免因环境不一致带来的各种问题。三、使用Docker提高测试执行效率考虑如下3个场景:
  • 问题一:A、B两位测试人员共同负责同一核心模块的测试,希望测试环境独立,互不影响;
  • 问题二:测试过程中发现某个问题,希望保留此现象环境,以便后面排查定位问题;
  • 问题三:有没有发现自己的host环境特别多,服务部署在各测试环境上,希望统一化管理。
当然还有很多其他类似的问题,但现在用Docker容器技术统统可以帮我们解决。对于问题一:我们知道,容器运行时,可以添加-p参数,以指定映射不同的主机端口:
# -p 指定主机端口和容器端口的映射关系# -d 指定容器在后台运行# 如下运行2个容器,映射到主机上不同的端口上docker run -p 8080:80 -d helloworld:v1docker run -p 8081:80 -d helloworld:v1
A、B测试人员分别使用不同的容器服务,是不是就没有之前的测试环境冲突的问题了?对于问题二:此时我们使用docker commit打包一个状态镜像(还可以直接将镜像发布给开发),是不是也可以解决问题了?对于问题三:针对不同项目工程部署在不同测试环境的问题,有了Docker容器技术,我们也可以使用docker build打包,然后运行在同一主机上。需要注意的是端口冲突的问题,如果你看到如下的错误,请检查看一下是否是端口冲突了:
docker: Error response from daemon: failed to create endpoint drunk_babbage on network bridge: Bind for 0.0.0.0:80 failed: port is already allocated.
四、使用Docker管理测试数据    在讲Docker管理测试数据前,先给大家讲一讲Docker容器数据持久化的概念,可以帮助大家更好地理解:a91a37247b928d0cc2aa4d33cabe3f1e.pngDocker容器的数据存储在数据层,如果删除容器,数据也会被清除,达不到我们需要管理测试数据的效果,那我们可以怎么做呢?见上图,Docker提供了3种持久数据的方式:
  • volumes:存于主机文件系统中的某个区域,由Docker管理。非Docker进程不应该修改这些数据。卷是Docker中持久化数据的最好方式
  • bind mount:存于主机文件系统中的任意位置。非Docker进程可以修改这些数据
  • tmpfs mount:存于内存中(注意,并不是持久化到磁盘)。在容器的生命周期中,它能被容器用来存放非持久化的状态或敏感信息
下面以mysql数据库作为例子讲解测试数据管理的方法:1、拉取mysql数据库镜像:
# 当然也可以直接运行镜像,当本地没有这个镜像的时候会自动拉取docker pull mysql
2、运行mysql容器时,以volumes(卷)的形式将主机目录挂载为mysql数据和配置目录:
# -v使用2次,分别指定mysql数据库配置和数据对应的主机目录docker run -d -e MYSQL_ROOT_PASSWORD=admin --name mysql -v /data/mysql/my.cnf:/etc/mysql/my.cnf -v /data/mysql/data:/var/lib/mysql -p 3306:3306 mysql 
3、开始你的测试(包括修改数据库);4、退出容器,此时我们得到mysql数据的第一个版本。我们可以在本地备份、分发;5、若需要以此数据为基础数据,复制一份出来,启动容器时使用-v参数将复制后的路径挂载到容器即可。总结一下:Docker管理测试数据主要是利用Docker数据持久化功能来实现的,容器启动时使用-v参数挂载主机目录即可。五、总结    本文主要给大家简单介绍了如何使用Docker容器技术管理测试环境、测试数据,提高测试(团队)工作效率,其核心的知识点有:1、Dockerfile文件的编写,该部分没有详细介绍,大家可以参数如下教程进行学习,相信很容易可以上手:
https://yeasy.gitbooks.io/docker_practice/image/dockerfile/
2、docker build命令打包服务镜像;3、docker commit 命令提交镜像的修改;4、docker run 命令运行镜像;5、docker run -p -v参数的应用。当然,由于篇幅有限,如下几个问题没有在文中分享,有兴趣的小伙伴可留言与小编交流:1、各类常见服务部署的方式;2、Docker Hub私有仓库环境搭建;3、结合gitlab CI/CD自动化实现自动打包,测试,发布镜像等功能;4、Docker容器性能的问题。搜狗测试,期待您的关注!fb55108590fe6a4e4a24f07fc197cf5a.png

258bbdd5499e2e0b196fc5bed827d691.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573938.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

32位mysql安装包_软件测试基础——Linux系统搭建MySQL数据库

一、mysql下载1. 下载:官方网址:https://dev.mysql.com/downloads/mysql/2. 选择相应的版本,由于cenos是基于红帽的,所以Select Operating System选择Red Hat...。我所用的镜像为cenos7所以Red Hat....linux7,一定要选相应的版本&…

python gevent模块 下载_Python中的多任务,并行,并发,多线程,多进程,协程区别...

多任务CPU承担了所有的计算任务。一个CPU在一个时间切片里只能运行一个程序。当我们想同时运行多于一个程序的时候,就是多任务,例如同时运行微信,QQ,浏览器等等。多任务的目的是提升程序的执行效率,更充分利用CPU的资源…

vue-router 路由嵌套显示不出来_网络协议|OSI模型第三层网络层中的路由

的IP协议OSI第二层中用以太网协议定义了信息传输单元,简称为帧,它长这个样子。同样的在OSI第三层中,会用 IP 协议去定义信息传输单元,简称为数据包,它长这个样子。实际上,最终在网络上传输的是第二层的帧&a…

asp.net怎么实现按条件查询_【33期】分别谈谈联合索引生效和失效的条件

点击上方“Java面试题精选”,关注公众号面试刷图,查缺补漏>>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅。这道题考查索引生效条件、失效条件。像这类问题才其实很有意义&…

java 二分搜索获得大于目标数的第一位_程序员数据结构算法编程,二分查找搜索算法的原理与应用介绍!...

本文来讲一种搜索算法,即二分搜索算法,通常在面试时也会被问到。我们先来看一个例子,在图书馆通常是根据查到的编号去找书,可以在书架上按顺序一本本地查找,也可以找到一本书不符合预期时,再跳过一大部分书…

2020idea插件怎么同步_VScode 插件整理

1、auto rename tag :HTML 标签自动闭合;避免了在整个页面中费劲查找。你想将一个H2标签更改为H3标签,或者你想将一个div标签更改为span标签,不管要做什么,你都要浪费时间来查找结束标签,这时候就该用这个插…

python 将两幅图拼接_清华王教授典藏的python电子书,整整10个G拿去不谢

终于拿到!清华王教授典藏的电子书,整整10个G!兄弟,毫无套路!无偿获取方式:1.点赞评论2.关注小编,私信“Python”(点开头像就能看到私信按钮啦).Python指南——五行代码实现批量抠图你是否曾经想将某张照片中…

地磅称重软件源码_【漯河衡器】导致地磅称重不准原因及处理措施

地磅是一种新型的大型电子衡器,能够迅速、直观、高准确度地展现工商业、仓储、货站贸易计量的重要工具。做为贸易结算的工具,地磅的可靠性、准确性、科学性有着极为重要的影响。而在货物来往中,地磅是等价交换的桥梁,一旦地磅显现…

寻宝机器人电路板焊接_专业维修淮安市KUKA库卡KRC2机器人回收{机器人调试}

FANUC机器人伺服-023故障排除:FANUCR-2000六轴焊接机器人点焊进程中,J4机械臂显现自动滑动故障,机器人发出伺服故障报警,报警故障码为伺服-023,依据FANUC机器人维修手册,故障代码解释以下:伺服误…

android uber启动动画,仿 Uber 视频背景登录界面以及登录动画

现在有越来越多的 app 的登录/注册界面的背景是播放视频或者 gif,我主要看了 Uber 和 keep 的登录界面再配合拉勾的登录界面仿作了一个登录界面。1.首先,查资料我在 github 上找到了这两个库:-STLBGVideo 这个库是 oc 写的,但你的…

遍历列表python_Python 遍历List的三种方法

转载至https://www.cnblogs.com/pizitai/p/6398276.html #!/usr/bin/env python # -*- coding: utf-8 -*- if __name__ __main__: list [html, js, css, python] # 方法1 print 遍历列表方法1: for i in list: print ("序号:%s 值:%s&…

名图1.8智能隐藏功能_自动打包不脏手才是真智能,双11销冠,拓牛自动打包垃圾桶体验...

不是吧!不是吧!都是2020年了,不会还有人不知道电动垃圾桶的存在吧?如果你还不知道,那就跟5G智玩好物一起来看看最新上线的拓牛T Air Lite吧。首先,让我们看一下拓牛T Air Lite的外观。在大众的印象里&#…

android struts2 图片上传,xhEditor struts2实现图片上传

如果想要出现上传按钮,在xhEditor设置以下参数:html5Upload : false //此属性必须为falseupImgUrl : "ImgUpload.action" //上传服务器接口onUpload : insertUpload //服务器返回信息,JSON格式一、前台代码$(function() {…

python如何画出多个独立的图片_python实现在一个画布上画多个子图

matplotlib 是可以组合许多的小图, 放在一张大图里面显示的. 使用到的方法叫作 subplot. 均匀画图 使用import导入matplotlib.pyplot模块, 并简写成plt. 使用plt.figure创建一个图像窗口. 1 2 3 import matplotlib.pyplot as plt plt.figure() 使用plt.subplot来创建小图. plt.…

e5cc温控仪通讯参数设定_产品介绍||DeltaWiFi通讯型多功能电表DPMC520W

Delta-WiFi通讯型多功能电表DPM-C520W台达WiFi通讯型多功能电表DPM-C520W ,使用无线通信技术,非常适合于挑高空间和不易配线的盘体使用。可支持各种电力参数量测及谐波量测,支持报警设定、参数群组化设定,采用MODBUS-TCP协议&…

文件设置索引_什么样的网站结构备受搜索引擎喜爱?

网站在优化中,对于收录问题也非常重视,但很多时候,网站各方面都做的很好但就是蜘蛛不抓取,这个时候就要考虑是网站结构问题了,导致网站页面无法被正常抓取。那么怎样才能提升搜索引擎的抓取呢?什么样的结构…

函数运行 形参实参变化 内存空间_可能python创始人都不知道的,python函数实参形参讲解...

今天我们来学习一下python函数的用法函数是带名字的代码块,我们可以直接调用函数,无需反复板鞋完成该函数的代码1.下面我们来看一个简单的函数首先定义一个函数,def是定义的意思,后面是函数名在函数中同样使用缩进来区分语句是否在…

小说阅读网站设计HTML,40多个漂亮的网页表单设计实例

网页表单是访问者与网站拥有者主要的沟通途径。返馈总是重要的,这就是我们为什么确保网页表单容易理解和使用起来比较直观的原因,尽管如此,甚至在形式设计中它也担当创意中的有效部分。网页表单并非都是乏味的,使用css或flash,你能…

abap 添加alv上的工具栏的按钮_你需要属于自己的PPT工具栏!

人类使用工具的历史,是我们成为人类 ,并且不断进步的历史。对于我们设计师而言,认识并掌握设计工具,是我们成为设计师的开始。而根据自己的需要,升级、改造设计工具,则是我们向更深层水平的进阶过程。Power…

java根据pdf模板生成pdf_PDF文件如何生成链接

本文介绍如何将PDF文件在线分享。首先我们打开maipdf的网站,因为市场上做pdf安全分享的网站非常少,所以建议使用maipdf打开网站之后,选择您需要分享的pdf文件进行上传生成后的链接您可以打开看到您的pdf文件,并且在改页面下&#…