dockerToolbox和docker for windows的區別詳解

dockerToolbox和docker for windows的區別詳解

最近在安裝docker時發現網上有很多資料寫的都挺詳細,但是安裝方式各有不同,搞到最後有點蒙圈了,不知道按照哪個操作,幸運的是在網上查到了具體的區別。文章寫的比較全面,娓娓道來。下面直接把大牛的重點轉移到前面。

=========================
docker運行是需要linux內核的,爲了能在非linux系統使用docker,官方早期提供的Toolbox方案就是使用虛擬機啓動一個linux,然後在這個虛擬機中運行docker,免費的虛擬機當時使用最多的就是virtualbox
現在有原生版本的docker了,在windows上是使用的windows10內置的hyper-v虛擬機,所以不在需要安裝virtualbox,但是對系統的要求也提高了,因爲hyper-v的虛擬機只有部分版本的windows10纔有內置,比如家庭版的windows10就沒有hyper-v組件,不能運行原生版本的docker,還是隻能通過toolbox

=========================
但是我win10使用docker for windows安裝完docker,遇到一個問題就是勾選了hyper-v之後打開VM虛擬機出問題了。需要切換的話還需要重啓。目前沒找到解決方案、只能捨棄一個。

在這裏插入圖片描述

下面先來補充一下關於hyper-v 虛擬機與virtualbox和VMware的知識

一:VMware工作站(VMware Workstation)是VMware公司銷售的商業軟件產品之一。該工作站軟件包含一個用於英特爾x86相容容電腦的虛擬機套裝,其允許用戶同時創建和運行多個x86虛擬機。每個虛擬機實例可以運行其自己的客戶機操作系統,如(但不限於)Windows、Linux、BSD變生版本。用簡單術語來描述就是,VMware工作站允許一臺真實的電腦在一個操作系統中同時開啓並運行數個操作系統。其它VMware產品幫助在多個宿主電腦之間管理或移植VMware虛擬機。(via 維基百科)

二:Oracle VirtualBox是由德國InnoTek軟件公司出品的虛擬機軟件,現在則由甲骨文公司進行開發,是甲骨文公司xVM虛擬化平臺技術的一部份。它提供用戶在32位或64位的Windows、Solaris及Linux 操作系統上虛擬其它x86的操作系統。用戶可以在VirtualBox上安裝並且運行Solaris、Windows、DOS、Linux、OS/2 Warp、OpenBSD及FreeBSD等系統作爲客戶端操作系統。(via 維基百科)

三:Hyper-V採用微內核的架構,兼顧了安全性和性能的要求。Hyper-V底層的Hypervisor運行在最高的特權級別下,微軟將其稱爲ring -1(而Intel則將其稱爲root mode),而虛擬機的OS內核和驅動運行在ring 0,應用程序運行在ring 3下,這種架構就不需要採用複雜的BT(二進制特權指令翻譯)技術,可以進一步提高安全性。和很多朋友的想法不同,Hyper-V可以很好地支持Linux,我們可以安裝支持Xen的Linux內核,這樣Linux就可以知道自己運行在 Hyper-V之上,還可以安裝專門爲Linux設計的Integrated Components,裏面包含磁盤和網絡適配器的VMbus驅動,這樣Linux虛機也能獲得高性能。下圖所示的就是Novell SUSE Linux 10 SP1,其中的網卡驅動,其總線類型就是VMbus。
這對於採用Linux系統的企業來說,是一個福音,這樣我們就可以把所有的服務器,包括Windows和Linux,全部統一到最新的Windows Server 2008平臺下,可以充分利用Windows Server 2008帶來的最新高級特性,而且還可以保留原來的Linux關鍵應用不會受到影響。

Win7不支持hyper-v虛擬機,win8以上纔可以安裝,而且要考慮windows的版本,家庭版是不行的。

Docker,或者準確一點說,容器技術,在近幾年裏幾乎成爲了應用分發和集羣部署的默認技術了。背景部分,如果感興趣,請參考閒談集羣管理模式一文。Docker 生態的成熟還有賴於其周邊工具和實踐模式的興起。比如,曾經雨後春筍般出現的編排技術,以及基於容器技術的 DevOps 實踐大規模地開展。

