原因:1.主流服務使用Unix/Linux作業系統,而go語言對於第三方的依賴相當的少,這樣使用go語言開發的Docker基本上能夠完美的運行於大多數安裝Unix/Linux作業系統的伺服器上。 2、go語言有部署簡單、並發性好、執行效能好等諸多優點。
本教學操作環境:windows10系統、GO 1.18、thinkpad t480電腦。
Docker 是一個開源的應用程式容器引擎,讓開發者可以打包他們的應用程式以及依賴包到一個可移植的容器中,然後發佈到任何流行的Linux機器或Windows 機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何介面。
為什麼docker用go語言?
首先我們現在主流的服務都是使用Unix/Linux作業系統的,而就如前面所描述的那樣Golang對於第三方的依賴相當的少(只依賴glibc),這點既是限制,也是優勢。因為這樣的話使用Golang開發的Docker基本上能夠完美的運行於大多數安裝Unix/Linux作業系統的伺服器上。
其次,Golang開發的有很多優點:
1、部署簡單。
Go 編譯產生的是一個靜態可執行文件,除了 glibc 外沒有其他外部依賴。這讓部署變得異常方便:目標機器上只需要一個基礎的系統和必要的管理、監控工具,完全不需要操心應用所需的各種套件、庫的依賴關係,大大減輕了維護的負擔。這和 Python 有著巨大的差別。由於歷史的原因,Python 的部署工俱生態相當混亂【例如 setuptools, distutils, pip, buildout 的不同適用場合以及相容性問題】。官方 PyPI 來源又常出問題,需要搭建私有鏡像,而維護這個鏡像又要花費不少時間和精力。
2、並發性好。
Goroutine 和 channel 讓編寫高並發的服務端軟體變得相當容易,很多情況下完全不需要考慮鎖定機制以及由此帶來的各種問題。單一 Go 應用也能有效的利用多個 CPU 核,並行執行的效能好。這和 Python 也是天壤之比。多執行緒與多進程的服務端程式編寫起來並不簡單,而且由於全域鎖GIL 的原因,多執行緒的Python 程式並不能有效利用多核心,只能用多進程的方式部署;如果用標準庫裡的multiprocessing包又會對監控和管理造成不少的挑戰【我們用的supervisor 管理進程,對fork 支援不好】。部署Python 應用程式的時候通常是每個CPU 核部署一個應用,這會造成不少資源的浪費,例如假設某個Python 應用啟動後需要佔用100MB 內存,而伺服器有32 個CPU 核,那麼留一個核給系統、運作31 個應用程式副本就要浪費3GB 的記憶體資源。
3、好的語言設計。
從學術的角度講Go 語言其實非常平庸,不支援許多高級的語言特性;但從工程的角度講,Go 的設計是非常優秀的:規範足夠簡單靈活,有其他語言基礎的程式設計師都能迅速上手。更重要的是 Go 自帶完善的工具鏈,大大提升了團隊協作的一致性。例如 gofmt 自動排版 Go 程式碼,很大程度上杜絕了不同人寫的程式碼排版風格不一致的問題。把編輯器配置成在編輯存檔的時候自動執行 gofmt,這樣在寫程式碼的時候可以隨意擺放位置,存檔的時候會自動變成正確排版的程式碼。另外還有 gofix, govet 等非常有用的工具。
4、執行性能好。
雖然不如 C 和 Java,但通常比原生 Python 應用程式還是高一個數量級的,適合寫一些瓶頸業務。記憶體佔用也非常省。
推薦學習:Golang教學
以上是為什麼docker用go語言的詳細內容。更多資訊請關注PHP中文網其他相關文章!