相信很多人和我開始時一樣,聽過Docker,聽過Kubernetes,聽過容器也聽過集羣,貌似很多高大上的技術都耳熟能詳,但自己其實卻並不瞭解,甚至不知道他們是什麼?能幹什麼?
最初,我以爲Docker以及k8s等技術只能用在大數據以及雲等的場景,甚至學習上也需要專門的環境,但是,我發現我錯了,而且錯的很徹底,不知道你是否也這麼認爲過,覺得這些技術在平時的開發中根本用不到。如果是這樣的,那我現在就告訴你,其實並不是這樣的,下面就跟我一起來了解一下Docker吧。
Docker的發展
Docker是由美國舊金山一家名叫“dotCloud”---主要提供基於PaaS的雲計算技術服務的公司研發的,Docker是該公司將自己的容器技術進行了簡化和標準化之後纔得到的名稱。
2013年3月,dotCloud公司的創始人之一,Docker之父,28歲的Solomon Hykes正式決定,將Docker項目開源。
之後的Docker,成爲了行業里人氣最火爆的開源技術,沒有之一。更是得到像Google、微軟、Amazon這樣的巨頭的全力支持。
那麼Docker和容器技術爲什麼會這麼火爆?說白了,就是因爲它“輕”。
Docker是什麼
Dockers是有能力打包應用程序及其虛擬容器,可以在任何Linux服務器上運行的依賴性工具,應用程序在任何地方都可以運行,無論是公有云、私有云、單機等這有助於實現靈活性和便攜性,。
Docker 是一個開放源代碼軟件,是一個開放平臺,用於開發應用、交付(shipping)應用、運行應用。 Docker允許用戶將基礎設施(Infrastructure)中的應用單獨分割出來,形成更小的顆粒(容器),從而提高交付軟件地速度。
Docker容器 與虛擬機類似,但原理上,容器是將操作系統層虛擬化,虛擬機則是虛擬化硬件,因此容器更具有便攜性、高效地利用服務器。 容器更多的用於表示 軟件的一個標準化單元。由於容器的標準化,因此它可以無視基礎設施(Infrastructure)的差異,部署到任何一個地方。
Docker的優點
-
標準化應用發佈,docker容器包含了運行環境和可執行程序,可以跨平臺和主機使用;
-
節約時間,快速部署和啓動,一般是秒級;
-
方便構建基於SOA架構或微服務架構的系統,通過服務編排,更好的松耦合;
-
節約成本,docker容器需要的磁盤空間可以減少到MB級;
-
方便持續集成,通過與代碼進行關聯使持續集成非常方便;
-
可以作爲集羣系統的輕量主機或節點。
Kubernetes
雖然Docker容器技術被炒得熱火朝天,但是其自身也有很多的限制,比如想要將Docker應用於具體的業務實現,容器的編排、管理和調度等都是比較困難的。於是,人們迫切需要一套管理系統,對Docker及容器進行更高級更靈活的管理。這時,K8S應運而生。K8S,全稱是kubernetes,是基於容器的集羣管理平臺。
而且,k8s自身有很多優點可以完美的解決硬件對應用的限制。
- 易部署:K8S部署任何應用都是小菜一碟。只要應用可以打包進容器,K8S就一定能啓動它。K8S都可以在任何環境中安全的啓動不管什麼語言什麼框架寫的應用,物 理服務器、虛擬機、雲環境。
- 易遷移:Kubernetes 完全兼容各種雲服務提供商,可以滿足切換供應商的需求,比如從 Google到 AWS。
- 高效的資源利用:K8S如果發現有節點工作不飽和,便會重新分配 pod,幫助我們節省開銷,高效的利用內存、處理器等資源。如果一個節點宕機了,K8S會自動重新創建之前運行在此節點上的 pod,在其他節點上運行。
- 超強的自動縮放能力:網絡、負載均衡、複製等特性,對於 Kubernetes 都是開箱即用的。pod 是無狀態運行的,任何時候有 pod 宕了,立馬會有其他 pod 接替它的工作,用戶完全感覺不到。如果用戶量突然暴增,現有的 pod 規模不足了,那麼會自動創建出一批新的 pod,以適應當前的需求。反之亦然,當負載降下來的時候,K8S也會自動縮減 pod 的數量。
- 易操作:只需 寫個簡單的CI 服務腳本然後運行它,就會使用你的代碼創建一個新的 pod,並部署到 Kubernetes 集羣裏面。應用打包在容器中使其可以安全的運行在任何地方,例如你的 PC、一個雲服務器,使得測試極其簡單。
Docker基礎架構
Docker其實有2個含義:一是指整個Docker項目,一是指Docker引擎。
Docker引擎(Docker Engine)
Docker Engine是一個服務端-客戶端結構的應用,主要有這些部分:Docker守護進程、Docker Engine AP、Docker客戶端。
- Docker守護進程(Docker daemons),也叫
dockerd
,是一個持久化的進程,用戶管理容器。守護進程會監聽Docker Engine API的請求。 - Docker Engine API是用於與Docker守護進程交互用的的API。它是一個RESTful API,因此它不僅可以被Docker客戶端調用,也可以被
wget
和curl
等命令調用。 - Docker客戶端,也叫
docker
,是大部分用戶與Docker交互的主要方式。用戶通過客戶端將命令發送給守護進程。命令會遵循Docker Engine API。
Docker註冊中心(Docker registry)
Docker registry是用於存儲Docker的鏡像。Docker Hub 是一個公共的註冊中心,任何人都可以使用,默認配置下,Docker將會在這裏尋找鏡像。我們在下一節安裝Docker時下載軟件時會從這裏註冊賬號並拉取(pull)Docker鏡像。
另外,用戶可以自行構建私有註冊中心。
Docker對象
Docker的對象是指Images、Containers、Networks、Volumes、Plugins等等。
- 容器(Containers)是鏡像的可運行的實例。容器可通過API或CLI(命令行)進行操控。
- 鏡像(Images)是一個只讀模板,用於指示創建容器。 鏡像分層(layers)構建的,而定義這些層次的文件叫Dockerfile。
- 服務(Services)允許用戶跨越不同的Docker守護進程(Docker daemons)的情況下增加容器,並將這些容器分爲管理者(managers)和工作者(workers),讓他們爲swarm共同工作。
除了Docker基礎架構之外,還有Docker的擴展架構,其中包括Docker Compose、Swarm Mode等
以及Docker的兩種文件格式,Dockerfile和Compose file。Dockerfile定義了單個容器的內容和啓動時候的行爲。Compose file定義了一個多容器應用。
還有Docker的網絡模式及插件等,這些除基礎架構之外的東西,本機就暫時不探討了,一是本來本節就是爲了瞭解Docker,沒必要把全部的大而全的東西都完全搞懂,二是,怕給零基礎的同學造成壓力;三是本人文筆有限,怕你們讀的枯燥,哈哈,因此,我宣佈本節內容到此結束啦。。。。。。。。下一節,我們來學習Docker Desktop及k8s的安裝。
更多優質文章,請搜索公衆號 攻城獅客棧,或掃描下方二維碼
讓我做您手機裏的移動知識庫。