元旦你們出去嗨,棧長在家擼文章,慘慘慘…
沒錯, Docker 的 2020 年也過的不是很順利,可以說是流年不利、命運多舛,一年發生兩件大事,太折騰!
相信大家也已經看到很多相關的報導了,但同時也有很多人被鋪天蓋地的資訊所誤解、所迷惑,很多人不清楚事實的真相,我們技術群裡還有人說不要學了之類的,帶著很多偏見和誤解,比如:
- Docker 真的被禁止使用了?
- Docker 真的被 K8S 棄用了?
- Docker 到底還能不能用?
- Docker 到底還要不要繼續學?
- ……
今天棧長就來總結下 Docker 的 2020,帶大家來揭開這些謎團。
Docker 簡介:
Docker 是現在最主流的開源容器,Docker 的核心思想是:"Build once, Run anywhere",即:一次構建,處處執行,也基本成為了現在容器的代名詞。
我們可以將 Docker 理解為一個輕量級的沙盒,Docker 容器完全使用沙盒機制,每個容器內都有其獨立執行的環境和元件,容器之間是相互隔離互不影響的,也可以進行容器間的通訊。
更多請參考:年輕人的第一個 Docker 應用!
Docker 真的被禁用了?
關於 Docker 被禁的訊息,其實最早在 2017 年就被禁止在 7 個國家使用了,去年的 8 月,一則 Docker 被禁的訊息又襲轉了朋友圈和各大技術平臺,因為其主要針對的是 "實體清單" 上的公司,而許多中國公司又在實體清單上面。
來看下最新的 Docker 服務條款:
最新的條款生效日期是 2020/12/14:
依舊寫著禁止 Docker 在米國政府 "實體清單" 上的企業、個人使用,Docker 雖然是一個開源容器,但其本身也是一家米國公司,所以必須得遵守米國在出口方面的法律限制。
所以,如果你所在的公司不在那個實體清單上面,那完全不用驚慌!!
那公司在這個清單上面該怎麼辦呢?
看 1.1 的描述,這個條款針對的是 Docker 相關網站上提供的服務,那禁用的也是 Docker 網站提供的商業服務(比如 Docker Hub、Docker EE 等),開源的版本並不受影響,然而真正用商業服務和付費版的公司又有幾個呢?不得而知!反正我們不用~
一句話再總結下:
禁止 Docker 在米國政府 "實體清單" 上的企業、個人使用在其網站上提供的商業服務
所以不用 Docker 的商業服務不就沒事了,一般的公司完全不用擔心,再不行在開源版本上拉個分支自己幹或者換一個容器不就完事了。
推薦閱讀:Docker 被禁?還有千千萬萬個 Docker 站起來!
Docker 被 K8S 棄用?
去年 12 月,又有一波關於 "K8S 棄用 Docker" 的訊息開始刷屏……
Kubernetes 簡介:
kubernetes,簡稱:K8s,是 Google 開源的一個容器編排引擎,它支援自動化部署,以及大規模、可伸縮應用容器化管理。Kubernetes 中可以建立多個容器,每個容器裡面執行一個應用例項,然後通過內建負載均衡策略實現這一組應用例項的管理、發現、訪問,而這些細節都不需要運維人員進行復雜的手工配置和處理。
參考來源:百度百科
為什麼 K8S 棄用 Docker?
沒錯,來看 Kubernates 1.2.0 的變更日誌:
如圖所示,在棄用部分第一條就是:
現在 Docker 在 Kubelet 中的支援已經被棄用,並且會在未來的版本中徹底移除,因為 Kubelet 使用了一個名叫 "dockershim" 的模組,它實現了 Docker 對 CRI 的支援,但它在 Kubernetes 社群已經出現了一些維護性的問題。我們建議你評估並遷移容器執行時,也就是成熟的 CRI 完整實現(相容 v1alpha1 和 v1),現在已經是可用狀態。
總而言之就是維護問題,建議遷移到新的容器執行時。
Docker 和 k8s 有什麼關係?
首先需要搞清楚 Docker 在現有 Kubernetes 架構中的作用,來看下 Kubernetes 的架構圖:
在 Kubernetes 架構中,每個 Kubernetes 節點都與控制皮膚進行通訊,Docker(或者其他容器執行時)僅用於在實際主機中執行應用程式,各個節點上的 kubelet 通過獲取後設資料,並執行 CRI(Container Runtime Interface,即容器執行時 API 介面)以在該節點上進行容器的建立/刪除操作。
Kubernetes 只能與CRI 進行通訊,而不能直接用 Docker API 進行通訊,Docker 又並不支援 Kubernetes 提供的 CRI,所以之前使用 Kubernetes 就只能通過 "dockershim" 提供的橋接服務來轉換 Docker API 和 CRI,但由於維護性問題,Kubernetes 最終還是棄用了 dockershim 這一橋接服務。
Docker 被棄用後怎麼辦?
其實也不用慌,CRI 執行時有兩種實現方案:
- containerd
- CRI-O
containerd 就是從 Docker 分出去的開源專案,並且提供的 CRI 功能也是完全由 Docker 提供的,Docker 自身也用到了 containerd,而 CRI-O 主要由 Red Hat 開發,並不依賴 Docker,所以,從 Docker 遷移到 containerd 是最好的選擇。
總結
Docker 確實被禁用了,但影響的只是實體清單上的公司的 Docker 提供的商業服務,開源版本不受影響,和我們普通開發也沒關係。
Docker 也確實被 k8s 棄用了,但還有其他的選擇,比如:containerd,就是完全相容 Docker 的,可以繼續使用 Docker 進行開發,所以對於普通開發使用者來說是不受任何影響的,但對於 k8s 管理員來說就需要考慮遷移到新的容器執行時,畢竟在未來不久的版本中 k8s 會徹底移除對 Docker 的支援。
總之, Docker 仍是目前最優秀的開源容器,放心大膽用吧!
所以,不要再被誤導了,我們普通開發人員完全不用考慮禁不禁、棄用不棄用的事,該學學,該用用,吃嘛嘛香,何樂而不為呢?
但話又說回來,Docker 是家米國公司,未來開源版會不會也受影響呢?
我只能說應該不會,如果開源的都被禁,那我們常用的 Java、Linux、Spring 等開源技術都不能用了?不太可能!很多人的擔心、驚慌也並不無道理,唯有開發自己的核心技術才會不用受制於人!
最後, Docker 被禁損失的是 Docker 公司和米國自己的利益,簡直是搬起石頭砸自己的腳,另外,Docker 也不是必須的,不用 Docker 也還有很多其他的選擇,Docker 沒火之前不也過的好好的,所以完全不用驚慌。
至於 Docker 的後續發展,請持續關注Java技術棧微信公眾號,棧長將第一時間跟進最新動態。你也可以在後臺回覆:動態,獲取棧長整理的更多往期熱門好玩的技術資訊。
參考:
- https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md#deprecation
- https://dev.to/inductor/wait-docker-is-deprecated-in-kubernetes-now-what-do-i-do-e4m
版權申明:本文系公眾號 "Java技術棧" 原創,原創實屬不易,轉載、引用本文內容請註明出處,禁止抄襲、洗稿,請自重,尊重他人勞動成果和智慧財產權。
近期熱文推薦:
1.Java 15 正式釋出, 14 個新特性,重新整理你的認知!!
2.終於靠開源專案弄到 IntelliJ IDEA 啟用碼了,真香!
3.我用 Java 8 寫了一段邏輯,同事直呼看不懂,你試試看。。
覺得不錯,別忘了隨手點贊+轉發哦!