那麼這麼好的技術,在 Windows 上能用嗎?在各種場合,都有人與我討論這個的話題。每次聽到這樣的疑問,我也是很無奈的。畢竟,只要稍微搜索一下,就不難回答:是可以的。不過,深入想一下,人們有這樣的疑問也是有道理的:畢竟 Docker 是起源於 Linux 上的技術。

Docker 是基於 Linux 內置的 Namespace 和 CGroup 等系統內隔離機制而抽象出來的一種輕虛擬化技術。與虛擬機相比,它以一種輕量級的方式實現了運行空間的隔離。如果物理機是一幢住宅樓,虛擬機就是大樓中的一個個套間,而容器技術就是套間裏的一個個隔斷。不難理解,Docker 作爲一種隔斷,它並不能基於一種內核(Linux)提供另一種內核(Windows)的虛擬化運行環境。所以,基於 Linux 的 Docker 是不支持運行 Windows 應用的。

早在 Docker 之前,Linux 就已經提供了今天的 Docker 所使用的那些基礎技術。當年 Docker 彷彿一夜之間突然火爆全球的背後,技術上的積累並不是瞬間完成的。這一切在 Windows 上顯得有些滯後。在 Docker 已經衆所周知的時候,Windows 系統卻根本沒有類似的機制,更別提 Windows 獨有的工具鏈和實踐方法了。所以,我們看到,早期 Windows 與 Docker 的交集只是爲其提供應用開發環境。

boot2docker 與 Docker for Windows

可以在 Windows 開發面向 Docker 部署的應用程序——Windows 的桌面體驗比 Linux 好太多,所以很早就出現了在異構操作系統上以虛擬機的形式運行 Docker 的項目出現,也就是 boot2docker。它既支持 Windows,也支持 macOS。

後來,Docker 公司開始推出自己的 Docker for Windows 工具包,它旨在爲開發人員在 Windows 上開發面向 Docker 的應用程序提供完整的工具鏈,其中包括運行環境、客戶端,Docker Swarm 編排工具和其他工具。Docker for Windows 中負責運行環境配置的工具是 Docker Machine。與 boot2docker 類似,Docker Machine 也會在 Windows 上創建一個 Linux 虛擬機,用於運行 Docker 引擎。也就是說,這個環境也只支持 Linux 的應用程序格式的,並不支持 Windows 應用程序的運行。

Windows 容器技術

正當 Linux 世界的容器技術藉着 Docker 的東風颳遍世界的時候,Windows 系統也發現了容器粒度的重要性。 微軟與 Docker 在 2014 年宣佈了合作,以期將容器技術帶到 Windows Server 操作系統,併爲傳統的 Windows 應用程序的容器化改造提供更直接的支持。不久之後,微軟在 Ignite 2015 上宣佈將推出爲容器優化的 Windows Nano Server;第一次 Windows 容器真正與與開發者見面是在 Windows 10 的年度更新(2016.8)上,它正式提供 Windows 容器的開發環境。在 2017 年 10 月發佈的 Windows Server 1709 版本包含了 Windows 容器,意味着這項技術可以用於生產環境了。Windows 容器是真正能夠運行 Windows 應用程序的容器技術,包括依賴 IIS、註冊表等大量 Windows 特性的應用程序都可以在 Windows 容器中運行。

雖然 Windows 對容器的支持有些姍姍來遲,但社區對 Windows 容器的關注和運用卻是異常活躍。這主要得益於容器技術本身生態的成熟,一來人們對這項技術已經有了充分的認知,同時周邊工具和實踐都已經日趨完善。另一方面,在與 Docker 公司一同打造這項技術的過程中,也注意了與已有技術的兼容性。人們發現,在電腦上啓用 Windows Container 功能之後,接下來的操作步驟仍然是基於 Docker 客戶端完成的,命令行參數與 Linux 上的 Docker 也沒有區別。

