亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Docker 的基本概念和框架

發布時間:2020-07-28 05:00:30 來源:網絡 閱讀:690 作者:程序員果果 欄目:編程語言

文章首發于微信公眾號《程序員果果》
地址:https://mp.weixin.qq.com/s/8VM-c_UkxYcVw2Itiapw4w

一、Docker簡介

什么是容器 ?

  • 一種虛擬化的方案
  • 操作系統級別的虛擬化
  • 只能運行相同或相似的內核操作系統
  • 依賴于Linux內核特性:Namespace和Cgroups(Control Group)

容器技術有哪些優點 ?

Docker 的基本概念和框架

從圖中我們很容器看出,容器技術資源占用比較少,由于虛擬機需要模擬硬件的行為,對CUP和內存的損耗比較大。所以同樣配置的服務器,容器技術就有以下優點:

  • 資源占用比較少
  • CPU/內存消耗低

那既然容器有這些優點,為什么直到Docker的出現,才真正的被關注呢?一個重要原因就是容器技術的復雜性。容器本身就很復雜,他依賴于Linux內核的很多特性,而且他不易安裝,也不易于管理和實現自動化。而Docker就是為了改變這一切而產生的。

什么是Docker ?

  • 將應用自動部署到容器的開源引擎
  • Go語言實現的開源項目,誕生于2013年初,最初發起者是dotCloud公司

Docker的特點

  • 提供簡單輕量的建模方式:簡單,Docker非常容器上手,用戶只需要幾分鐘,就能把自己的項目Docker化。
  • 職責的邏輯分離:使用Docker,開發人員只需要關心容器中運行的程序,運維人員只需要關心如何管理容器;Docker設計的目的就是加強開發人員寫代碼的環境與應用程序要部署的生成環境的一致性。
  • 快速高效的開發生命周期:Docker的目標之一是縮短代碼開發到測試到部署上線的運行周期,讓應用程序具備可移植性,在容器中開發,以容器的形式交付和分發,這樣開發、測試、生產,都使用相同的環境,這樣也就避免了額外的調試和部署上的開銷,這樣就能有效的縮短產品的上線周期。
  • 鼓勵使用面向服務的架構:Docker推薦單個容器只運行一個應用程序或者進程,這樣就形成了一個分布式的應用程序模型,在這種模式下應用程序或服務都可以表述為一系列內部互聯的容器,從而使分布式部署應用程序擴展或調試都變得非常簡單。這就像我們開發中常用的思想;高內聚,低耦合,單一任務。這樣就能避免在同一服務器上部署不同服務時,可能帶來的服務之間相互影響。這樣服務運行中出現問題時,也比較容易定位問題的所在。

Docker的使用場景

    1. 使用Docker容器開發、測試、部署服務:因為Docker本身非常輕量化,所以本地開發人員可以構建、運行并分享Docker容器。容器可以在開發環境中創建,然后再提交到測試,最終進入生產環境。
    1. 創建隔離的運行環境:在很多企業應用中,同一服務的不同版本可能服務于不同的用戶,那么使用Docker非常容易創建不同的生成環境來運行不同的服務。
    1. 搭建測試環境:由于Docker的輕量化,所以開發者很容易利用Docker在本地搭建測試環境,用來測試程序在不用系統下的兼容性;甚至搭建集群的部署測試。
    1. 構建多用戶的平臺即服務(PaaS)基礎設施
    1. 提供軟件即服務(SaaS)應用程序
    1. 高性能、超大規模的宿主機部署

二、Docker的基本組成

Docker 包含了一下幾個重要主要部分:

  • Docker Client 客戶端
  • Docker Daemon 守護進程
  • Docker Image 鏡像
  • Docker Container 容器
  • Docker Registry 倉庫

Docker 客戶端 / 守護進程

Docker 的基本概念和框架

  • Docker是C/S架構的程序:Docker客戶端向Docker服務器端,也就是Docker的守護進程發出請求,守護進程處理完所有的請求工作并返回結果。
  • Docker 客戶端對服務器端的訪問既可以是本地也可以通過遠程來訪問。

Docker Image 鏡像

  • 鏡像是Docker容器的基石,容器基于鏡像啟動和運行。鏡像就好比容器的源代碼,保存了用于啟動容器的各種條件。
  • Docker鏡像是一個層疊的只讀文件系統。
  • Docker鏡像使用聯合加載技術

