当web项目开发完毕后,一般会在测试环境上运行一下,供开发部门调错和测试部门测试。对于具有一定业务规模的公司,几十个上百个web服务,每个服务分别占用一个tomcat目录,配置过程繁琐,且无法集中管理。此外,对于公司的新手来讲,需要一定的背景知识才可以上手。
本文主要讲述基于docker搭建测试环境,或许可以解决部分上述问题。
http://shipyard:8080/
,通过web ui决定在哪台主机上运行项目实例,并配置映射端口。 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 run -d -p 5000:5000 -v /root/registry:/tmp/registry registry
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"
192.168.56.154
, 192.168.56.155
搭建zookeeper集群(也可以使用现成的zookeeper集群,其它配置工具etcd等也可) 192.168.56.154
, 192.168.56.155
搭建docker swarm(zookeeper只是其中一种服务发现的方式) 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
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
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最新的是3.0.0版,基于docker swarm,其所有组件以docker容器方式运行,有两种部署方式
curl -sSL https://shipyard-project.com/deploy | bash -s
安装过程
/root/shipyard/data
持久化数据库中的数据 docker run -ti -d --restart=always --name shipyard-rethinkdb -v /root/shipyard/data:/data rethinkdb
理论上是可以访问的,但如果你的宿主机打开了防火墙,对于 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镜像和容器,需要在合适的实际将其干掉。这涉及到
我采用以下策略:镜像名与jenkins的JOB_NAME相同,在使用jenkins build镜像时,便通过swarm/docker remote RESTFUL API干掉原有的镜像和容器。
更多docker内容,请浏览笔者博客: