Docker這個新軟體究竟是用來幹嘛的???

2021-09-08 05:29:05 字數 3077 閱讀 7546

嘗試新軟體

對開發者而言,每天會催生出的各式各樣的新技術都需要嘗試,然而開發者卻不太可能為他們一一搭建好環境並進行測試。時間非常寶貴,正是得益於 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  即可獲取示例檔案中的 posts 段,這樣在後端沒有開發完 api 的時候,前端一樣可以進行協同開發。

技術的創新

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

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

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

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

docker 前景很明確,採用 docker 只會讓開發變得更方便。

Linux打假,究竟是誰在製造新的認識誤區?

昨日傍晚,拜讀 糾正 linux 認識誤區 簡稱 誤區 奇文,有感。我認為,國產 linux 的一切 邪道怪論 的總根子就源於此文的論點。何故也?根據國際維基 wiki 大百科全書 from wikipedia 所謂 linux 發行版是指 一類建立在 linux 核心上的類 unix linux ...

軟體開發究竟是簡單的還是複雜的

軟體開發是個奇妙的行業。你可以說它複雜,但與此同時,隨便有個人,只要接受點培訓就可以做軟體開發。你也可以說它簡單,但據統計世界上一半以上的軟體專案會以失敗收場。強調軟體複雜的最有代表性的觀點來自 人月神話 brooks認為複雜性是軟體的根本特質,而非偶然特質。強調軟體簡單性的觀點則時見於國內某些mi...

我用宮保雞丁告訴你,IT男究竟是如何被外行逼瘋的

在it這個行業,程式設計師似乎總是會被不懂程式的人逼瘋,這些人包括了你的產品經理 你的客戶以及什麼相親物件或者七大姑八大姨這些。特別是產品經理,和程式設計師們接觸的最多,網上黑他們的段子也最多,似乎程式設計師最大的敵人就是產品經理。產品經理不僅可能在一天之內改三遍需求,還可能放下一句話 這個應該很簡...