一、容器和虛擬機
1、容器
容器是應用程序層的抽象,將代碼和依賴項打包在一起。多個容器可以在同一臺計算機上運行,??并與其他容器共享OS內核,每個容器在用戶空間中作為隔離的進程運行。容器占用的空間少于VM(容器映像的大小通常為幾十MB),可以處理更多的應用程序,并且需要的VM和操作系統更少。
2、虛擬機
虛擬機(VM)是將一臺服務器轉變為多臺服務器的物理硬件的抽象。系統管理程序允許多個VM在單臺計算機上運行。每個VM包含操作系統,應用程序,必要的二進制文件和庫的完整副本-占用數十GB。VM也可能啟動緩慢。
3、比較
容器和虛擬機具有相似的資源隔離和分配優勢,但是功能不同,因為容器虛擬化了操作系統,而不是硬件。容器更加便攜和高效。
二、docker
1、標準化軟件單元
容器是打包代碼及其所有依賴項的軟件的標準單元,因此該應用程序可以從一個計算環境快速可靠地運行到另一個計算環境。Docker容器映像是一個輕量級的,獨立的,可執行的軟件軟件包,其中包含運行應用程序所需的一切:代碼,運行時,系統工具,系統庫和設置。
容器映像在運行時會成為容器,對于Docker容器,映像會在Docker Engine上運行時成為容器。不論基礎架構如何,容器化軟件都可用于基于Linux和Windows的應用程序,始終運行相同。容器將軟件與其環境隔離開來,并確保盡管開發和交付之間存在差異,但軟件仍可以均勻運行。
在Docker Engine上運行的Docker容器:
- 標準: Docker創建了容器的行業標準,因此它們可以在任何地方移植
- 輕巧:容器共享計算機的OS系統內核,因此不需要每個應用程序都具有OS,從而提高了服務器效率,并降低了服務器和許可成本
- 安全:應用程序在容器中更安全,并且Docker提供了業界最強大的默認隔離功能
2、docker優點
Docker 是一個用于開發,交付和運行應用程序的開放平臺。Docker 使您能夠將應用程序與基礎架構分開,從而可以快速交付軟件。借助 Docker,您可以與管理應用程序相同的方式來管理基礎架構。通過利用 Docker 的方法來快速交付,測試和部署代碼,您可以大大減少編寫代碼和在生產環境中運行代碼之間的延遲。
快速,一致地交付您的應用程序
Docker 允許開發人員使用您提供的應用程序或服務的本地容器在標準化環境中工作,從而簡化了開發的生命周期。
容器非常適合持續集成和持續交付(CI / CD)工作流程,請考慮以下示例方案:
您的開發人員在本地編寫代碼,并使用 Docker 容器與同事共享他們的工作。
他們使用 Docker 將其應用程序推送到測試環境中,并執行自動或手動測試。
當開發人員發現錯誤時,他們可以在開發環境中對其進行修復,然后將其重新部署到測試環境中,以進行測試和驗證。
測試完成后,將修補程序推送給生產環境,就像將更新的鏡像推送到生產環境一樣簡單。
響應式部署和擴展
Docker 是基于容器的平臺,允許高度可移植的工作負載。Docker 容器可以在開發人員的本機上,數據中心的物理或虛擬機上,云服務上或混合環境中運行。
Docker 的可移植性和輕量級的特性,還可以使您輕松地完成動態管理的工作負擔,并根據業務需求指示,實時擴展或拆除應用程序和服務。
在同一硬件上運行更多工作負載
Docker 輕巧快速。它為基于虛擬機管理程序的虛擬機提供了可行、經濟、高效的替代方案,因此您可以利用更多的計算能力來實現業務目標。Docker 非常適合于高密度環境以及中小型部署,而您可以用更少的資源做更多的事情。
3、docker的基礎概念
鏡像(Image):Docker 鏡像(Image),就相當于是一個 root 文件系統。比如官方鏡像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系統的 root 文件系統。
容器(Container):鏡像(Image)和容器(Container)的關系,就像是面向對象程序設計中的類和實例一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等。
倉庫(Repository):倉庫可看成一個代碼控制中心,用來保存鏡像。
Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和創建Docker容器。
Docker 容器通過 Docker 鏡像來創建。
容器與鏡像的關系類似于面向對象編程中的對象與類。
Docker Engine:一般當人們說 “Docker”時, 他們一般指的是Docker Engine, 一個client-server 結構的應用, 包含Docker daemon,一個 用來和daemon 交互的REST API, 一個命令行應用CLI。 Docker Engine 在命令行中接收并解析、執行docker 命令。如架構圖所示,Docker Engine負責管理鏡像,容器,網絡以及數據卷等。
Docker架構:
Docker 主機(Host):一個物理或者虛擬的機器用于執行 Docker 守護進程和容器。
Docker Registry:Docker 倉庫用來保存鏡像,可以理解為代碼控制中的代碼倉庫。Docker Hub(https://hub.docker.com) 提供了龐大的鏡像集合供使用。一個 Docker Registry 中可以包含多個倉庫(Repository);每個倉庫可以包含多個標簽(Tag);每個標簽對應一個鏡像。
Docker Machine:Docker Machine是一個簡化Docker安裝的命令行工具,通過一個簡單的命令行即可在相應的平臺上安裝Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。
參考文文章:
https://www.runoob.com/docker/docker-architecture.html
https://www.docker.com