docker基础应用: 搭建环境及制做镜像

环境部署:前端

#启动容器时指定网络模式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

相关文章
相关标签/搜索