环境部署:前端
#启动容器时指定网络模式node
docker run -itd --name={container name} --net={ 网络模式}mysql
#部署被测环境前端和后台,Conan和 holmes 启动前端时使用默认bridge网络模式分配端口;bridge模式使用最普遍,其网络隔离型最好;其通信范围在容器虚拟网络范围内git
在后台启动时使用container连接前端conan的方式启动; 后台的服务网络挂到前一个容器的网络中,这两个容器经过内网host能够通信;搭建的测试环境只暴漏出前端端口web
在测试被测前端应用时(应用内部有访问对应后台的用例) 后台的服务依然为前端提供服务.sql
docker run --name=conan -itd -p 8999:4200 conanchrome
docker run --name=holmes -itd --net=container:conan holmes docker
#--network host 选择host网络模式使用的是宿主机的网络, 适用于容器与外网直接进行连接, 不须要端口映射, 好比容器(jenkins)须要拉取git上的代码, 可是容器网络没有sshk权限,须要在启动容器时本身配置,比较麻烦,所以直接使用宿主机网络连接,可是这种模式也有缺点, 其在公网内广播通信易混淆(容器越多 其广播端口越容易冲突)编程
使用-v 数据卷挂载容器数据时, 须要修改目录权限,由于当映射本地数据卷时, 本地的目录的拥有者是root权限,而容器中的拥有者是jenkins, 其uid 为1000vim
sudo chown -R 1000 /home/wangjianqing/jenkins_data
docker run --name myjenkins -itd --network host -v /home/wangjianqing/jenkins_data:/var/jenkins_home --env JAVA_OPTS='Xmx8192m' jenkins/jenkins
#配置testlink环境, 须要新配置mariadb; 启动完mariadb,再启动testlink时,须要获取mariadb的通信, 可使用-e配置文件形式将db的配置写入到link容器中,也可使用conntainer指向db容器;
如下使用--link 把db的网络信息以环境变量的形式注入到link容器(能够经过exec进入link容器中查看env环境变量)
docker run -d --name mariadb -e ALLOW_EMPTY_PASSWORD=yes -e MARIADB_USER=bn_testlink -e MARIADB_DATABASE=bitnami_testlink -v /home/gaofei/test/mysql:/var/lib/mysql -p 8088:3306 bitnami/mariadb:latest
docker run -d --name testlink -p 8099:80 -p 444:443 -e ALLOW_EMPTY_PASSWORD=yes -e TESTLINK_DATABASE_USER=bn_testlink -e TESTLINK_DATABASE_NAME=bitnami_testlink --link mariadb bitnami/testlink:latest
#搭建分布式UI web自动化测试Grid,须要下载VNC Viewer; 可使用它打开node运行容器时的 图形界面
测试脚本做用于hub上,hub连接多个node(容器); 每一个node下管理多个浏览器
若是chrome 和 hub不在同一台服务器中, 这两个容器不能使用--link的方式; 须要把hub的信息以环境变量的形式-e注入到node(chrome)容器中
docker run --name=hub -p 5001:4444 -e GRID_TIMEOUT=0 -e GRID_THROW_ON_CAPABILITY_NOT_PRESENT=true -e GRID_NEW_SESSION_WAIT_TIMEOUT=-1 -e GRID_BROWSER_TIMEOUT=15000 -e GRID_TIMEOUT=30000 -e GRID_CLEAN_UP_CYCLE=30000 -d selenium/hub:3.7.1-beryllium
docker run --name=chrome -p 5902:5900 -e NODE_MAX_INSTANCES=6 -e NODE_MAX_SESSION=6 -e NODE_REGISTER_CYCLE=5000 -e DBUS_SESSION_BUS_ADDRESS=/dev/null -v /dev/shm:/dev/shm --link hub -d selenium/node-chrome-debug:3.7.1-beryllium
VNC密码是:secret
#制做镜像
使用commit
使用dockerfile 编程的方式制做镜像把制做镜像的过程以编码的形式记录下来,更易维护,
执行build 过程当中,会启动一个临时的容器, 执行dockerfile中的命令, 启动完成后使用commit制做镜像,
每个dockerfile使用一个独立的文件夹, 内部包含启动脚本 build完的镜像也生成在这个目录
#docker build -f <dockerfile path> myimage <path>
docker build -t myimage . 使用Dockerfile当前目录制做镜像,不用指定-f 目录 它会自动寻找该目录下的dockerfile 空格.表明生成的镜像在当前目录
#dockerfile 常见指令:
FROM centos #当前要制做的镜像继承centos基础镜像
ADD entrypoint.sh /root # ADD 将脚本打入到镜像的root目录中(最好将脚本放到daockerfile目录中)
RUN yum install -y git #使用的centos系统 执行软件管理用yum 安装git和vim 制做成带有git和vim的centos镜像
RUN yum install -y vim
ENTRYPOINT ["/bin/bash","/root/entrypoint.sh"] #指定一个容器启动时的启动脚本,若是没有这个脚本,启动完容器就会掉线
#entrypoint.sh文件, 使容器一直运行
#1/bin/bash
/usr/sbin/sshd -D
while ture
do
sleep 10
done
#docker使用分层文件管理系统, run的层数越多越难管理, 其启动速度也越慢,性能越差, 所以最好使用单行连接的方式制做镜像
#联合文件系统aufs提供多目录中的文件在统一视图上挂载, 第一个文件权限外,其他目录均为只读权
#docker分层镜像管理系统 overlayfs2