有些開發者可能還是不明白 docker 對自己到底有多大的用處,因此翻譯 docker 個人用例 這篇文章中來介紹 docker 在普通開發者開發過程中的用例。
docker 如今贏得了許多關注,很多人覺得盛名之下其實難副,因為他們仍然搞不清 docker 和普通開發者到底有什麼關係。許多開發者覺得 docker 離自己很遠,docker 是生產環境中的工具,和自己無關。我也是花了很長時間才想清楚作為普通開發人員如何在自己的開發中使用 docker。坦率地說,我仍處在學習的過程中。
這篇文章提供了乙個 docker 用例列表,我希望它能更好地幫助你理解 docker 並引發你的思考。本文只是描述 docker 在普通開發者日常的應用,並不提供完整的解決方案。
在介紹用例之前,我希望你能先記住這句話:「docker 是乙個便攜的應用容器」。你可以不知道 docker 所說的的「可攜式容器」到底是什麼意思,但是你必須清楚 docker 在日常中能帶來非常大的效率提公升。
當你需要在容器內執行自己的應用(當然可以是任何應用),docker 都提供了乙個基礎系統映象作為執行應用時的基礎系統。也就是說,只要是 linux 系統上的應用都可以執行在 docker 中。
可以在 docker 裡面執行資料庫嗎?當然可以。
可以在 docker 裡面執行 node.js **伺服器嗎?當然可以。
可以在 docker 裡面執行 api 伺服器嗎?當然可以。
docker 並不在乎你的應用程式是什麼、做什麼,docker 提供了一組應用打包、傳輸和部署的方法,以便你能更好地在容器內執行任何應用。
下面的例子我自己經常使用,當然你有更好的案例也可以分享給我。
嘗試新軟體
對開發者而言,每天會催生出的各式各樣的新技術都需要嘗試,然而開發者卻不太可能為他們一一搭建好環境並進行測試。時間非常寶貴,正是得益於 docker,讓我們有可能在一條或者幾條命令內就搭建完環境。docker 有乙個傻瓜化的獲取軟體的方法,docker 後台會自動獲得環境映象並且執行環境。
並不僅僅是新技術環境搭建用得到 docker。如果你想快速在你的筆記本上執行乙個 mysql 資料庫,或者乙個 redis 訊息佇列,那麼使用 docker 便可以非常容易地做到。例如 docker 只需要一條命令便可以執行 mysql 資料庫:docker run -d -p 3306:3306 tutum/mysql。
譯者注:雖然使用命令也能非常快地安裝 mysql 資料庫,但是當用到最新的技術或者非常複雜的技術時,使用 docker 便會是個非常好的選擇,例如 gitlab,普通使用者大概需要一天的時間去搭建 gitlab 平台,而 docker 則只需要一條命令。
進行演示
現在我經常需要在週末用自己開發的成果對客戶活著別人做一兩個演示。搭建演示環境的過程非常麻煩。現在我發現 docker 已經成為我演示這些工具的最合理的方式。同時,對於客戶來說,我可以直接將 docker 映象提供給他們,而不必去做任何環境配置的工作,工作的效果也會和在他們演示中所看到的一模一樣,同時不必擔心他們的環境配置會導致我們的產品無法執行。
避免「我機器上可以執行」
另乙個 docker 可以發揮用處的地方是培訓班。除了 docker 容器的隔離性之外,更能體會到 docker 優勢的地方在於環境搭建。培訓班的新手每個人都要在環境搭建上花費很多時間,但是如果在這裡應用到 docker 的話,那麼我們只需要把標準的執行環境映象分發下去,然後就可以開始上課了。使用 docker 和使用虛擬機器一樣簡單,但是 docker 要更方便、更輕量級。同時,我們也可以告訴學員:「在培訓的同時,我們還將學到當下最流行的技術——docker」,這種雙贏的結局,何樂而不為呢。
學習 linux 指令碼
當然這個原因看起來可能很奇怪,但是對不不熟悉 linux 作業系統和 shell 指令碼的人來說,確實是乙個好機會。即便本文並不是在講 linux,linux 的重要度仍然不言而喻。如果你用的是 windows,那麼我給你乙個建議:從雲主機提供商那兒租用一台雲主機:我推薦使用 coreos 系統的雲主機。雖然這樣並不會讓你成為專業的 linux 運維,但是可以讓你快速地學到 linux 基礎知識,愛上命令列操作,並且慢慢開始熟悉和欣賞 linux。
更好地利用資源
虛擬機器的粒度是「虛擬出的機器」,而 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。
譯者注:
技術的創新
這點應該算不上是用例,但是我還是來寫一下。docker 正在快速發展,工具也在不斷更新,沒有人能預見到未來 docker 會是什麼樣子的。你在複雜的系統中 docker 使用的越多,越是可能會發現技術上的空白和未來技術發展的方向。現在還處在 docker 的發展期,任何你使用 docker 建立的工具都有可能成為社群關注的熱點。這是 docker 的機會,也是成就你自己的機會。
你的用例
其他
還有兩個技巧可以分享給你們。在學習 docker 的過程中因為有了這兩個的幫助,我才得意不斷地提公升自己。
如果你不太確定的話,可以去 docker hub 上搜有一下有沒有自己用得到的映象。大部分情況下你所需要的映象在 docker hub 上都已經有人構建了。
二:多參考 iaas **商的新聞,雖然我們不能像在他們會議室裡那樣完全了解他們的公司動態,但是仍然可以從新聞中可以了解到 docker 最新的發展方向和技術趨勢。可以肯定的是,容器化技術是未來的熱點,我們不僅可以在本機執行 docker,不僅僅在一家雲服務提供商的主機上執行 docker,未來所有的雲服務提供商都會支援 docker。
docker 前景很明確,採用 docker 只會讓開發變得更方便。
開發者可以使用Docker做什麼?
有些開發者可能還是不明白 docker 對自己到底有多大的用處,因此翻譯 docker 個人用例 這篇文章中來介紹 docker 在普通開發者開發過程中的用例。docker 如今贏得了許多關注,很多人覺得盛名之下其實難副,因為他們仍然搞不清 docker 和普通開發者到底有什麼關係。許多開發者覺得 ...
Docker是什麼?可以用Docker做什麼?
docker的思想來自於貨櫃,貨櫃解決了什麼問題?在一艘大船上,可以把貨物規整的擺放起來。並且各種各樣的貨物被貨櫃標準化了,貨櫃和貨櫃之間不會互相影響。那麼我就不需要專門運送水果的船和專門運送化學品的船了。只要這些貨物在貨櫃裡封裝的好好的,那我就可以用一艘大船把他們都運走。docker就是類似的理念...
Docker是什麼?可以用Docker做什麼?
docker的思想來自於貨櫃,貨櫃解決了什麼問題?在一艘大船上,可以把貨物規整的擺放起來。並且各種各樣的貨物被貨櫃標準化了,貨櫃和貨櫃之間不會互相影響。那麼我就不需要專門運送水果的船和專門運送化學品的船了。只要這些貨物在貨櫃裡封裝的好好的,那我就可以用一艘大船把他們都運走。docker就是類似的理念...