1. 程式人生 > >對Docker的簡單理解

對Docker的簡單理解

detail gis 用戶 services red 標準 產生 rose 筆記本

Docker是什麽?

Docker的思想來自於集裝箱,集裝箱解決了什麽問題?在一艘大船上,可以把貨物規整的擺放起來。並且各種各樣的貨物被集裝箱標準化了,集裝箱和集裝箱之間不會相互影響。那麽就不需要專門運送水果的船,也不需要專門運送化學品的船。只要這些貨物在集裝箱裏封裝的好好的,那麽就可以一艘大船把他們都運走。

Docker就是類似的理念。現在都流行雲計算了,雲計算就好比大貨輪。docker就是集裝箱。

1.不同的應用程序可能會有不同的應用環境,比如.net開發的網站和php開發的網站依賴的軟件就不一樣,如果把他們依賴的軟件都安裝在一個服務器上就要調試很久,而且很麻煩,還會造成一些沖突。比如IIS和Apache訪問端口沖突。這個時候就要隔離.net開發的網站和php開發的網站。常規來講我們可以在服務器上創建不同的虛擬機,在不同的虛擬機上放置不同的應用,但是虛擬機開銷比較高。Docker可以是寫虛擬機隔離應用環境的功能,並且開銷比虛擬機小,小就意味著省錢了。

2.開發軟件的時候用的是Ubuntu,但是運維管理的都是centos,運維在把你的軟件從開發環境轉移到生產環境的時候會遇到一些問題,比如有個特殊版本的數據庫,只有Ubuntu支持,centos不支持,在轉移的過程中就得想辦法解決這樣的問題。這時候Docker就可以把開發環境直接封裝轉移給運維,運維直接部署給他的docker就可以的,而且部署速度極快。

3.在服務器負載方面,如果單獨開一個虛擬機,那虛擬機就會占用空閑內存,docker部署的話,這些內存就會利用起來。

開發者可以使用Docker做什麽?

Docker並不在乎你的應用程序是什麽,做什麽,Docker提供了一組應用打包、傳輸和部署的方法,以便能更好的在容器內運行任何應用。

1.嘗試新軟件

對開發者而言,每天會催生出的各式各樣的新技術都需要嘗試,然而開發者卻不太可能為他們一一搭建好環境並進行測試。時間非常寶貴,正是得益於 Docker,讓我們有可能在一條或者幾條命令內就搭建完環境。Docker 有一個傻瓜化的獲取軟件的方法,Docker 後臺會自動獲得環境鏡像並且運行環境。
並不僅僅是新技術環境搭建用得到 Docker。如果你想快速在你的筆記本上運行一個 MySQL 數據庫,或者一個 Redis 消息隊列,那麽使用 Docker 便可以非常容易地做到。例如 Docker 只需要一條命令便可以運行 MySQL 數據庫:docker
run -d -p 3306:3306 tutum/mysql。
譯者註:雖然使用命令也能非常快地安裝 MySQL 數據庫,但是當用到最新的技術或者非常復雜的技術時,使用 Docker 便會是個非常好的選擇,例如 Gitlab,普通用戶大概需要一天的時間去搭建 Gitlab 平臺,而 Docker 則只需要一條命令

2.進行演示

現在我經常需要在周末用自己開發的成果對客戶活著別人做一兩個演示。搭建演示環境的過程非常麻煩。現在我發現 Docker 已經成為我演示這些工具的最合理的方式。同時,對於客戶來說,我可以直接將 Docker 鏡像提供給他們,而不必去做任何環境配置的工作,工作的效果也會和在他們演示中所看到的一模一樣,同時不必擔心他們的環境配置會導致我們的產品無法運行。


3.避免“我機器上可以運行”

無論是上一篇介紹的企業部署 Docker 還是本文的個人 Docker 用例,都提到了這個情況。因為環境配置不同,很多人在開發中也會遇到這個情況,甚至開發的軟件到了測試人員的機器上便不能運行。但這都不是重點。重點是,如果我們有一個可靠的、可分發的標準開發環境,那麽我們的開發將不會像現在這麽痛苦。Docker 便可以解決這個問題。Docker 鏡像並不會因為環境的變化而不能運行,也不會在不同的電腦上有不同的運行結果。可以給測試人員提交含有應用的 Docker 鏡像,這樣便不再會發生“在我機器上是可以運行的”這種事情,很大程度上減輕了開發人員測試人員互相檢查機器環境設置帶來的時間成本。
另一個 Docker 可以發揮用處的地方是培訓班。除了 Docker 容器的隔離性之外,更能體會到 Docker 優勢的地方在於環境搭建。培訓班的新手每個人都要在環境搭建上花費很多時間,但是如果在這裏應用到 Docker 的話,那麽我們只需要把標準的運行環境鏡像分發下去,然後就可以開始上課了。使用 Docker 和使用虛擬機一樣簡單,但是 Docker 要更方便、更輕量級。同時,我們也可以告訴學員:“在培訓的同時,我們還將學到當下最流行的技術——Docker”,這種雙贏的結局,何樂而不為呢。

4.學習 Linux 腳本

當然這個原因看起來可能很奇怪,但是對不不熟悉 Linux 操作系統和 Shell 腳本的人來說,確實是一個好機會。即便本文並不是在講 Linux,Linux 的重要度仍然不言而喻。如果你用的是 Windows,那麽我給你一個建議:從雲主機提供商那兒租用一臺雲主機:我推薦使用 CoreOS 系統的雲主機。雖然這樣並不會讓你成為專業的 Linux 運維,但是可以讓你快速地學到 Linux 基礎知識,愛上命令行操作,並且慢慢開始熟悉和欣賞 Linux

5.更好地利用資源
虛擬機的粒度是“虛擬出的機器”,而 Docker 的粒度則是“被限制的應用”,相比較而言 Docker 的內存占用更少,更加輕量級。
對我來說這是 Docker 的一個優勢:因為我經常在自己電腦中運行多個 Docker 應用,使用 Docker 比使用虛擬機更加簡單,方便,粒度更細,也能持續地跟蹤容器狀態。

6.為微服務定制

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

7.在雲服務提供商之間移植

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

8.API 端

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

9.其他
還有兩個技巧可以分享給你們。在學習 Docker 的過程中因為有了這兩個的幫助,我才得意不斷地提升自己。
一:Docker Hub Registry。這是 Docker 的官方鏡像倉庫,除了托管著 Docker 官方的鏡像外,和 Github 一樣,你可以在上面上傳自己的鏡像,也可以在上面搜尋其他有用的鏡像,極大地節省自己的時間。例如 Oracle-XE-11g 鏡像,所有的一切都是現成的,完全不需要自己去下載 Oracle XE 11g 安裝。這樣為你和團隊節約了大量的時間成本。
如果你不太確定的話,可以去 Docker Hub 上搜有一下有沒有自己用得到的鏡像。大部分情況下你所需要的鏡像在 Docker Hub 上都已經有人構建了。
二:多參考 IaaS 供應商的新聞,雖然我們不能像在他們會議室裏那樣完全了解他們的公司動態,但是仍然可以從新聞中可以了解到 Docker 最新的發展方向和技術趨勢。可以肯定的是,容器化技術是未來的熱點,我們不僅可以在本機運行 Docker,不僅僅在一家雲服務提供商的主機上運行 Docker,未來所有的雲服務提供商都會支持 Docker。
Docker 前景很明確,采用 Docker 只會讓開發變得更方便。


摘自:https://blog.csdn.net/qq_37788081/article/details/79044119,感謝作者,讓我一下子就理解了Docker是什麽,Docker能做什麽

對Docker的簡單理解