什麼是Docker?與虛擬機有什麼區別?

Docker 概述

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙盒機制,相互之間不會有任何接口(類似 iPhone 的 app)。幾乎沒有性能開銷,可以很容易地在機器和數據中心中運行。最重要的是,他們不依賴於任何語言、框架或包裝系統。

擴展:沙盒

沙盒也叫沙箱,英文 sandbox。在計算機領域指一種虛擬技術,且多用於計算機安全技術。安全軟件可以先讓它在沙盒中運行,如果含有惡意行為,則禁止程序的進一步運行,而這不會對系統造成任何危害。

Docker 是 dotCloud 公司開源的一個基於 LXC 的高級容器引擎,源代碼託管在 Github 上, 基於 go語言並遵從 Apache2.0 協議開源。

Docker 讓開發者可以打包他們的應用以及依賴包到一個可移植的 container 中,然後發佈到任何流行的 Linux 機器上。

官方網站:

https://www.docker.com/

什麼是Docker?與虛擬機有什麼區別?

docker官方網站

docker [ˈdɒkə(r)] 碼頭工人

logo:

什麼是Docker?與虛擬機有什麼區別?

logo

注:docker 服務相當於鯨魚,container 容器就是集裝箱。

container :集裝箱,容器

docker: 碼頭工人

源代碼下載:

https://github.com/docker/docker

擴展:

集裝箱是海上運貨的一個創新。

什麼是Docker?與虛擬機有什麼區別?

源代碼下載:

https://github.com/docker/docker

docker 容器技術和虛擬機對比:

相同點:docker 容器技術和虛擬機技術,都是虛擬化技術。

什麼是Docker?與虛擬機有什麼區別?

docker 容器技術和虛擬機對比

總結:docker 相對於 VM 虛擬機,少了虛擬機操作系統這一層,所以 docker 效率比虛擬機高

Docker 架構

什麼是Docker?與虛擬機有什麼區別?

Docker架構

工作流程:服務器 A 上運行 docker Engine 服務,在 docker Engine 上啟動很多容器container,從外網Docker Hub上把image操作系統鏡像下載來,放到container容器運行。這樣一個容器的實例就運行起來了。最後,通過Docker client對docker容器虛擬化平臺進行控制。

Image 和 Container 的關係:image 可以理解為一個系統鏡像,Container 是 Image 在運行時的一個狀態。如果拿虛擬機作一個比喻的話,Image 就是關機狀態下的磁盤文件,Container 就是虛擬機運行時的磁盤文件,包括內存數據。

dockerhub:dockerhub 是docker官方的鏡像存儲站點,其中提供了許多常用的鏡像供用戶下載,如 ubuntu, centos 等系統鏡像。通過dockerhub用戶也可以發佈自己的docker鏡像,為此用戶需要註冊一個賬號,在網站上創建一個docker倉庫。

Docker 核心技術

1.Namespace — 實現Container的進程、網絡、消息、文件系統和主機名的隔離。

2.Cgroup — 實現對資源的配額和度量。

注:Cgroup 的配額,可以指定實例使用的cpu個數,內存大小等。就像如下圖,vmware 虛擬機中的硬件配置參數。

什麼是Docker?與虛擬機有什麼區別?

虛擬機配置

Docker特性

文件系統隔離:每個進程容器運行在一個完全獨立的根文件系統裡。

資源隔離:系統資源,像CPU 和內存等可以分配到不同的容器中,使用cgroup。

網絡隔離:每個進程容器運行在自己的網絡空間,虛擬接口和IP地址。

日誌記錄:Docker 將會收集和記錄每個進程容器的標準流(stdout/stderr/stdin),用於實時檢索或批量檢索。

變更管理:容器文件系統的變更可以提交到新的鏡像中,並可重複使用以創建更多的容器。無需使用模板或手動配置。

交互式shell:Docker 可以分配一個虛擬終端並關聯到任何容器的標準輸入上,例如運行一個一次性交互 shell。

優點:

1.一些優勢和 VM 一樣,但不是所有都一樣。

比 VM 小,比VM快,Docker 容器的尺寸減小相比整個虛擬機大大簡化了分佈到雲和從雲分發時間和開銷。Docker 啟動一個容器實例時間很短,一兩秒就可以啟動一個實例。

2.對於在筆記本電腦,數據中心的虛擬機,以及任何的雲上,運行相同的沒有變化的應用程序,IT 的發佈速度更快。

Docker 是一個開放的平臺,構建,發佈和運行分佈式應用程序。

Docker 使應用程序能夠快速從組件組裝和避免開發和生產環境之間的摩擦。

3.您可以在部署在公司局域網或雲或虛擬機上使用它。

4.開發人員並不關心具體哪個 Linux 操作系統

使用 Docker,開發人員可以根據所有依賴關係構建相應的軟件,針對他們所選擇的操作系統。然後,在部署時一切是完全一樣的,因為一切都在 DockerImage 的容器在其上運行。開發人員負責並且能夠確保所有的相關性得到滿足。

5.Google,微軟,亞馬遜,IBM 等都支持 Docker。

6.Docker 支持 Unix/Linux 操作系統,也支持 Windows 戒 Mac

缺點侷限性:

1.Docker 用於應用程序時是最有用的,但並不包含數據。日誌,跟蹤和數據庫等通常應放在 Docker容器外。 一個容器的鏡像通常都很小,不適合存大量數據,存儲可以通過外部掛載的方式使用。比如使用:NFS,ipsan,NFS 等, -v 映射磁盤分區

一句話:docker 就來用於計算,存儲交給別人。

oracle不適合使用 docker 來運行,太大了,存儲的數據太多。


分享到:


相關文章: