docker簡介(一)

1,什麼是docker

        Docker是一個開源項目,誕生於2013年初,最初是dotCloud公司內部的一個業餘項目。它基於Google公司推出的Go語言實現。項目後來加入了Linux基金會,遵從了Apache2.0協議,項目代碼在GitHub上進行維護。Docker自開源後受到廣範的關注和討論,以至於dotCloud公司後來都改名爲Docker IncRedHat已經在其RHEL6.5中集中支持Docker;Google也在其PaaS產品中廣泛應用。Docker的目標是實現經量級的操作系統虛擬化解決方案。Docker的基礎是Linux容器(LXC)等技術。在LXC的基礎上Docker進行了進一步的封裝,讓用戶不需要關心容器的管理,使得操作更加簡單。用戶操作Docker的容器就像操作一個快速輕量級的虛擬機一樣簡單。

        下圖比較了Docker和傳統虛擬化方式的不同之處,可見容器是在操作系統層面上實現的虛擬化,直接複用本地主機的操作系統,而傳統方式則是在硬件層現實現


2docker的設計思想

        Docker的思想來自於集裝箱,集裝箱解決了什麼問題?在一艘大船上,可以把貨物規整的擺放起來。並且各種各樣的貨物被集裝箱標準化了,集裝箱和集裝箱之間不會互相影響。那麼我就不需要專門運送水果的船和專門運送化學品的船了。只要這些貨物在集裝箱裏封裝的好好的,那我就可以用一艘大船把他們都運走。docker就是類似的理念。現在都流行雲計算了,雲計算就好比大貨輪。docker就是集裝箱。

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

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

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

總之docker就是集裝箱原理。

 


3,爲什麼要使用docker

        作爲一種新興的虛擬化方式,Docker 跟傳統的虛擬化方式相比具有衆多的優勢。首先,Docker 容器的啓動可以在秒級實現,這相比傳統的虛擬機方式要快得多。其次,Docker 對系統資源的利用率很高,一臺主機上可以同時運行數千個Docker 容器。

容器除了運行其中應用外,基本不消耗額外的系統資源,使得應用的性能很高,同時系統的開銷儘量小。

傳統虛擬機方式運行10 個不同的應用就要起10 個虛擬機,而Docker 只需要啓動10 個隔離的應用即可。具體說來,Docker 在如下幾個方面具有較大的優勢。

1,更快速的交付和部署

對開發和運維(devop)人員來說,最希望的就是一次創建或配置,可以在任意地方正常運行。開發者可以使用一個標準的鏡像來構建一套開發容器,開發完成之後,運維人員可以直接使用這個容器來部署代碼。Docker 可以快速創建容器,快速迭代應用程序,並讓整個過程全程可見,使團隊中的其他成員更容易理解應用程序是如何創建和工作的。Docker 容器很輕很快!容器的啓動時間是秒級的,大量地節約開發、測試、部署的時間.

2,更輕鬆的遷移和擴展

Docker 容器幾乎可以在任意的平臺上運行,包括物理機、虛擬機、公有云、私有云、個人電腦、服務器

等。這種兼容性可以讓用戶把一個應用程序從一個平臺直接遷移到另外一個。

3,更簡單的管理

使用Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分發和更新,從而實現自動化並且高效的管理。對比虛擬機


3docker的侷限性

  1. Docker是基於Linux 64bit的,無法在32bitlinux/Windows/unix環境下使用
  2. LXC是基於cgrouplinux kernel功能的,因此containerguest系統只能是linux base
  3. 隔離性相比KVM之類的虛擬化方案還是有些欠缺,所有container公用一部分的運行庫
  4. 網絡管理相對簡單,主要是基於namespace隔離
  5. cgroupcpucpuset提供的cpu功能相比KVM的等虛擬化方案相比難以度量(所以dotcloud主要是按內存收費)
  6. Dockerdisk的管理比較有限
  7. container隨着用戶進程的停止而銷燬,container中的log等用戶數據不便收集

4docker在開發、測試、部署中的定位

1,嘗試新軟件

對開發者而言,每天會催生出的各式各樣的新技術都需要嘗試,然而開發者卻不太可能爲他們一一搭建好環境並進行測試。時間非常寶貴,正是得益於 Docker,讓我們有

可能在一條或者幾條命令內就搭建完環境。Docker 有一個傻瓜化的獲取軟件的方法,Docker 後臺會自動獲得環境鏡像並且運行環境。

並不僅僅是新技術環境搭建用得到 Docker。如果你想快速在你的筆記本上運行一個 MySQL 數據庫,或者一個 Redis 消息隊列,那麼使用 Docker 便可以非常容易地做到。例如 Docker 只需要一條命令便可以運行 MySQL 數據庫:docker run -d -p 3306:3306 tutum/mysql

2,進行演示

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

3,避免我機器上可以運行

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

4,更好地利用資源

虛擬機的粒度是虛擬出的機器,而 Docker 的粒度則是被限制的應用,相比較而言 Docker 的內存佔用更少,更加輕量級。對我來說這是 Docker 的一個優勢:因爲在如果在電腦中運行多個 Docker 應用,使用 Docker 比使用虛擬機更加簡單,方便,粒度更細,也能持續地跟蹤容器狀態。

5,爲微服務定製

我們一直在講微服務(Microservices的概念。Docker 可以很好地和微服務結合起來。從概念上來說,一個微服務便是一個提供一整套應用程序的部分功能,Docker 便可以在開發、測試和部署過程中一直充當微服務的容器。甚至生產環境也可以在 Docker 中部署微服務。

6,在雲服務提供商之間移植

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

7,技術的創新

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章