Docker:容器技術與Docker介紹
今天我們開始進入 Docker 系列專題,在本專題中,我將基于 .NET 項目介紹和講解 Dcoker 的基本使用、基礎命令、Dockfile,以及 Docker 的存儲和網絡等內容。
1. 為什么"還"要學 Docker
在過去幾年時間里,容器(Container)技術得到了快速的發展和普及。在這樣的大背景下,我們作為開發人員,容器技術可以說是我們必備的基礎技能之一。而 Docker 是容器技術中目前普及率最高的一個實現。
雖然現在 DevOps 領域最火的 Kubernetes(K8s) 已經棄用了 Dockershim(這是一個適配器組件,使得你可以把 Docker 用作 K8s 的容器運行時),但這并不代表 K8s 就不能運行 Docker 容器了。Dockershim 一定還會繼續由社區或官方維護,或者 Docker 將來可能會支持 CRI 規范以使它可以不用借助適配器組件便可以運行在 K8s 中,所以目前來看大家完全不必擔心。
Docker 目前在市場上的及率依然非常高,在實際環境中還是有很多更適合直接使用 Docker 的場景。
另外,我個人感覺,學習了 Docker 再去學 K8s 會輕松很多,很多概念不會那么抽象。
2. 什么是容器
顧名思義,容器(Container)是 IT 世界標準化的“集裝箱”。就像運輸業使用實體集裝箱隔離不同的貨物,以便通過船只和火車運輸,軟件開發技術也已使用這種容器化的方法。
最早的容器技術應該是一個叫 Linux Container 的工具,簡稱 LXC,它是一種內核輕量級的操作系統層的虛擬化技術。Linux Container 的實現主要包含 Namespace 和 Cgroup 兩大基礎技術,前者是命名空間,主要用于資源的隔離,后者負責資源管理和控制,比如 CPU 和內存的限制、進程組的掛起、恢復和優先級控制等。
隨著虛擬化技術的發展,在 LXC 系統層容器技術的基礎上,又誕生了應用層容器技術,比如 Docker。它是運行在操作系統之上的一個應用程序,在這個應用程序中,可以將需要部署的應用程序進行容器化,讓各個應用程序運行在被隔離的容器中。

容器的主要優勢特點是:標準化、輕量級、易移植、低成本。容器技術提供輕量級固定的基礎設施,無需配置硬件和花費時間安裝操作系統和軟件來托管部署。它可將應用程序的代碼與相關配置文件、庫及執行應用程序所需的一切以非常標準化的方式組合打包在一起,這可讓開發人員或運維人員順暢地跨環境部署應用程序,從而解決應用程序換個環境就無法正確執行的問題。容器之間彼此隔離,有助于提升應用程序的安全性。
3. 什么是 Docker
前文說了,Docker 是容器技術的一種實現。Docker 是一個用于開發、交付和運行容器的容器化平臺。桌面版 Docker 支持 Linux、Windows 和 macOS。對于服務器環境,Docker 支持 Linux 的多種分發版本和 Windows Server 2016 及更高版本,許多云服務商(如阿里云、Azure 等)都支持 Docker。
Docker 使用的是 C/S(客戶端/服務器)架構。Docker 客戶端與 Docker 守護進程(Daemon)對話,后者負責構建、運行和分發 Docker 容器。Docker 客戶端和守護進程可以運行在同一個系統上,或者你可以將 Docker 客戶端連接到一個遠程的 Docker 守護進程,它們之間使用 REST API 通訊。另一個 Docker 客戶端是 Docker Compose,它可以讓你處理由一組容器組成的應用程序。

Docker 客戶端是一個名為 docker 的命令行應用程序,它為我們提供了一個命令行接口 (CLI),用于與 Docker 服務器進行交互。docker 命令使用 REST API 接口將諸如 docker run 之類的指令發送到本地或遠程服務器來管理容器。一個 Docker 客戶端可以多個守護進程通信。
Docker 服務器中的守護程序(名為 dockerd)監聽 Docker API 請求并管理 Docker 對象,如鏡像、容器、網絡、插件等。守護程序還可以與其他守護程序進行通信,以管理 Docker 服務。
Docker 鏡像倉庫是一個軟件即服務(SaaS)Docker 容器 Registry(注冊表)。Docker 鏡像倉庫是用于存儲和分發創建的容器鏡像。Docker Hub 是 Docker 用于鏡像管理的默認公共倉庫。
4. 結語
本文主要介紹了什么是容器和什么是 Docker,相信你對容器技術和 Docker 已經有了基本的了解。


























