以下是個人學習過程中所記,僅作為學習經曆和備忘,有問題不負責,但可以交流和探讨。
1 什麼是Docker?
在Docker的官網,Docker的設計師們對Docker的定義是:
Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications. Consisting of Docker Engine, a portable, lightweight runtime and packaging tool, and Docker Hub, a cloud service for sharing applications and automating workflows, Docker enables apps to be quickly assembled from components and eliminates the friction between development, QA, and production environments. As a result, IT can ship faster and run the same app, unchanged, on laptops, data center VMs, and any cloud.
Docker是為開發者和系統管理者提供的一套用于建立、釋出和運作分布式應用的開放平台。它由Docker引擎(一個可移植的輕量級運作環境和打包工具)和Docker Hub(用于分享應用和提供自動化工作流的雲服務)組成。Docker可以通過元件快速地組合成應用,并且減少開放、QA和釋出環境之間的摩擦。最終,IT工程師能快速地将應用毫無更改地釋出到筆記本、資料中心的虛拟機和所有的雲環境上。
Docker是Docker.Inc公司開源的一個基于LXC技術之上建構的Container容器引擎,源代碼托管在GitHub上, 基于Go語言并遵從Apache2.0協定開源。Docker在2014年6月召開DockerConf 2014技術大會吸引了IBM、Google、RedHat等業界知名公司的關注和技術支援,無論是從 GitHub 上的代碼活躍度,還是Redhat宣布在RHEL7中正式支援Docker, 都給業界一個信号,這是一項創新型的技術解決方案。就連 Google 公司的 Compute Engine 也支援 docker 在其之上運作, 國内“BAT”先鋒企業百度Baidu App Engine(BAE)平台也是以Docker作為其PaaS雲基礎。
Docker的英文本意是“搬運工”,Docker搬運的是集裝箱(Container),集裝箱裡裝的是任意類型的App,開發者通過Docker可以将App變成一種标準化的、可移植的、自管理的元件,可以在任何主流系統中開發、調試和運作,最重要的是,它不依賴于任何語言、架構或系統。
通俗的講就是讓軟體開發人員無需關心團隊中每個人使用的作業系統,不必擔心開發環境不一樣,即開發團隊中的每一個人都有一個一模一樣的開發環境複制品,并且這個複制品是可以擴充的,這聽起來感覺很不可思議,似乎虛拟機也能夠做到,比如說VMWare、VirtualBox,裝好虛拟機,然後裝個系統,然後在系統中将開發環境搭建好後,然後将這個系統Clone給每個開發人員,這樣就做到了開發環境一模一樣了。而且可以實作多個互不影響的開發環境。
對于個人而言,如果這是個利器,那麼以後想要重裝系統什麼的,隻需要安裝上Docker,那麼在原來的系統Docker上已經配置好了的開發環境,隻需要Clone一下就OK了,這是多麼的友善,要是在開發的使用上,也沒有占用很大的記憶體,這是非常不錯的選擇。
2 Docker和虛拟機
既然虛拟機和Docker都能達到同樣的效果,那麼接下來對比下,來讓你做出一些選擇。
Docker核心是一個作業系統級虛拟化方法, 了解起來可能并不像VM那樣直覺。
從虛拟化層面來看,傳統虛拟化技術(虛拟機)是對硬體資源的虛拟,容器技術則是對程序的虛拟,進而可提供更輕量級的虛拟化,實作程序和資源的隔離。從架構來看,Docker比虛拟化少了兩層,取消了Hypervisor層和Guest OS層,使用Docker Engine進行排程和隔離,所有應用共用主機作業系統,是以在體量上,Docker較虛拟機更輕量級,在性能上優于虛拟化,接近裸機性能。從應用場景來看,Docker和虛拟化則有各自擅長的領域,在軟體開發、測試場景和生産運維場景中各有優劣。
3 Docker的應用場景?
上面說的給團隊的中每一個成員複制一份一模一樣的開發環境,這是一個應用,
這裡先介紹幾個概念知識:PaaS、SaaS、CaaS、IaaS。
PaaS是Platform-as-a-Service的縮寫,意思是平台即服務。把伺服器平台作為一種服務提供的商業模式。通過網絡進行程式提供的服務稱之為SaaS(Software as a Service),而雲計算時代相應的伺服器平台或者開發環境作為服務進行提供就成為了PaaS(Platform as a Service)。所謂PaaS實際上是指将軟體研發的平台(計世資訊定義為業務基礎平台)作為一種服務,以SaaS的模式送出給使用者。是以,PaaS也是SaaS模式的一種應用。但是,PaaS的出現可以加快SaaS的發展,尤其是加快SaaS應用的開發速度。在2007年國内外SaaS廠商先後推出自己的PAAS平台。
CaaS,即Docker Containers as a Service ,開發者通過Docker可以将App變成一種标準化的、可移植的、自管理的元件,可以在任何主流系統中開發、調試和運作。
SaaS是Software-as-a-Service(軟體即服務)的簡稱,随着網際網路技術的發展和應用軟體的成熟, 在21世紀開始興起的一種完全創新的軟體應用模式。SaaS 應用軟體的價格通常為“全包”費用,囊括了通常的應用軟體許可證費、軟體維護費以及技術支援費,将其統一為每個使用者的月度租用費。
IaaS,Infrastructure as a Service,即基礎設施即服務。 消費者通過Internet 可以從完善的計算機基礎設施獲得服務。這類服務稱為基礎設施即服務。基于 Internet 的服務(如存儲和資料庫)是 IaaS的一部分。Internet上其他類型的服務包括平台即服務(PaaS)和軟體即服務(SaaS)。PaaS提供了使用者可以通路的完整或部分的應用程式開發,SaaS則提供了完整的可直接使用的應用程式,比如通過Internet管理企業資源。
相信以後的軟體使用是美好的。
一台16核32G記憶體的虛拟機上,需要跑500+個使用者的應用(每個應用的功能可以認為是一個網站 + 一系列的 RESTful API),有兩個事情很重要:
資源隔離:比如限制應用最大記憶體使用量,或者資源加載隔離等。
低消耗:虛拟化本身帶來的損耗需要盡量的低。
我們不可能在一台機器上開500個虛拟機,雖然可以在資源隔離方面做的很好,但這種虛拟化本身帶來的資源消耗太嚴重。另一個方面,我們可以考慮使用語言級别沙箱,雖然這種「虛拟化」本身的消耗可以低到忽略不計,但是資源隔離方面絕對是噩夢,比如你打算在一個JVM裡隔離記憶體的使用。而Docker很好的權衡了兩者,即擁有不錯的資源隔離能力,又有很低的虛拟化開銷。
4 相關知識—虛拟化技術
虛拟化是指計算機元件在虛拟的基礎上而不是真實的基礎上運作。虛拟化技術可以擴大硬體的容量,簡化軟體的重新配置過程。CPU的虛拟化技術可以單CPU模拟多CPU并行,允許一個平台同時運作多個作業系統,并且應用程式都可以在互相獨立的空間内運作而互不影響,進而顯著提高計算機的工作效率。
虛拟化技術實作相關軟體:
KVM、Xen、Hyper-V、VMware EXSI 、Docker、OpenStack等。
對于KVM、OpenStack、Docker,可以這麼說,其中OpenStack扮演整體資料中心管理方案的角色,KVM作為多租戶計算資源管理工具,而Docker容器則負責與應用部署包相關的工作。
5 參考資料
https://www.docker.com/enterprise
http://www.infoq.com/cn/articles/docker-core-technology-preview
http://baike.baidu.com/view/1413359.htm
http://baike.baidu.com/view/2088218.htm
http://baike.baidu.com/view/369107.htm
http://baike.baidu.com/view/2482595.htm
https://www.zhihu.com/question/22969309
http://dockone.io/article/723
http://www.wenwenyun.com/a/tip/2014/0924/533.html
http://www.wenwenyun.com/a/tip/2014/0926/552.html
http://blog.csdn.net/freeape/article/details/51137672