docker的鏡像是一個層疊的只讀文件系統,最低端是一個引導文件系統(即bootfs),第二層是root文件系統(即rootfs),它位于bootfs之上,可以是一種或多種操作系統,比如ubuntu或者centos。在docker中,root文件系統永遠只能是只讀狀態,并且docker運用聯合加載技術又會在root文件系統之上加載更多的只讀文件系統,聯合加載指的是一次加載多個文件系統,但是在外面看起來只能看到一個文件系統,聯合加載會將各層文件系統疊加到一起,這樣最終的文件系統會包含所有的底層文件和目錄,docker將這樣的文件系統稱為鏡像。

Docker 的基本概念和框架

Docker Container 容器

  • 容器通過鏡像來啟動,Docker的容器是Docker的執行來源,容器中可以運行客戶的一個或多個進程,如果說鏡像是Docker聲明周期中的構建和打包階段,那么容器則是啟動和執行階段。

當一個容器啟動時,docker會在該鏡像的最頂層加載一個讀寫文件系統,也就是一個可寫的文件層,我們在docker運行的程序,就是在這個層中進行執行的,當docker第一次啟動一個容器時,初始的讀寫層是空的,當文件系統發生變化時,這些變化都會應用到這一層上,比如像修改一個文件,該文件首先會從讀寫層下面的只讀層復制到該讀寫層,該文件的只讀版本依然存在,但是已經被讀寫層中的該文件副本所隱藏,這就是docker的一個重要技術:寫時復制(copy on write)。每個只讀鏡像層都是只讀的,永遠不會變化,當創建一個新容器時,docker會構建出一個鏡像棧,如下圖所示:

Docker 的基本概念和框架

Docker Registry 倉庫

  • docker用倉庫來保存用戶構建的鏡像,倉庫分為公有和私有兩種,Docker公司提供了一個公有的倉庫Docker Hub。

三、Docker 依賴的 Linux內核特性

Docker依賴于Linux內核的兩個重要特性:

  • Namespaces 命名空間
  • Control groups (cgroups) 控制組

Namespaces 命名空間

很多編程語言都包含了“命名空間”的概念,我們可以認為“命名空間”是一種“封裝”的概念, 而“封裝”本身實際上實現的是代碼的隔離。而在操作系統中,命名空間提供的是系統資源的隔離,而系統資源包括了進程、網絡、文件系統等。

我們從Docker公開的文檔來看,它使用了5種命名空間:

  • PID(Process ID) 進程隔離
  • NET(Network)管理網絡接口
  • IPC(InterProcess Communication)管理跨進程通信的訪問
  • MNT(Mount)管理掛載點
  • UTS(Unix Timesharing System) 隔離內核和版本標識

那么,這些隔離的資源,是如何被管理起來的呢?這就需要用到——Control groups(cgroup)控制組了。

Control groups (cgroups) 控制組

Control groups是Linux內核提供的,一種可以限制、記錄、隔離進程組所使用的物理資源的機制。
最初是由google工程師提出,并且在2007年時被Linux的內核的2.6.24版本引進。可以說,Control groups就是為容器而生的,沒有Control groups就沒有容器技術的今天。

Control groups提供了以下功能:

  • 資源限制:例如,memory(內存)子系統可以為進程組設定一個內存使用的上限,一旦進程組使用的內存達到了限額,該進程組再發出內存申請時,就會發出“out of memory”(內存溢出)的警告。

  • 優先級設定:它可以設定哪些進程組可以使用更大的CPU或者磁盤IO的資源。

  • 資源計量:它可以計算進程組使用了多少系統資源。尤其是在計費系統中,這一點十分重要。

  • 資源控制:它可以將進程組掛起或恢復。

Namespace 和 cgroup帶給Docker的能力

到這里我們了解了Namespace和CGroup的概念和職能,而這兩個特性帶給了Docker哪些能力呢?如下:

  • 文件系統隔離:首先是文件系統的隔離,每個Docker的容器,都可以擁有自己的root文件系統。

  • 進程隔離:每個容器都運行在自己的進程環境中。

  • 網絡隔離:容器間的虛擬網絡接口和IP地址都是分開的。

  • 資源的隔離和分組:使用cgroups將cpu和內存之類的資源獨立分配給每個Docker容器。

歡迎關注我的公眾號《程序員果果》,關注有驚喜~~
Docker 的基本概念和框架

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

蕲春县| 搜索| 安达市| 奉新县| 南部县| 牟定县| 陕西省| 唐河县| 育儿| 衡南县| 桃园县| 衡阳市| 临城县| 利川市| 岳普湖县| 安图县| 平南县| 乌海市| 渝中区| 兴国县| 平阴县| 毕节市| 庆阳市| 阳原县| 旅游| 景东| 化隆| 新晃| 密云县| 镇安县| 车致| 泸水县| 湘潭市| 灌南县| 榆树市| 天气| 洪雅县| 四子王旗| 石渠县| 九江市| 贡嘎县|