在 Windows 上可以用 Docker 嗎?

2021-09-11 15:12:19 字數 3697 閱讀 3444

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 的交集只是為其提**用開發環境。

可以在 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 應用程式的執行。

正當 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 是如何既提供自有容器技術,又提供與 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 上:以 hyper-v 虛擬機器的形式執行 linux 格式的容器,或者執行原生的 windows 容器。其中前者執行 linux 格式的應用程式,後者能執行 windows 應用程式。如果稍微用一點技巧,還可以讓這兩者同時執行在 windows 電腦上。

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

文章出處:.net西安社群

在 Windows 上可以用 Docker 嗎?

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

網域名稱可以用多久 假髮可以用多久?

這要看你說的是哪種假髮了,像是真人發手工鉤織的假髮一般保養好的話,用3 5年都是可以的,因為真人發只要定期噴灑護理液保持頭髮養分是可以用很長時間的,如果是纖維發這種假髮基本上戴個半年就完全沒法用了,很容易炸毛,打理起來也很麻煩的。所以如果打算長期佩戴建議還是選擇真人發手工鉤織的假髮吧,效果會更好!附...

網域名稱可以用多久 織髮髮套可以用多久?

織髮髮套屬於純手工鉤織的假髮,純手工鉤織的假髮正常的壽命是三到五年,新的時候狀態較好,髮型比較真實自然,舊了以後髮型較呆板,真實度稍差一些。也跟平時佩戴習慣 保養習慣有關。經常風吹日曬可能會縮短使用壽命,經常辦公室工作佩戴 加上洗護正確方式可以適當延長使用壽命,因人而異!織髮髮套使用壽命還是比較長久...