Docker入門:(二)Docker介紹

Docker概念

Docker is a platform for developers and sysadmins to build, run, and share applications with containers. The use of containers to deploy applications is called containerization. Containers are not new, but their use for easily deploying applications is.

上面是Docker官方文檔中給出的定義,翻譯之後就是:
Docker是一個供開發人員和系統管理員使用容器構建、運行和共享應用程序的平臺。使用容器部署應用程序稱爲容器化。容器並不新鮮,但它們用於輕鬆部署應用程序卻很新鮮。

因此,要了解docker是什麼,首先我們要理解容器的概念,而理解容器,我們還要了解容器虛擬機的區別

容器和虛擬機

上文中我們介紹了虛擬化技術,瞭解了虛擬化架構之後,我們就可以很清楚的區分容器虛擬機的概念
我們用的傳統虛擬機如 VMware , VisualBox 之類的是全虛擬化架構,需要模擬整臺機器包括硬件,每臺虛擬機都需要有自己的操作系統,虛擬機一旦被開啓,預分配給它的資源將全部被佔用。每一臺虛擬機包括應用,必要的二進制和庫,以及一個完整的用戶操作系統。

而容器技術是基於操作系統層的虛擬化技術,容器和我們的宿主機共享硬件資源及操作系統,可以實現資源的動態分配。容器包含應用和其所有的依賴包,但是與其他容器共享內核。容器在宿主機操作系統中,在用戶空間以分離的進程運行。

容器技術是實現操作系統虛擬化的一種途徑,可以讓您在資源受到隔離的進程中運行應用程序及其依賴關係。通過使用容器,我們可以輕鬆打包應用程序的代碼、配置和依賴關係,將其變成容易使用的構建塊,從而實現環境一致性、運營效率、開發人員生產力和版本控制等諸多目標。容器可以幫助保證應用程序快速、可靠、一致地部署,其間不受部署環境的影響。容器還賦予我們對資源更多的精細化控制能力,讓我們的基礎設施效率更高。通過下面這幅圖我們可以很直觀的反映出這兩者的區別所在
在這裏插入圖片描述
容器的優點:

  • 靈活:即使是最複雜的應用程序也可以被封裝。

  • 輕量級:容器利用和共享主機內核,使它們在系統資源方面比虛擬機更高效。

  • 可移植性:您可以在本地構建、部署到雲,並在任何地方運行。

  • 鬆散耦合:容器是高度自給自足和封裝的,允許您替換或升級一個容器而不破壞其他容器。

  • 可伸縮:您可以增加並自動跨數據中心分發容器副本。

  • 安全:容器對進程應用主動約束和隔離,而不需要用戶進行任何配置。

我們可以從下面這張表格很清楚地看到容器相比於傳統虛擬機的特性的優勢所在:

特性 容器 虛擬機
啓動 秒級 分鐘級
硬盤使用 一般爲MB 一般爲GB
性能 接近原生 弱於
系統支持量 單機支持上千個容器 一般是幾十個

Docker定位

Docker 屬於 Linux 容器的一種封裝,提供簡單易用的容器使用接口。它是目前最流行的 Linux 容器解決方案。Linux 容器不是模擬一個完整的操作系統,而是對進程進行隔離,相當於是在正常進程的外面套了一個保護層。對於容器裏面的進程來說,它接觸到的各種資源都是虛擬的,從而實現與底層系統的隔離。
Docker 將應用程序與該程序的依賴,打包在一個文件裏面。運行這個文件,就會生成一個虛擬容器。程序在這個虛擬容器裏運行,就好像在真實的物理機上運行一樣。有了 Docker ,就不用擔心環境問題。
總體來說, Docker 的接口相當簡單,用戶可以方便地創建和使用容器,把自己的應用放入容器。容器還可以進行版本管理、複製、分享、修改,就像管理普通的代碼一樣。

Docker相比於傳統虛擬化方式具有更多的優勢:

  • docker 啓動快速屬於秒級別。虛擬機通常需要幾分鐘去啓動
  • docker 需要的資源更少, docker 在操作系統級別進行虛擬化, docker 容器和內核交互,幾乎沒有性能損耗,性能優於通過 Hypervisor 層與內核層的虛擬化
  • docker 更輕量, docker 的架構可以共用一個內核與共享應用程序庫,所佔內存極小。同樣的硬件環境, Docker 運行的鏡像數遠多於虛擬機數量,對系統的利用率非常高
    與虛擬機相比, docker 隔離性更弱, docker 屬於進程之間的隔離,虛擬機可實現系統級別隔離
  • 安全性: docker 的安全性也更弱。 Docker 的租戶 root 和宿主機 root 等同,一旦容器內的用戶從普通用戶權限提升爲root權限,它就直接具備了宿主機的root權限,進而可進行無限制的操作。虛擬機租戶 root 權限和宿主機的 root 虛擬機權限是分離的,並且虛擬機利用如 Intel 的 VT-d 和 VT-x 的 ring-1 硬件隔離技術,這種隔離技術可以防止虛擬機突破和彼此交互,而容器至今還沒有任何形式的硬件隔離,這使得容器容易受到攻擊
  • 可管理性: docker 的集中化管理工具還不算成熟。各種虛擬化技術都有成熟的管理工具,例如 VMware vCenter 提供完備的虛擬機管理能力
  • 高可用和可恢復性: docker 對業務的高可用支持是通過快速重新部署實現的。虛擬化具備負載均衡,高可用,容錯,遷移和數據保護等經過生產實踐檢驗的成熟保障機制, VMware 可承諾虛擬機 99.999% 高可用,保證業務連續性
  • 快速創建、刪除:虛擬化創建是分鐘級別的, Docker 容器創建是秒級別的, Docker 的快速迭代性,決定了無論是開發、測試、部署都可以節約大量時間
    交付、部署:虛擬機可以通過鏡像實現環境交付的一致性,但鏡像分發無法體系化。 Docker 在 Dockerfile 中記錄了容器構建過程,可在集羣中實現快速分發和快速部署