幾乎與 Windows 容器技術本身日趨成熟過程的同時,周邊工具對 Windows 容器的支持也在同步完善。Docker for Windows 在新的版本中添加了一個貼心的菜單,可以一鍵切換 Linux 容器和 Windows 容器;Kubernetes 從 1.5 版本開始增加對 Windows 容器的支持;雲環境方面,包括 Azure 和 AWS 在內的衆多雲環境都第一時間提供了 Windows 容器的支持……

Windows 容器架構

Windows 是如何既提供自有容器技術,又提供與 Docker 兼容的操作接口的呢? 下面的左圖是 Linux 容器的架構,右側則是 Windows 容器的。可以發現兩者結構很類似。與 Linux 類似,Windows 也新新抽象出來了 CGroup 和 Namespace 的概念,並提供出一個新的抽象層次 Compute Service,即宿主機運算服務(Host Compute Service,hcs)。相較於底層可能經常重構的實現細節,hcs 旨在爲外部(比如 Docker 引擎)提供較穩定的操作接口。hcs 的操作接口目前有 Go 語言版本,以及 C# 語言版本,前者目前在 Docker 客戶端中用來操作 Windows 容器。

容器鏡像方面,微軟自己提供了 Server Core 和 Nano Server 兩種服務器版本。Server Core 可以理解爲 Windows Server 去掉了 GUI 的部分,因此功能更完整(比如包括文件服務器、DNS 服務器等功能),同時鏡像大小也更大(2GB~5GB);而 Nono Server 則是專爲容器優化的迷你型系統,只包含有核心的 Windows 服務器功能,鏡像大小爲(130MB~400MB)。基於基礎鏡像來構建自己鏡像的方法與 Linux 鏡像是一樣的,所以 DockerFile 文件的格式和語法並沒有不同。 授權方面,只要用戶已經取得宿主機的授權,微軟並不會單獨向用戶收取容器鏡像的授權費。

小結

容器技術本身以及圍繞它的一系列工具和實踐讓應用程序的打包和發佈變得標準化,很大程度上可以消除應用程序對特定環境的依賴,進而爲高效的集羣化部署和運維提供有力保障。作爲容器技術的代表,Docker 可以以兩種形式運行在 Windows 10上:以 Hyper-V 虛擬機的形式運行 Linux 格式的容器,或者運行原生的 Windows 容器。其中前者運行 Linux 格式的應用程序,後者能運行 Windows 應用程序。如果稍微用一點技巧,還可以讓這兩者同時運行在 Windows 電腦上。

Windows 10 和 Windows Server 都提供了對 Windows 容器的支持,各種容器化工具對 Windows 容器的支持也在日趨完善當中。基於 Windows 開發新的應用時一方面可以優先考慮跨平臺容器化部署的能力,另一方面也可以與存量應用程序一樣考慮藉助 Windows 容器技術實現容器化、雲原生的特性。

docker運行是需要linux內核的,爲了能在非linux系統使用docker,官方早期提供的Toolbox方案就是使用虛擬機啓動一個linux,然後在這個虛擬機中運行docker,免費的虛擬機當時使用最多的就是virtualbox
現在有原生版本的docker了,在windows上是使用的windows10內置的hyper-v虛擬機,所以不在需要安裝virtualbox,但是對系統的要求也提高了,因爲hyper-v的虛擬機只有部分版本的windows10纔有內置,比如家庭版的windows10就沒有hyper-v組件,不能運行原生版本的docker,還是隻能通過toolbox

以下都是我的我分析:win7沒有Hyper-Vwin8以上纔有Hyper-V,所以win7只能使用dockerToolbox是基於VirtualBox虛擬機軟件來構建一個叫default的linux系統,在這之上來使用docker的,並且應用是Linux的。

win8也只能使用dockerToolbox,因爲docker for windows是在window10和windowsServer2016以後纔出來的,所以win8也是基於linux系統來使用docker的,其上的應用也是linux的應用。但是可以不使用VirtualBox虛擬機,而使用Hyper-V來構建linux系統。我沒有在win8進行過測試。所以也是猜測

 

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