生活随笔
收集整理的這篇文章主要介紹了
docker mysql总是退出_Docker提升测试效率之路
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
? ??現(xiàn)如今,Docker已經(jīng)成為了很多公司部署應(yīng)用、服務(wù)的首選方案。依靠容器技術(shù),我們能在不同的體系結(jié)構(gòu)之上輕松部署幾乎任何種類的應(yīng)用。作為測試一方,我們應(yīng)與時俱進,將Docker容器技術(shù)應(yīng)用到測試工作中。為了讓小伙伴們可以快速上手Docker容器技術(shù),本文主要從3個場景介紹Docker在測試中的應(yīng)用:
- 使用Docker管理測試環(huán)境
- 使用Docker提高測試執(zhí)行效率
- 使用Docker管理測試數(shù)據(jù)?
一、使用Docker部署服務(wù)
????在講解Docker在測試中的應(yīng)用之前,先簡單給大家介紹一下如何使用Docker部署一個服務(wù)。
前提條件:
假設(shè)你的服務(wù)器已經(jīng)部署安裝了Docker服務(wù)。(安裝部署比較簡單,各位小伙伴可以自行進行操作。)
Docker部署服務(wù)步驟:
1、將工程代碼clone到服務(wù)器;
2、在工程目錄新建一個Dockerfile文件,內(nèi)容如下:
#?基于某個基礎(chǔ)Docker鏡像進行運行,如下的鏡像已經(jīng)包含了nginx+lua的環(huán)境FROM?docker-reg.sogou-inc.com/library/nginx-sogou-lua:2.1.8.0-10ADD?resources/vhosts????????????????????/usr/local/nginx/conf/vhostsADD?resources/html??????????????????????/usr/local/nginx/htmlADD?resources/lua???????????????????????/usr/local/nginx/lua
3、使用Docker build命令打包我們的服務(wù)鏡像:
#?v1為tag標簽,跟git的tag標簽類似,方便記憶docker?build?-t?helloworld:v1?.
4、打包后我們可以看到鏡像:
5、運行該鏡像:
#?-p?指定主機端口和容器端口的映射關(guān)系#?-d?指定容器在后臺運行docker?run?-p?8080:80?-d?helloworld:v1
總結(jié)一下:
1、根據(jù)服務(wù)需要的運行環(huán)境,編寫Dockerfile文件;
2、使用build命令依據(jù)Dockerfile打包鏡像;
3、鏡像可以本地運行,或發(fā)布到公有/私有平臺,以供他人使用。
#?官方docker鏡像平臺https://hub.docker.com/?
二、使用Docker管理測試環(huán)境在開發(fā)或測試過程中,我們常常需要不同(版本)的依賴(應(yīng)用)環(huán)境。以往我們通常直接在當前環(huán)境上安裝需要的依賴(應(yīng)用),考慮如下幾個問題,是否都遇到過:
- 新依賴(應(yīng)用)部署完了,想回退/恢復到舊版本,就不好操作了;
- 同一應(yīng)用的不同版本不得不借助一些第三方式工具進行管理,甚至為了方便,將不同版本的應(yīng)用部署在不同的機器上;
- 開發(fā)提測了服務(wù),但在測試環(huán)境卻無法跑起來;
有了Docker容器技術(shù)后,以上問題就統(tǒng)統(tǒng)解決了。下面開始介紹如何使用Docker容器管理測試環(huán)境,本文以python依賴環(huán)境為例子:1、我們直接從Docker官方鏡像平臺拉取一個python環(huán)境,并將它運行起來:#?-it參數(shù)指定以/bin/bash交互式運行#?--name參數(shù)給該容器起一個名字docker?run?-it?--name?python?docker.io/python:3.6.4?/bin/bash2、在容器里安裝我們需要的依賴或其他第三方開源庫,如下面安裝freetds-dev和unixodbc-dev這兩個依賴:#?其他需要的依賴可以自行安裝apt-get?install?freetds-devapt-get?install?unixodbc-dev3、安裝完后退出容器(可以使用ctrl+p+q快捷鍵),但不要結(jié)束容器;????4、將我們的修復提交,得到新的鏡像:#?-m?參數(shù)為提交的log信息,相當于git?log#?39eaa5aa7332為容器的id,可通過docker?ps命令查看docker?commit?-m?"add?freetds-dev?and?unixodbc-dev?lib"?39eaa5aa7332?python3.6.4-dev
總結(jié)一下:Docker管理測試環(huán)境的步驟有3步:1、運行一個基礎(chǔ)鏡像容器;2、在容器進行修改:服務(wù)安裝、依賴更新等;3、使用docker commit命令提交我們的修改。是不是特別方便?我們可以構(gòu)建任意我們需要的鏡像,并可以進行發(fā)布,與他人共享使用。在團隊里使用此功能可以大大提高工作效率,還可以避免因環(huán)境不一致帶來的各種問題。三、使用Docker提高測試執(zhí)行效率考慮如下3個場景:
- 問題一:A、B兩位測試人員共同負責同一核心模塊的測試,希望測試環(huán)境獨立,互不影響;
- 問題二:測試過程中發(fā)現(xiàn)某個問題,希望保留此現(xiàn)象環(huán)境,以便后面排查定位問題;
- 問題三:有沒有發(fā)現(xiàn)自己的host環(huán)境特別多,服務(wù)部署在各測試環(huán)境上,希望統(tǒng)一化管理。
當然還有很多其他類似的問題,但現(xiàn)在用Docker容器技術(shù)統(tǒng)統(tǒng)可以幫我們解決。對于問題一:我們知道,容器運行時,可以添加-p參數(shù),以指定映射不同的主機端口:#?-p?指定主機端口和容器端口的映射關(guān)系#?-d?指定容器在后臺運行#?如下運行2個容器,映射到主機上不同的端口上docker?run?-p?8080:80?-d?helloworld:v1docker?run?-p?8081:80?-d?helloworld:v1A、B測試人員分別使用不同的容器服務(wù),是不是就沒有之前的測試環(huán)境沖突的問題了?對于問題二:此時我們使用docker commit打包一個狀態(tài)鏡像(還可以直接將鏡像發(fā)布給開發(fā)),是不是也可以解決問題了?對于問題三:針對不同項目工程部署在不同測試環(huán)境的問題,有了Docker容器技術(shù),我們也可以使用docker build打包,然后運行在同一主機上。需要注意的是端口沖突的問題,如果你看到如下的錯誤,請檢查看一下是否是端口沖突了:docker:?Error?response?from?daemon:?failed?to?create?endpoint?drunk_babbage?on?network?bridge:?Bind?for?0.0.0.0:80?failed:?port?is?already?allocated.四、使用Docker管理測試數(shù)據(jù)????在講Docker管理測試數(shù)據(jù)前,先給大家講一講Docker容器數(shù)據(jù)持久化的概念,可以幫助大家更好地理解:Docker容器的數(shù)據(jù)存儲在數(shù)據(jù)層,如果刪除容器,數(shù)據(jù)也會被清除,達不到我們需要管理測試數(shù)據(jù)的效果,那我們可以怎么做呢?見上圖,Docker提供了3種持久數(shù)據(jù)的方式:
- volumes:存于主機文件系統(tǒng)中的某個區(qū)域,由Docker管理。非Docker進程不應(yīng)該修改這些數(shù)據(jù)。卷是Docker中持久化數(shù)據(jù)的最好方式
- bind mount:存于主機文件系統(tǒng)中的任意位置。非Docker進程可以修改這些數(shù)據(jù)
- tmpfs mount:存于內(nèi)存中(注意,并不是持久化到磁盤)。在容器的生命周期中,它能被容器用來存放非持久化的狀態(tài)或敏感信息
下面以mysql數(shù)據(jù)庫作為例子講解測試數(shù)據(jù)管理的方法:1、拉取mysql數(shù)據(jù)庫鏡像:#?當然也可以直接運行鏡像,當本地沒有這個鏡像的時候會自動拉取docker?pull?mysql2、運行mysql容器時,以volumes(卷)的形式將主機目錄掛載為mysql數(shù)據(jù)和配置目錄:#?-v使用2次,分別指定mysql數(shù)據(jù)庫配置和數(shù)據(jù)對應(yīng)的主機目錄docker?run?-d?-e?MYSQL_ROOT_PASSWORD=admin?--name?mysql?-v?/data/mysql/my.cnf:/etc/mysql/my.cnf?-v?/data/mysql/data:/var/lib/mysql?-p?3306:3306?mysql?3、開始你的測試(包括修改數(shù)據(jù)庫);4、退出容器,此時我們得到mysql數(shù)據(jù)的第一個版本。我們可以在本地備份、分發(fā);5、若需要以此數(shù)據(jù)為基礎(chǔ)數(shù)據(jù),復制一份出來,啟動容器時使用-v參數(shù)將復制后的路徑掛載到容器即可。
總結(jié)一下:Docker管理測試數(shù)據(jù)主要是利用Docker數(shù)據(jù)持久化功能來實現(xiàn)的,容器啟動時使用-v參數(shù)掛載主機目錄即可。五、總結(jié)????本文主要給大家簡單介紹了如何使用Docker容器技術(shù)管理測試環(huán)境、測試數(shù)據(jù),提高測試(團隊)工作效率,其核心的知識點有:1、Dockerfile文件的編寫,該部分沒有詳細介紹,大家可以參數(shù)如下教程進行學習,相信很容易可以上手:https://yeasy.gitbooks.io/docker_practice/image/dockerfile/2、docker build命令打包服務(wù)鏡像;3、docker commit 命令提交鏡像的修改;4、docker run 命令運行鏡像;5、docker run -p -v參數(shù)的應(yīng)用。當然,由于篇幅有限,如下幾個問題沒有在文中分享,有興趣的小伙伴可留言與小編交流:1、各類常見服務(wù)部署的方式;2、Docker Hub私有倉庫環(huán)境搭建;3、結(jié)合gitlab CI/CD自動化實現(xiàn)自動打包,測試,發(fā)布鏡像等功能;4、Docker容器性能的問題。搜狗測試,期待您的關(guān)注!
總結(jié)
以上是生活随笔為你收集整理的docker mysql总是退出_Docker提升测试效率之路的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。