初步使用 Docker 后感

e2ex 9年前發布 | 32K 次閱讀 Docker

來自:http://testerhome.com/topics/2549?from=groupmessage&isappinstalled=0

思寒的評論:

我們公司用到了docker. 說下我的感受吧.

目前測試環境是用docker構建的. 除了docker環境外, 也同時編寫了一部分的自動化控制腳本搭建. 兩者并行是因為歷史原因. 在組內我是推薦用docker的. 也受到了質疑. 說下我的感受吧.
docker最大的特點

虛擬化.

這個虛擬機技術會為未來的運維和云中心節省很大一筆收入. 因為他沒有了虛擬機OS這個很大的負擔. 節省的資源很大. 這個肯定會被所有的云計算服務商重視.
容器技術是工作于進程. 是內核進行了資源隔離. 他的性能接近原生. 如果是單純當成一個虛擬機軟件. 那還不如virtualbox方便.. 他的這個性能提升對我們QA基本是沒太大收益的. 對運維和全球的節省那可很大了. 所以幾乎所有的云計算中心都在嘗試或者已經使用容器技術. 未來更多可能是跟虛擬化融合.主體計算肯定會在容器中.

面向交付.

docker基于進程. 他發布出去后用戶面對的也是進程入口. 這樣的交付方式革命性的變化. 舉個例子. 我要安裝jira. 傳統的方法是安裝服務器, 安裝tomcat, 下載jira. 配置jira,啟動jira. 而在docker中. 所有過程就是一個docker run xxx/jira一行命令即可搞定. 其他軟件也是如此. 它是面向交付的.比如復雜的ELK, 也只是幾個命令就可以搭建起來. 很多細節都被封裝起來了.

環境版本化管理.

新老版本更新的時候, 對于一家公司同時維護一套環境我覺得已經很吃力了.更別提是維護兩套新老版本的環境. 這在測試中是很需要的. 但是維護起來卻復雜. 環境大家要搶著用. 用壞了還得修復. 新老版本重新搭建費時費力. 架構復雜等都在制約QA. 而docker把持續交付變成了現實, 而且還大大的擴展了概念. 利用docker. 同時維護起來很多套完全不同環境不同分支的環境.

阻力

在推動docker使用的過程中 我收到了很多的阻力.
首先是我們的COO反對. 他是行業的一個大牛. 他推薦我使用vagrant來管理環境. 因為這個方案是成熟的. 支持所有平臺. 支持多種虛擬化技術. 甚至還支持docker. 但是我發現vagrant的能力docker正在慢慢的具備完善, 而且更方便. 所以我沒有用vagrant
第二個反對的是研發總監. 研發總監認為docker太超前了, 有技術風險. 經過對docker的摸索, 也發現的確是很多坑.不過COO和研發總監對我還是相對開放. 說你搞定就行. 他們要效果. 所以我得以繼續的改進docker的應用方案.
第三個反對的是我們的測試經理. 他認為docker太超前, 還不成熟. 在我剛開始應用docker的時候, 的確一開始因為研發的架構有問題, 導致docker應用出現了一些問題. 比如研發的數據庫在不同的分支上是不一樣的. 這就需要數據庫也要版本化和自動化. 前期沒考慮到數據庫的問題, 所以docker搭建出來的環境偶爾會有問題,導致測試經理覺得docker很不靠譜. 后來我發現了問題的根源并解決掉就沒事了 到目前為止, 我們的測試經理仍然不信任. 他自己也單獨維護了一套自動化腳本.

收益

前面介紹的docker后兩大優點讓我們公司受益很大. 我們的研發模式是分支開發主干發布. 這就意味著同時會有很多分支在進行開發測試. 共用一套環境很容易出錯. 也存在資源爭搶. 就是部署多套更新維護也很費勁.我的做法如下
1. 用docker實現環境的自動化部署.
2. 搭建一個每日構建的環境. 基于要發布的master分支
3. 對同時在開發的各個分支分別根據需要構建特定分支的環境.
4. 研發和測試通過jenkins上的一個job自動構建環境. 構建的時候需要協商不同模塊的分支. 然后一個定制化的環境就出來了

這樣環境的管理就變的非常有趣了, 環境開始跟代碼一樣進入了版本化管理了時代..
主干版本的環境一直存在. 每日構建. 構建的時候對環境建立一個tag標記. 可以跟研發的commit保持一致.
其他人測試只需要在自己的機器上動態的生成新環境即可.
每個人都有自己的一套或者多套環境.
docker可以隨時決定啟動某個老版本的環境進行驗證. 也可以決定啟動兩個不同分支的環境進行對比.

