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

环境部署:

#启动容器时指定网络模式

docker run -itd --name={container name} --net={ 网络模式}

 

#部署被测环境前端和后台,Conan和 holmes  启动前端时使用默认bridge网络模式分配端口;bridge模式使用最广泛,其网络隔离型最好;其通讯范围在容器虚拟网络范围内

在后台启动时使用container链接前端conan的方式启动; 后台的服务网络挂到前一个容器的网络中,这两个容器通过内网host可以通讯;搭建的测试环境只暴漏出前端端口

在测试被测前端应用时(应用内部有访问对应后台的用例) 后台的服务依然为前端提供服务.

docker run --name=conan -itd -p 8999:4200 conan

docker run --name=holmes -itd --net=container:conan holmes  

 

#--network host 选择host网络模式使用的是宿主机的网络, 适用于容器与外网直接进行链接, 不需要端口映射, 比如容器(jenkins)需要拉取git上的代码,  但是容器网络没有sshk权限,需要在启动容器时自己配置,比较麻烦,因此直接使用宿主机网络链接,但是这种模式也有缺点, 其在公网内广播通讯易混淆(容器越多 其广播端口越容易冲突)

使用-v 数据卷挂载容器数据时, 需要修改目录权限,因为当映射本地数据卷时, 本地的目录的拥有者是root权限,而容器中的拥有者是jenkins, 其uid 为1000

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

 

posted @ 2019-08-31 23:39  头大点怎么了  阅读(634)  评论(0编辑  收藏  举报