天天看點

Docker是用來幹什麼的?

Docker目前隻能在Linux下運作

下面的例子我自己經常使用,當然你有更好的案例也可以分享給我。

嘗試新軟體

對開發者而言,每天會催生出的各式各樣的新技術都需要嘗試,然而開發者卻不太可能為他們一一搭建好環境并進行測試。時間非常寶貴,正是得益于 Docker,讓我們有可能在一條或者幾條指令内就搭建完環境。Docker 有一個傻瓜化的擷取軟體的方法,Docker 背景會自動獲得環境鏡像并且運作環境。

并不僅僅是新技術環境搭建用得到 Docker。如果你想快速在你的筆記本上運作一個 MySQL 資料庫,或者一個 Redis 消息隊列,那麼使用 Docker 便可以非常容易地做到。例如

Docker 隻需要一條指令便可以運作 MySQL 資料庫:

docker run -d -p 3306:3306 tutum/mysql。

譯者注:雖然使用指令也能非常快地安裝 MySQL 資料庫,但是當用到最新的技術或者非常複雜的技術時,使用 Docker 便會是個非常好的選擇,例如 :

事件 普通使用者 Docker使用者
安裝Gitlab 一天 一條指令

進行示範

現在我經常需要在周末用自己開發的成果對客戶活着别人做一兩個示範。搭建示範環境的過程非常麻煩。現在我發現 Docker 已經成為我示範這些工具的最合理的方式。

對于客戶來說,我可以直接将 Docker 鏡像提供給他們,而不必去做任何環境配置的工作,工作的效果也會和在他們示範中所看到的一模一樣,同時不必擔心他們的環境配置會導緻我們的産品無法運作。

避免“我機器上可以運作”(而别人的機器不可以)

無論是上一篇介紹的企業部署 Docker 還是本文的個人 Docker 用例,都提到了這個情況。因為環境配置不同,很多人在開發中也會遇到這個情況,甚至開發的軟體到了測試人員的機器上便不能運作。但這都不是重點。重點是,如果我們有一個可靠的、可分發的标準開發環境,那麼我們的開發将不會像現在這麼痛苦。Docker 便可以解決這個問題。Docker 鏡像并不會因為環境的變化而不能運作,也不會在不同的電腦上有不同的運作結果。可以給測試人員送出含有應用的 Docker 鏡像,這樣便不再會發生“在我機器上是可以運作的”這種事情,很大程度上減輕了開發人員測試人員互相檢查機器環境設定帶來的時間成本。

另一個 Docker 可以發揮用處的地方是教育訓練班。除了 Docker 容器的隔離性之外,更能體會到 Docker 優勢的地方在于環境搭建。教育訓練班的新手每個人都要在環境搭建上花費很多時間,但是如果在這裡應用到 Docker 的話,那麼我們隻需要把标準的運作環境鏡像分發下去,然後就可以開始上課了。使用 Docker 和使用虛拟機一樣簡單,但是 Docker 要更友善、更輕量級。同時,我們也可以告訴學員:“在教育訓練的同時,我們還将學到當下最流行的技術——Docker”,這種雙赢的結局,何樂而不為呢。

更好地利用資源

虛拟機的粒度是“虛拟出的機器”,而 Docker 的粒度則是“被限制的應用”,相比較而言 Docker 的記憶體占用更少,更加輕量級。

對我來說這是 Docker 的一個優勢:因為我經常在自己電腦中運作多個 Docker 應用,使用 Docker 比使用虛拟機更加簡單,友善,粒度更細,也能持續地跟蹤容器狀态。

為微服務定制

如果你一直在關注科技新聞的話,那麼你應該聽說過“微服務(Microservices)”的概念。Docker 可以很好地和微服務結合起來。從概念上來說,一個微服務便是一個提供一整套應用程式的部分功能,Docker 便可以在開發、測試和部署過程中一直充當微服務的容器。甚至生産環境也可以在 Docker 中部署微服務。

在雲服務提供商之間移植

大多數的雲主機提供商已經全面支援 Docker。對于開發人員來說,這表示你可以很友善地切換雲服務提供商,當然也可以很友善地将你本地的開發環境移動到雲主機上,不需要本地上配置一次運作環境、在雲主機上還配置一次運作環境。全面部署 Docker (Docker here and Docker there) 作為标準運作環境可以極大地減輕應用上線時的工作量和産生 BUG。

API 端

API 是應用之間的粘合劑,一個合格開發者肯定使用過别人提供的 REST API,或者自己開發過 REST API。需要指出的是,無論是用戶端還是 API 提供端,在開發之前都需要先定義一組公共的 API 接口,寫成文檔,然後才能進行編碼。如果服務端和用戶端是共同開發的話,那麼服務端通常會先實作能傳回固定字元串的 API 接口,在以後的開發中再慢慢去實作 API 的功能。

雖然有人會認為在這裡 Docker 被濫用了,完全可以用 sample.json 這種檔案去實作虛拟 API,但是下面有個執行個體可以更好地解決前後端分離開發時的 API 問題。

為了更好地解釋我的意思,給大家提供一個執行個體:JSON Server,一個用于提供 JSON 資料的 REST API。使用過這個容器的人就會知道,既然有這麼好用的 Docker JSON Server,我們沒有理由不用 Docker。

譯者注:

運作示例的 JSON Server,同時使用示例中提供的 JSON 檔案,隻需執行一條指令便可以建立一個服務端的 API 應用。

使用 curl http://127.0.0.1:80/posts 即可擷取示例檔案中的 posts 段,這樣在後端沒有開發完 API 的時候,前端一樣可以進行協同開發。

技術的創新

這點應該算不上是用例,但是我還是來寫一下。Docker 正在快速發展,工具也在不斷更新,沒有人能預見到未來 Docker 會是什麼樣子的。你在複雜的系統中 Docker 使用的越多,越是可能會發現技術上的空白和未來技術發展的方向。現在還處在 Docker 的發展期,任何你使用 Docker 建立的工具都有可能成為社群關注的熱點。這是 Docker 的機會,也是成就你自己的機會。

其他

還有兩個技巧可以分享給你們。在學習 Docker 的過程中因為有了這兩個的幫助,我才得意不斷地提升自己。

一:Docker Hub Registry。這是 Docker 的官方鏡像倉庫,除了托管着 Docker 官方的鏡像外,和 Github 一樣,你可以在上面上傳自己的鏡像,也可以在上面搜尋其他有用的鏡像,極大地節省自己的時間。例如 Oracle-XE-11g 鏡像,所有的一切都是現成的,完全不需要自己去下載下傳 Oracle XE 11g 安裝。這樣為你和團隊節約了大量的時間成本。

如果你不太确定的話,可以去 Docker Hub 上搜有一下有沒有自己用得到的鏡像。大部分情況下你所需要的鏡像在 Docker Hub 上都已經有人建構了。

二:多參考 IaaS 供應商的新聞,雖然我們不能像在他們會議室裡那樣完全了解他們的公司動态,但是仍然可以從新聞中可以了解到 Docker 最新的發展方向和技術趨勢。可以肯定的是,容器化技術是未來的熱點,我們不僅可以在本機運作 Docker,不僅僅在一家雲服務提供商的主機上運作 Docker,未來所有的雲服務提供商都會支援 Docker。

Docker 前景很明确,采用 Docker 隻會讓開發變得更友善。

原文連結:dockone.io/article/378