我搭建了一個docker distribution. 也就是原來的docker registry. 公司內任何人都是隨時利用docker命令直接同步完整的過去并啟動使用

對于docker,我也很開放. 我告訴所有人, 不管我們用不用docker, OneAPM的客戶很多已經開始用docker了, 他們希望我們的監控產品可以支持docker. 甚至在docker里面運行, 所以docker本身就是我們應該測試的一種場景.
最重要的是, 我們要觀察docker和傳統環境管理兩條路的效果, 讓組員去選擇他們喜歡的技術體系. 經過不斷的觀察和驗證, 我發現在使用了docker之后組內的人都傾向于用docker. 至于研發, 則是強烈贊同用docker. 研發還想上Mesos管理, 這次則是輪到我反對了, 我覺得目前整個公司都還剛用上docker, 很多人還沒概念, 不要走的太超前....
說話的時候我都感覺到我也快成了一種阻礙生產力發展的因素了.

現狀

目前我仍然在不斷的研究如何讓docker跟持續交付, 環境版本化, 甚至是更多的測試技術融合在一起 ,比如新老版本的變更diff, 問題自動定位. 數據庫和接口diff測試. 以及新老版本的性能對比等. 我總體很看好docker的發展.

docker的最新現狀

  1. docker已經支持windows, 微軟已經發布了支持IIS的docker
  2. docker已經在所有大公司里面都開始用起來了, 目前主要是運維.
  3. 原來越多的產品在使用docker作為發布方式
  4. Jenkins+mesos+docker已經成為新一代的架構選型.



此處開始是原來的水貼。。。

這幾天在嘗試用 docker 來配置 appium 源碼環境和 ELK,雖然還沒完成,但感受到了一些 docker 的特點,覺得挺不錯的,在這里分享一下。

這個純屬水貼,主要是讓對 docker 沒有了解的人了解一下 docker 是神馬,關于 docker 的原理及深入了解請查看 docker 官方網站的介紹

什么是 docker

docker 是一種基于 linux 容器技術的虛擬化技術。相比虛擬機,容器虛擬化減少了操作系統這個龐大的部分,但相應地,它只能運行 Linux 上的程序。

虛擬技術早就有了,但為何現在 docker 能如此流行

在 docker 出來之前,我們用的虛擬化技術主要是虛擬機。對于個人用途,虛擬機已經能滿足大部分需要了。但當遇上需要配置大量虛擬機的環境時,虛擬機就顯得比較臃腫了。

下面我們看看在 windows 下用 docker 和用虛擬機搭建一個基于 Ubuntu 的 LAMP 服務器有什么不同:

虛擬機:

  1. 安裝虛擬機軟件,如 Virtualbox
  2. 建立一個虛擬機,在里面安裝 Ubuntu 系統
  3. 安裝 apache
  4. 安裝配置 MySql
  5. 安裝配置 PHP

Docker:

  1. 安裝虛擬機軟件 boot2docker
  2. 安裝 docker
  3. 使用docker run -d -p 80:80 -p 3306:3306 tutum/lamp下載并啟動 LAMP

使用 Docker ,你節省了:

  1. 數百兆甚至 1G 的空間
  2. 虛擬機的安裝鏡像(某些時候獲取這些鏡像所花的時間很可觀)
  3. 一個完整的 Ubuntu 系統

所以,docker 相比虛擬機,最大的優勢在于快速部署和使用,同時由于 docker 不是完整的虛擬機,它的開啟和關閉速度要比虛擬機快的多(一般 10s 內)。

除此之外呢?

Docker 把容器鏡像做成了類似代碼庫的形式,并把它們放到 DockerHub 上供所有人自由下載。從此之后,部署服務器環境變成了在 DockerHub 上尋找合適的鏡像并下載使用,我們再也不用按著各種官方文檔來慢慢配置服務器啦。

悄悄告訴你: Docker 還支持版本管理呢。

這么好的東西為啥我們都沒怎么用過?

是的,對各種環境部署來說, Docker 是一個好東西。但對于對運維領域接觸較少的人,沒用過 docker 是正常的。因為 docker 運行的程序都沒有 GUI 界面,而且 docker 只能運行基于 Linux 的程序(感謝思寒補充,docker 也可以運行 .net 程序,詳細請看 Running ASP.NET 5 applications in Linux Containers with Docker)。在這個操作系統界面還要比顏值的時代,沒有圖形化界面的虛擬化技術普羅大眾怎么會感興趣呢?

 本文由用戶 e2ex 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!