1. 程式人生 > 其它 >1、Docker(Docker 教程和架構)

1、Docker(Docker 教程和架構)

Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從 Apache2.0 協議開源。

Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化。

容器是完全使用沙箱機制,相互之間不會有任何介面(類似 iPhone 的 app),更重要的是容器效能開銷極低。

Docker 是一個開源的、輕量級的容器引擎,主要運行於 Linux 和 Windows,用於建立、管理和編排容器。

和 VMware 虛擬機器相比,Docker 使用容器承載應用程式,而不使用作業系統,所以它的開銷很少,效能很高。但是,Docker 對應用程式的隔離不如虛擬機器徹底,所以它並不能完全取代 VMware。

Docker的應用場景

  • Web 應用的自動化打包和釋出。

  • 自動化測試和持續整合、釋出。

  • 在服務型環境中部署和調整資料庫或其他的後臺應用。

  • 從頭編譯或者擴充套件現有的 OpenShift 或 Cloud Foundry 平臺來搭建自己的 PaaS 環境。


Docker 的優點

Docker 是一個用於開發,交付和執行應用程式的開放平臺。Docker 使您能夠將應用程式與基礎架構分開,從而可以快速交付軟體。藉助 Docker,您可以與管理應用程式相同的方式來管理基礎架構。通過利用 Docker 的方法來快速交付,測試和部署程式碼,您可以大大減少編寫程式碼和在生產環境中執行程式碼之間的延遲。

1、快速,一致地交付您的應用程式

Docker 允許開發人員使用您提供的應用程式或服務的本地容器在標準化環境中工作,從而簡化了開發的生命週期。

容器非常適合持續整合和持續交付(CI / CD)工作流程,請考慮以下示例方案:

  • 您的開發人員在本地編寫程式碼,並使用 Docker 容器與同事共享他們的工作。
  • 他們使用 Docker 將其應用程式推送到測試環境中,並執行自動或手動測試。
  • 當開發人員發現錯誤時,他們可以在開發環境中對其進行修復,然後將其重新部署到測試環境中,以進行測試和驗證。
  • 測試完成後,將修補程式推送給生產環境,就像將更新的映象推送到生產環境一樣簡單。

2、響應式部署和擴充套件

Docker 是基於容器的平臺,允許高度可移植的工作負載。Docker 容器可以在開發人員的本機上,資料中心的物理或虛擬機器上,雲服務上或混合環境中執行。

Docker 的可移植性和輕量級的特性,還可以使您輕鬆地完成動態管理的工作負擔,並根據業務需求指示,實時擴充套件或拆除應用程式和服務。

3、在同一硬體上執行更多工作負載

Docker 輕巧快速。它為基於虛擬機器管理程式的虛擬機器提供了可行、經濟、高效的替代方案,因此您可以利用更多的計算能力來實現業務目標。Docker 非常適合於高密度環境以及中小型部署,而您可以用更少的資源做更多的事情。

Docker 架構

Docker 包括三個基本概念:

  • 映象(Image):Docker 映象(Image),就相當於是一個 root 檔案系統。比如官方映象 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系統的 root 檔案系統。
  • 容器(Container):映象(Image)和容器(Container)的關係,就像是面向物件程式設計中的類和例項一樣,映象是靜態的定義,容器是映象執行時的實體。容器可以被建立、啟動、停止、刪除、暫停等。
  • 倉庫(Repository):倉庫可看成一個程式碼控制中心,用來儲存映象。

Docker 使用客戶端-伺服器 (C/S) 架構模式,使用遠端API來管理和建立Docker容器。

Docker 容器通過 Docker 映象來建立。

容器與映象的關係類似於面向物件程式設計中的物件與類。

概念說明

Docker 映象(Images)

Docker 映象是用於建立 Docker 容器的模板,比如 Ubuntu 系統。

Docker 容器(Container)

容器是獨立執行的一個或一組應用,是映象執行時的實體。

Docker 客戶端(Client)

Docker 客戶端通過命令列或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 與 Docker 的守護程序通訊。

Docker 主機(Host)

一個物理或者虛擬的機器用於執行 Docker 守護程序和容器。

Docker Registry

Docker 倉庫用來儲存映象,可以理解為程式碼控制中的程式碼倉庫。

Docker Hub(https://hub.docker.com) 提供了龐大的映象集合供使用。

一個 Docker Registry 中可以包含多個倉庫(Repository);每個倉庫可以包含多個標籤(Tag);每個標籤對應一個映象。

通常,一個倉庫會包含同一個軟體不同版本的映象,而標籤就常用於對應該軟體的各個版本。我們可以通過 <倉庫名>:<標籤> 的格式來指定具體是這個軟體哪個版本的映象。如果不給出標籤,將以 latest 作為預設標籤。

Docker Machine

Docker Machine是一個簡化Docker安裝的命令列工具,通過一個簡單的命令列即可在相應的平臺上安裝Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

總結:一臺主機上可以從Docker Registry處獲取若干個Docker 倉庫,Docker 倉庫通過標籤來儲存映象,通常,一個倉庫會包含同一個軟體不同版本的映象,而標籤就常用於對應該軟體的各個版本。即,<倉庫名>:<標籤> 的格式來指定具體是這個軟體哪個版本的映象。容器是獨立執行的一個或一組應用軟體,是映象執行時的實體,所以映象可理解為某個軟體某個版本的執行環境。一個映象對應一個容器。最後,我們可以在主機(本地或者遠端)上通過docker客戶端進行與docker的通訊等操作,可以通過Docker Machine安裝docker。