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