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

相關文章
相關標籤/搜索