Docker三要素

在這裏插入圖片描述
從上圖我們可以看到,Docker 中包括三個基本的要素:

  1. Repository(倉庫)
  2. Image(鏡像)
  3. Container(容器)

Repository(倉庫)

倉庫的概念很好理解,Docker 倉庫是集中存放鏡像文件的場所。如果使用了git和github就很容易理解docker的倉庫概念。docker倉庫概念和git類似。

docker提供了一個註冊服務器(register)來保存多個倉庫,每個倉庫又可以包含多個具備不同tag的鏡像,

docker運作中使用的默認倉庫是docker hub公共倉庫。

倉庫支持的操作類似git,當用戶創建了自己的鏡像之後就可以使用push命令將它上傳到共有或者私有的倉庫。這樣下次再另外一臺機器上使用這個鏡像的時候只需要從倉庫裏面pull下來就可以了。通常,一個倉庫會包含同一個軟件不同版本的鏡像,而標籤就常用於對應該軟件的各個版本 。我們可以通過<倉庫名>:<標籤>的格式來指定具體是這個軟件哪個版本的鏡像。如果不給出標籤,將以 latest 作爲默認標籤.。

Image(鏡像)和Container(容器)在這裏插入圖片描述

Fundamentally, a container is nothing but a running process, with some added encapsulation features applied to it in order to keep it isolated from the host and from other containers. One of the most important aspects of container isolation is that each container interacts with its own private filesystem; this filesystem is provided by a Docker image. An image includes everything needed to run an application - the code or binary, runtimes, dependencies, and any other filesystem objects required.
容器只是一個正在運行的進程,爲了使它與主機和其他容器隔離,在其上應用了一些附加的封裝特性。容器隔離最重要的方面之一是每個容器都與自己的私有文件系統進行交互;此文件系統由Docker鏡像提供。鏡像包含運行應用程序所需的所有東西——代碼或二進制文件、運行時、依賴項以及所需的任何其他文件系統對象。

鏡像是文件, 容器是進程。 容器是基於鏡像創建的, 即容器中的進程依賴於鏡像中的文件, 這裏的文件包括進程運行所需要的可執行文件, 依賴軟件, 庫文件, 配置文件等等…
注:容器是由鏡像實例化而來,這和我們學習的面向對象的概念十分相似,我們可以把鏡像看作類,把容器看作類實例化後的對象。

docker 的鏡像概念類似虛擬機的鏡像。是一個只讀的模板,一個獨立的文件系統,帶有創建Docker容器的指令,可以用來創建新的容器。( docker create <image -id > :爲指定的鏡像添加一個可讀寫層,構成一個新的容器;)例如:一個鏡像可以包含一個完整的ubuntu操作系統環境,裏面僅安裝了mysql或用戶需要的其他應用程序。
docker鏡像實際上是由一層一層的系統文件組成,這種層級的文件系統被稱爲UnionFS( Union file system 統一文件系統),鏡像可以基於dockerfile構建,dockerfile是一個描述文件,裏面包含了若干條密令,每條命令都會對基礎文件系統創建新的層次結構。

docker提供了一個很簡單的機制來創建鏡像或更新現有的鏡像。用戶甚至可以從其他人那裏下載一個已經做好的鏡像直接使用。(鏡像是隻讀的,可以理解爲靜態文件)

docker利用容器來運行應用:docker容器是由docker鏡像創建的運行實例。docker容器類似虛擬機,可以執行包含啓動,停止,刪除等。每個容器間是相互隔離的。容器中會運行特定的運用,包含特定應用的代碼及所需的依賴文件。可以把容器看作一個簡易版的linux環境(包含root用戶權限,進程空間,用戶空間和網絡空間等)和運行在其中的應用程序。

相對於鏡像來說容器是動態的,容器在啓動的時候創建了一層可寫層次作爲最上層。( docker create <image -id > :爲指定的鏡像添加一個可讀寫層,構成一個新的容器;)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章