-
1 # 檸檬班軟體測試
-
2 # 夕陽雨晴
1. 問題描述
你用docker做過什麼好玩或者有逼格的事情?
問題結論
docker較底層的docker安裝、映象構建、容器編排、容器釋出等,還是剛開始參加工作那2年接觸過,至今已3年多時間。網際網路公司中,除了基礎運維團隊,其他研發看到的都是整合的開發環境,曉得底層用的docker或者k8s,但就使用者而言,在網站工具上部署、釋出、上線,一個新的映象部署完成。至於底層如果互動和編排,鬼曉得。基於此,我就簡單說說當年基於 docker 的 war 包部署和 jar 包部署,僅供參考。
2. 簡述 docker 部署示例
2.1 docker 的使用場景
讓應用快速打包與容易自動化部署建立輕量、私密的 PAAS 環境實現自動化測試和持續的整合/部署2.2 war 包部署示例
# 編寫 Dockerfile 檔案
from tomcat:latest
MAINTAINER sunzc #作者
COPY demo.war /usr/local/tomcat/webapps #放置到tomcat的webapps目錄下
# 生成 war 包映象命令
$ docker build -t demo:v1 . # (. 代表Dockerfile檔案所在的路徑)
# 啟動容器
docker run --name demo -p 8080:8080 -v /home/logs/demo/:/home/logs/demo/ -e TZ=Asia/Shanghai -e spring.profiles.active=local --restart=always -d demo:v1
2.3 jar 包部署示例
# 編寫 Dockerfile 檔案
FROM keensoft/centos7-java8
MAINTAINER sunzc
# set timezone to PRC
ENV TZ="Asia/Shanghai" LANG=en_US.UTF-8 PRO_ENV="prod"
ADD demo.jar /home/App.jar
ENTRYPOINT java -jar /home/App.jar
# 編寫start.sh檔案,用於啟動jar程式,並且映象啟動後執行
java -jar /home/App.jar
# 生成 jar 包映象命令
docker build -t demo:v1 .
# 啟動容器
docker run --name demo -p 8080:8080 -v -v /home/logs/demo/:/home/logs/demo/ -e TZ=Asia/Shanghai -e spring.profiles.active=local --restart=always -d demo:v1
3. 小結
3.1 Docker特性
隔離性:libcontainer(預設容器)=>核心名稱空間。安全性:內部(cgroups)| 容器和宿主主機(核心能力機制)。可度量性:cgroups(控制組)→資源度量和分配(使用者)。移植性:AUFS(快速更新)→層的概念。3.2 Docker優點(比較LXC)
跨平臺可移植性:按統一標準打包(映象中),可傳播。面向應用:最佳化部署應用(設計哲學)→API,介面及文件(體現)。版本控制:追蹤、查詢、記錄版本資訊(應用程式更改史)和回滾版本等。元件複用:元件式搭建(基礎映象)→Python(執行環境) | postgreasql(基礎映象)。共享性:公共的註冊伺服器(可免費下載原始碼)。
回覆列表
使用 Docker 搭建 Jenkins+python3+selenium\helium 專案專案背景
用 python3 在本地寫了一個專案,這個專案採用 helium+selenium+chrome 進行介面操作,程式碼放在 gitee 上託管。現在基本功能已經實現,想在 Linux 伺服器上部署專案程式碼,實現自動構建。
自動構建解決方案自動構建工具選型:jenkins中介軟體選型:docker程式碼執行環境:python3指令碼執行工具:Chrome 瀏覽器、chromedriver、helium 庫Ⅰ、安裝 dockerLinux 系統中安裝 dockercurl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
docker 映象國內加速vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
# 重啟服務
systemctl daemon-reload
systemctl restart docker
Ⅱ、安裝 jenkins在 Linux 上任意路徑,建立一個用於存放 Jenkins 檔案的資料夾 "jenkins_py"mkdir jenkins_py docker run -itd --name=jenkins_py -p 8989:8080 -p 50001:50000 -v $PWD:/var/jenkins_home --privileged=true -u root jenkins/jenkins
訪問 jenkins:http://ip:8989出現輸入密碼頁面時,獲取密碼:方法 1:# 進入容器
docker exec -it -u root jenkins_py /bin/bash
# 檢視密碼
cat /var/jenkins_home/secrets/initialAdminPassword
方法 2:# 在當前宿主linux機器上,進入前面自己建立的jenkins_py資料夾
cd secrets
cat initialAdminPassword
Ⅲ、容器安裝必要軟體進入容器docker exec -it -u root jenkins_py /bin/bash
安裝更新# 安裝更新
apt-get update
# 檢視系統
cat /etc/issue
# 此時容器預設的系統為 debain 9
# debain預設的軟體源非常慢, 可以更換為國內阿里源
# 安裝vim
apt-get install -y vim
apt-get install -y wget
# 更換源為阿里源
vim /etc/apt/sources.list
deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch main non-free contrib
deb http://mirrors.aliyun.com/debian-security stretch/updates main
deb-src http://mirrors.aliyun.com/debian-security stretch/updates main
deb http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib
deb http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib
# 更新系統
apt-get update
# 安裝libssl-dev
apt-get install libssl-dev
Ⅳ、配置 Web 自動化環境下載瀏覽器百度搜索"chrome for linux", 下載適合 debain 版本的 Chrome 瀏覽器把下載的檔案上傳到 Linux 機器下載瀏覽器驅動下載 Chrome 瀏覽器 Linux 對應版本的驅動把下載的檔案上傳到 Linux 機器Jenkins 容器中,安裝 Chrome 瀏覽器# 把chrome檔案,複製到上面建立的 jenkins_py 資料夾
cp google-chrome-stable_current_amd64_85.0.4183.102.deb ./jenkins_py/
# 進入容器
docker exec -it -u root jenkins_py /bin/bash
cd /var/jenkins_home
chmod +x google-chrome-stable_current_amd64_85.0.4183.102.deb
dpkg -i google-chrome-stable_current_amd64_85.0.4183.102.deb
配置瀏覽器驅動# 解壓驅動zip包
unzip chromedriver_linux64.zip
# 複製到 jenkins_py資料夾
cp chromedriver ./jenkins_py/
# 進入容器
docker exec -it -u root jenkins_py /bin/bash
cd /var/jenkins_home
chmod +x chromedriver
mv chromedriver /usr/bin/
cp /usr/bin/chromedriver /usr/local/bin/
Ⅴ、安裝 python3安裝 python3apt-get install -y python3
安裝 pip# 下載pip
wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py
pip3 install --upgrade --force-reinstall setuptools
修改系統預設 python 版本為 python3cd /usr/bin
ls -l python*
# 檢視上面的python3的版本
rm -rf python
ln -s python3.5 pythonpython3.5
# 修改為上面對於的python3版本* 修改pip源
修改 pip 源vim /etc/pip.conf
[global]
trusted-host = mirrors.aliyun.com
index-url = http://mirrors.aliyun.com/pypi/simple/
Ⅵ、jenkins 配置任務建立任務配置 Git配置構建觸發器(可選)配置構建指令碼pip install -r requirements.txt 執行專案根目錄中的 requirements.txt 檔案,自動安裝專案需要的庫,這樣就不用擔心程式碼引入了新庫,而 Jenkins 中不存在,導致報錯了。
cp ../../tools.ini $PWD/src/conf 複製配置檔案。因為 gitee 託管專案時,沒有提交 ini 帶私密資訊的配置檔案
python main.py 用 python 執行專案
構建注意: 用 docker+jenkins 來執行 selenium 的專案,是無圖形介面的,所以專案中,瀏覽器必須採用無頭模式
# 參考程式碼
self.options = ChromeOptions()
self.options.add_argument("--headless")
self.options.add_argument("--no-sandbox")
self.options.add_argument("--disable-gpu")
self.options.add_argument("--disable-dev-shm-usage")
start_chrome(headless=True,options=self.options)
好了,專案構建成功。整個構建步驟、方法,你學會了嗎?