從容器化技術誕生的那一刻起,docker就成為了這個領域的佼佼者。然而,有一個聲音越來越響亮,和 docker 不是“容器” 有關。這句話說的匪夷所思,因為 docker 一直以來都是容器化技術的代名詞,都是人們口口相傳說著docker container。
那么,為什么有人會說 Docker 不是“容器” 呢?如何理解這個問題?本文將從技術實現原理和哲學層面,解析 Docker 為什么不是“容器”。
- 技術實現原理
Docker 最初的創意并不是容器化,而是在 LXC(Linux Container)基礎上將其封裝,用一套 REST API 呈現出來,進而方便應用開發者進行使用,這就是 Docker 最初的理念。Docker 技術最初支持的是單一進程的程序,它是以提交了一個 Image 鏡像文件為基礎,一旦鏡像提交,Docker 就可以通過該鏡像啟動一到多個容器,容器中運行著應用進程。
與傳統的虛擬化技術(如 VMWare、Virtual Box)相比,Docker 使用的是進程級別的隔離,即在同一個主機上的多個容器可以共享同一套操作系統內核。這樣可以節省大量的資源開銷,輕松實現快速部署、快速啟動、快速遷移和版本管理等特性。
事實上,Docker 技術對原有的 LXC 技術進行了改進和提高,并將其封裝成了一個更加輕量級、功能更為強大的容器引擎。從這個角度來看,Docker 并不是原生的容器技術,而是對容器的封裝和加強,所以有人說 Docker 不是“容器”。
- 哲學層面
此外,還有一個從 Docker 哲學層面上考慮的問題,Docker 并沒有真正做到“容器”的安裝、配置、運行和移除這些方方面面的管理。在 Docker 中,鏡像的構建、更新和版本控制仍然是開發者自行管理的。這意味著,Docker 并沒有完全開發出一個統一的機制來管理容器和鏡像,從而使得或多或少還需要進行一些手動工作。
并且,Docker 對底層的容器技術做了太多的封裝,變得過于復雜,容易引起初學者的困惑。而它本身所包含的太多的坑和限制,使得容器化這一本來簡化流程的方法變得復雜了。
從這個角度來看,尤其從工程實現層面上考慮,Docker 并不能被歸為“容器”,因為它仍然需要在機制上進行完善。
- Docker 是容器嗎?
既然上述兩點給出的答案是“不是” ,那么 Docker 系統的性質與特點究竟是什么?毋庸置疑,Docker 是一種應用環境部署和管理的解決方案,它與容器技術密切相關。Docker 的造福在于其出色的操作簡便性、高效的沙盒機制、方便的鏡像制作和共享方式以及部署容器的便利性。Docker 給人們帶來的是更加科學、更加快捷、更加方便的部署方法。因而,Docker 可以被看做是一個應用環境解決方案,而不是“容器”的干貨。
總結
本文從 Docker 技術實現原理和哲學層面兩個方面,解釋了為什么有人說 Docker 不是“容器”。事實上,Docker 被定義為一種應用環境部署和管理的解決方案。這并不意味著 Docker 取代了或者不需要容器技術,反而說明了 Docker 技術是基于容器技術上的增強,更好地實現了容器技術的價值。雖然 Docker 的性質與特點不是容器,但是 Docker 帶來的改變是應用環境管理的一大跨越,帶來了極大的便利性和靈活性。