大數據用 Docker 和火星上種土豆一樣靠譜!

jopen 9年前發布 | 15K 次閱讀 Docker

三十年后,當馬特·達蒙回憶起自己波瀾壯闊的一生,最令他回味的,也許不是參加了諾曼底灘頭的迷茫戰斗《拯救大兵瑞恩》,不是在失憶的驚惶中流亡天涯《諜影重重》,也不是冰天雪地里 30 多年的春秋大夢《星際穿越》,而是紅色星球上種土豆的日子《火星救援》。

大數據用 Docker 和火星上種土豆一樣靠譜!

??

據說,空間站宇航員已經食用過了太空生長的萵苣。 NASA 一位植物學家也稱,人類可以在火星上栽種土豆,而且可種植的不止土豆一種。 2014 年,荷蘭就有一群好奇的科學家,已經在模擬月球土和模擬火星土上,種植了西紅柿、胡蘿卜、小麥等 14 種農作物。

所以,那個 15 歲起就被美國國家實驗室聘為軟件工程師的『太空宅男』安迪·威爾,即使寫小說,也是很靠譜的!

看完『火星救援』,今年值得期待的科幻大片就剩『星戰 7 』了。

大數據用 Docker 和火星上種土豆一樣靠譜!

據說『星戰 7 』在北美的預售票房就超過了 5000 萬美元, 70%都是 18-49 歲的男粉絲,平均年齡在 34 歲, 67%的人都會在上映一周之內就去一睹為快……

以上這些數據都是由一家叫 Movio 的公司發布的, Movio 是干嘛的呢?

Movio 主要有兩個產品, Movio Cinema 和 Movio Media , Movio Cinema 主要和各大影院合作(已經覆蓋了北美 52%的熒幕,全球 24.5%),通過大數據分析為影院的顧客提供個性化的服務; Movio Media 則主要服務于電影的制造商和發行商,利用 Movio Cinema 上收集到的數據,為制片商和發行商提供有效建議。總之就是一家立志用大數據分析和互聯網改變電影產業的公司。

大數據用 Docker 和火星上種土豆一樣靠譜!

而 Movio 正是 Docker 的重度用戶。 Movio 為了使其代碼能在日益復雜的同時,保持彈性擴展,開始采用微服務架構和 Docker 。以下內容來自 Movio 的技術博客,主要講述了其如何在開發環境中使用 Docker 。

大數據用 Docker 和火星上種土豆一樣靠譜!

Docker 將應用封裝在一個『完全的』 OS 環境中,并運行在一個容器里。容器和虛擬機很類似,但是更像物理機:比如,內存并不是提前分配給容器的,需要容器向主機動態申請。

使用容器意味著庫依賴( Library dependencies )可以獨立于主機系統,被提前安裝好。其它的依賴,比如配置文件也可以被提前配置好默認值,并放在合適的位置。有了 Docker 就相當于每個應用,不管在任何操作系統中,都能有一套標準的環境以相同的方式運行起來。主機操作系統中安裝的庫( Library )和軟件包( package )不會影響到應用,因為這些應用是相互獨立的。

Docker 在 Movio 的開發過程中主要是這么用的:

Run anywhere

程序猿們對 OS X 和 Linux 多個發行版可謂各有所愛,由此造成的開發環境不統一問題,是非常痛苦的。而應用運行在容器中,意味著每個人都能依賴于相同的配置。而當你需要一些個性化配置時,也可以在啟動容器時設置參數。

比如,你可以在容器外掛載一個 volume ,存儲容器過程中產生的數據。比如,你有一個數據庫容器,你希望這個容器停止或被刪除后,其中的數據能夠保存下來。

靈雀云也提供了持久化存儲服務,將云存儲抽象成最直觀的存儲卷,可以直接掛在容器上,就像本地操作 Docker 的存儲卷一樣方便。在存儲卷基礎上,為了進一步提升數據的持久性,靈雀云還提供“存儲卷備份”,可用于抓取存儲卷閃照并進行保存。

方便各個組件間的集成

如果你有一個微服務,需要和另外一個小組維護的微服務做集成,運行 docker pull 就可以將那個微服務下載到在你的環境上,都不用擔心環境依賴的問題。

這個過程完全復制了各個服務在生產環境中的交互,這也使得我們相信在測試環境中看到的結果,會被完全地反映到生產環境中。

靈雀云支持多容器發布管理,與 docker-compose 兼容,可通過 YAML 文件描述應用的容器組件,以及容器間的依賴,并一鍵部署完整的多容器應用。

可組合的 Docker 鏡像

基于此,可以簡單地復用之前做過的工作,我們有一系列的核心的基礎鏡像,同時也意味著我們的鏡像都基于相同的基礎。同時,各個組之間也可以復用鏡像。

Docker 鏡像是分層管理的,每個部分都被實現為其中一層,并且可以共享 base 層,帶來的好處有 2 個:減小了 Docker 庫的,縮短了下載新鏡像所用的時間。

靈雀云提供高性能本地 Registry 服務用于創建私有、公有鏡像倉庫,并提供上傳、下載、構建及托管的全方位鏡像服務。

加強開發、測試和運維的協作

用了 Docker 后,開發人員會更具有全局思維,他們會有意識地去思考在開發環境之外,運行這個應用還有哪些需要。

而測試環境將是生產環境的復制,并且是標準化的,因為 Docker 鏡像都是標準化的, pull 下來就能馬上運行起來,不需要再根據文檔一步步地配置。

Docker 帶來的挑戰

Docker 的實現機制也意味著會有很多的基礎鏡像依賴。例如,我們有一個 Clojure 寫的微服務,它是基于 Clojure 鏡像構建的,但 Clojure 鏡像又是基于 Java 鏡像構建的, Java 鏡像又要基于一個通用的基礎鏡像。一旦這個基礎鏡像發生了改變,所有的中間鏡像都要重新 build ,這無疑增加了額外的開銷。

由于 Docker 是基于 Linux 內核的,在 OS X 系統上就需要在虛擬機中運行一個 Linux 的操作系統。官方的工具是基于 VisualBox 的,文件和文件夾要先 mount 到 VM 上,再 mount 到 Docker 容器,盡管這個工具可以自動做到這些,但是 chown 和 chmod 的操作無法工作。

OS X 中文件名是不區分大小寫的,但是大部分 Linux 系統都是區分的。如果不正確的命名恰好在掛載路徑中出現,就會找不到這個路徑。

以上這些挑戰是在本地主機環境中使用 Docker 會遇到的問題,如果使用 CaaS 服務,比如靈雀云都可以避免以上的問題,將您的精力放到核心業務上,同時享受 Docker 帶來的諸多好處!

總結

在使用 Docker 的初期,肯定會有一個學習曲線,但是總體來說, Docker 確實提高了我們的生產效率。在以往,新員工入職需要數天才能配置好本地環境,并且一直會被環境問題所困擾。有了 Docker ,生產環境對本地環境的依賴變得很小。隨著我們的發展,這種效率的提升變得越來越明顯。

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