基于docker搭建测试环境

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介:

layout: post

title: 基于docker搭建测试环境

category: 技术

tags: Docker

keywords: Docker shipyard jenkins

简介

当web项目开发完毕后,一般会在测试环境上运行一下,供开发部门调错和测试部门测试。对于具有一定业务规模的公司,几十个上百个web服务,每个服务分别占用一个tomcat目录,配置过程繁琐,且无法集中管理。此外,对于公司的新手来讲,需要一定的背景知识才可以上手。

本文主要讲述基于docker搭建测试环境,或许可以解决部分上述问题。

总体思路

  1. 业务代码(包括Dockerfile文件)通过git提交,使用Jenkins或hudson触发maven编译项目代码、并制作成docker镜像,push到docker镜像服务器。
  2. 登录shipyard,deploy docker容器

业务流程

1、在web项目目录中添加一个Dockerfile文件

FROM tomcat

ADD *.war $TOMCAT_HOME/webapps

# 启动tomcat并监听tomcat日志

CMD bash start.sh

2、创建一个新的hudson job,并build。

3、进入http://shipyard:8080/,通过web ui决定在哪台主机上运行项目实例,并配置映射端口。

基于docker测试环境的安装

jenkin与docker的整合参见:[使用Jenkins来构建Docker容器](http://www.cnblogs.com/Leo_wl/p/4314792.html ""),在此就不班门弄斧了。

该测试环境使用shipyard管理docker镜像和容器(运行web实例)。shipyard, Built on Docker Swarm, Shipyard gives you the ability to manage Docker resources including containers, images, private registries and more.

示例环境描述:在192.168.56.154,192.168.56.155上搭建docker swarm集群,并在192.168.56.154上运行shipyard controller。

安装docker registry

docker run -d -p 5000:5000 -v /root/registry:/tmp/registry registry

安装docker swarm

1、为192.168.56.154,192.168.56.155安装docker,并配置其DOCKER_OPTS="--insecure-registry 私服ip:5000 -H 0.0.0.0:2375 -H unix:///var/run/docker.sock"

2、为192.168.56.154,192.168.56.155搭建zookeeper集群(也可以使用现成的zookeeper集群,其它配置工具etcd等也可)

3、为192.168.56.154,192.168.56.155搭建docker swarm(zookeeper只是其中一种服务发现的方式)

  • root@192.168.56.155 # docker run -ti -d --restart=always --name shipyard-swarm-agent swarm join zk://192.168.56.154,192.168.56.155/swarm --addr=192.168.56.155:2375

这容器工作就是:不停的向zookeeper注册该节点的信息,进入zookeeper命令行可以看到


 
 
  1. [zk: 192.168.56.154:2181(CONNECTED) 5] ls /swarm/docker/swarm/nodes 
  2.  
  3. [192.168.56.155:2375
  4.  
  5. root@192.168.56.154 # docker run -ti -d --restart=always --name shipyard-swarm-agent swarm join zk://192.168.56.154,192.168.56.155/swarm --addr=192.168.56.154:2375 
  6. root@192.168.56.154 # docker run -ti -d --restart=always --name shipyard-swarm-manager -p 2376:2376 swarm manage zk://192.168.56.154,192.168.56.155/swarm --host tcp://0.0.0.0:2376 

--host tcp://0.0.0.0:2376是设置容器中swarm的http server监听2376端口,-p 2376:2376是将容器的2376端口映射出来,注意2376端口是随意弄的,但该端口不能命名为2375。至此,docker swarm将以192.168.56.154:2376对外提供web服务

shipyard 手动安装步骤

shipyard最新的是3.0.0版,基于docker swarm,其所有组件以docker容器方式运行,有两种部署方式

  1. 自动部署,命令:curl -sSL https://shipyard-project.com/deploy | bash -s
  2. 手动部署,手动依次启动必须的容器组件。

安装过程

1、通过/root/shipyard/data持久化数据库中的数据


 
 
  1. root@192.168.56.154 # docker run -ti -d --restart=always --name shipyard-rethinkdb -v /root/shipyard/data:/data rethinkdb 

2、安装shipyard-controller


 
 
  1. root@192.168.56.154 # docker run -ti -d --restart=always --name shipyard-controller --link shipyard-rethinkdb:rethinkdb --link shipyard-swarm-manager:swarm -p 8080:8080 shipyard/shipyard:latest server -d tcp://swarm:2376 

需要注意的问题

docker容器一定可以访问宿主机么

理论上是可以访问的,但如果你的宿主机打开了防火墙,对于192.168.56.154执行docker run -ti -d --restart=always --name shipyard-swarm-agent swarm join zk://192.168.56.154,192.168.56.155/swarm --addr=192.168.56.154:2375时,可能会失败,因为swarm容器无法访问192.168.56.154的2376端口

清掉过时的镜像和容器

对于测试环境,业务代码经常更新,因此会产生非常多的docker镜像和容器,需要在合适的实际将其干掉。这涉及到

  1. 镜像的命名策略
  2. 干掉old镜像以及对应container的时机

我采用以下策略:镜像名与jenkins的JOB_NAME相同,在使用jenkins build镜像时,便通过swarm/docker remote RESTFUL API干掉原有的镜像和容器。

优势

  1. docker镜像集中管理(通过web ui进行管理)
  2. docker容器(类似于一个项目实例)集中管理,并可以监控所有实例的运行状态,还可以创建、删除“运行实例”
  3. 减少操作步骤,只需要极少的背景知识(为调试项目,需要懂一点docker命令)。

不足

  1. 运行的web项目只可以调用其它服务(包括redis、rabbitmq等),不能对外提供服务(不是不可以做,而是复杂的端口映射不好管理(可以使用nginx可以解决))。
本文作者:骨汤鸡蛋面

来源:51CTO
相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
6月前
|
关系型数据库 测试技术 数据库
使用Docker搭建测试用例管理平台TestLink:简易指南
使用Docker搭建TestLink测试管理软件的步骤如下:首先,拉取`bitnami/mariadb`和`bitnami/testlink-archived`镜像。然后,启动MariaDB容器,创建数据库。接着,启动TestLink容器并连接到MariaDB。检查容器状态确保它们已启动。最后,访问`localhost:8099`以使用TestLink,默认用户名为`user`,密码为`bitnami`。这样,你就能在本地便捷地进行测试管理了。
184 2
|
6月前
|
Ubuntu Cloud Native 测试技术
百度搜索:蓝易云【云原生之使用Docker部署ubuntu测试环境】
请注意,以上步骤仅是简单的使用Docker部署Ubuntu测试环境的示例。在实际应用中,您可能需要根据测试需求和应用场景进行更多的配置和优化。同时,在退出容器时,容器并未删除,您可以使用 `docker rm <容器名称>`命令来删除容器。在进行测试时,请谨慎操作,并确保对Docker的使用有一定的了解,以避免不必要的问题。
71 2
|
6月前
|
测试技术 Docker 容器
使用Docker构建多环境应用:开发、测试、生产环境
Docker已经成为了现代应用程序开发和部署的核心工具之一。通过使用Docker,开发团队可以轻松地在不同的环境中构建、测试和部署应用程序,从而提高开发速度和应用程序的可移植性。本文将介绍如何使用Docker构建多环境应用,包括开发、测试和生产环境,并提供丰富的示例代码,以帮助大家轻松应对不同环境的挑战。
|
28天前
|
存储 NoSQL 大数据
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
31 3
|
3月前
|
消息中间件 测试技术 RocketMQ
docker部署RockerMQ单机测试环境
docker部署RockerMQ单机测试环境
|
3月前
|
关系型数据库 MySQL 测试技术
使用docker部署MySQL测试环境
使用docker部署MySQL测试环境
41 0
|
3月前
|
分布式计算 大数据 Hadoop
最快方式搭建docker大数据 测试集群
【8月更文挑战第5天】快速搭建Docker大数据测试集群可采用预构建镜像与Compose文件、利用云服务如AWS的ECS、自动化工具如Ansible或参考在线教程。只需简单配置如内存分配及路径,运行`docker-compose up`即可启动含NameNode、DataNode等组件的Hadoop集群。根据需求与资源选择合适方法。
|
5月前
|
IDE 前端开发 时序数据库
【Docker项目实战】使用Docker部署speedtest-tracker速度测试追踪器
【6月更文挑战第4天】使用Docker部署speedtest-tracker速度测试追踪器
445 0
|
6月前
|
Ubuntu Linux 测试技术
Linux(32)Rockchip RK3568 Ubuntu22.04上部署 Docker: 详细配置与功能测试(下)
Linux(32)Rockchip RK3568 Ubuntu22.04上部署 Docker: 详细配置与功能测试
312 1
|
6月前
|
jenkins 测试技术 持续交付
软件测试|docker搭建Jenkins+Python+allure自动化测试环境
通过以上步骤,你可以在Docker中搭建起Jenkins自动化测试环境,实现Python测试的自动化执行和Allure报告生成。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
150 6