環境部署:前端
#啓動容器時指定網絡模式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