docker概述

1.Docker概述
Docker是一個用于開發,發布和運行應用程序的開放平臺。Docker能快速的把你的應用程序從基礎設施分離出來。使用Docker,你可以像管理應用程序一樣管理基礎設施。通過利用Docker的方法來快速交付,測試和部署代碼,你可以顯著的減少編寫代碼和生產環境中運行代碼之間的延遲

  1. Docker平臺
    Docker提供了在稱為容器的松散隔離環境中打包和運行應用程序的能力。隔離和安全性允許你給定的主機上同時運行多個容器。容器是輕量級的,因為他們不需要管理程序的額外負載,而是在主機內核中運行。這意味著與使用虛擬機相比,你可以在給定的硬件組合上運行更多的容器。你甚至可以在實際上是虛擬機的主機中運行Docker容器。
    Docker提供工具和平臺管理你的容器的生命周期:
    使用容器開發應用程序及其支持組件
    容器成為分發和測試應用程序的單元
    準備好之后,將應用程序部署到生產環境中,作為容器或編排的服務。無論您的生產環境是本地數據中心、云提供商還是兩者的混合,其工作原理都一樣的。

3.Docker Engine
Docker Engine是一個client-server應用程序,主要組件如下:
一個服務,一種長時間運行的程序,稱為守護進程(docker命令)
一個REST API,程序可以使用這些接口與守護進程進行對話,并指示他做什么
一個命令行接口(CLI)客戶端(docker命令)


clipboard.png

CLI使用Docker REST API通過腳本或直接用CLI命令來控制Docker守護進程與之交互。許多其他的Docker應用程序使用底層API和CLI

該守護進程創建并管理Docker對象,如鏡像,容器,網絡,和卷
注:Docker實在開源Apache 2.0許可下獲得許可的
有關更多的細節,請參見線面Docker架構。

  1. 我們可以使用Docker做什么?
    迅速一致的交付應用程序。

Docker簡化了開發生命周期,允許開發人員使用提供了帶有應用程序和服務的本地容器的標準化標準化環境中工作。容器對于持續集成和持續交付(CI/CD)工作非常有用。
考慮以下示例場景:
你的開發員在本地編寫代碼,并使用Docker容器與同事工作
他們使用Docker將應用程序推入測試環境,并執行自動化和手動測試
當開發人員發現bug時,它們可以在開發環境中修復他們,并將它們部署到測試環境中進行測試和驗證
測試完成后,修復客戶端只需將更新后的鏡像推入生產系統即可

響應式部署和擴張
Docker基于容器的平臺允許高度語可移植的工作負載。Docker容器可以在開發人員的本地電腦,數據中心的物理機或虛擬機、云提供商或混合環境中運行
Docker的可移植性和輕量級特性也使得動態管理變得容易,根據業務需求,在近乎實際的情況下擴展或分解應用或服務。

在相同的硬件上運行更多的工作負載
Docker使輕量級和迅速的。它為基于管理程序的虛擬機提供了一種可行的,經濟有效的代替方案。因此你可以使用更多的計算能力來實現業務目標。Docker非常適合用于高密度環境和需要使用較少資源完成更多的中小型部署。

  1. Docker架構

    Docker使用client-server架構。Docker客戶機與Docker守護進行進行對話,后者負責構建運行和分發Docker容器。Docker客戶機和守護進程可以再統一系統上運行,也可以將Docker客戶機連接到遠程Docker守護進程。Docker客戶機和守護進程通過Unix套接字或網絡接口使用REST API進行通信。
    clipboard1.png

    Docker Daemon(Docker守護進程)

    Docker守護進程(dockerd)監聽Docker API請求并管理Docker對象,如圖像,容器,網絡和卷。守護進程還可以與其他守護進程通信以管理Docker服務

Docker client(Docker客戶端)
Docker客戶端(Docker)是許多Docker用戶與Docker交互的主要方式。當你使用docker run之類的命令式,客戶端將這些命令發送給dockerd。dockerd執行這些命令。docker命令使用docker API。Docker客戶機可以與多個守護進程通信。

Docker redistries (Docker倉庫)
Docker倉庫儲存Docker鏡像。Docker Hub是一個任何人都可以使用的公共倉庫,Docker被配置為默認在Docker Hub上查找圖像,甚至還可以運行自己的私有倉庫。如果你使用Docker數據中心(DDC),他包括Docker可信倉庫(DTR)
當你使用docker pull 或 docker run 命令,所需的鏡像將從配置的倉庫中提取。當你使用docker push 命令時,你的鏡像將被推送到配置的倉庫中。

Docker Object(Docker對象)
當你使用Docker時,你是在創建和使用圖像、容器、網絡、卷、插件和其他對象。本節簡要敘述其中一些對象

IMAGES(鏡像)
鏡像是一個只讀的模板,帶有創建Docker容器的指令。通常,一個鏡像是基于另一個鏡像的,需要進行一些額外的定制。例如,你可以基于ubuntu構建一個鏡像,安裝Apache Web服務器和你的應用程序,以及配置你應用程序運行的細節

你可以創建自己的鏡像,也可以只使用其他人創建并發布在倉庫中的圖像。構建一個你自己的鏡像,你需要創建一個Dockerfile,它具有簡單的語法,用于定義創建鏡像和運行鏡像所需的步驟。Dockerfile中的每個指令都在鏡像中創建一個層。當你更改Dockerfile并重新構建竟像是,只需重新構建那些已經更改的層。與其他虛擬化技術相比,這就是鏡像輕量級,小巧和快速的部分原因

CONTAINERS(容器)
容器是鏡像的可運行的實例。你可以使用Docker API or CLI 創建,啟動,停止,移動,或刪除容器。你可以將一個容器連接至一個或多個網絡,將存儲添加到其中,甚至可以基于當前的狀態創建新的鏡像。

默認情況下,容器與其他容器和主機是相對隔離的。你可以控制容器的網絡、存儲或其他底層子系統或其他容器或主機的隔離程度。

容器由其鏡像以及在創建或啟動它時提供的任何配置選項來定義。當一個容器被移除時,對其狀態的任何未存儲在持久存儲中的更改都將消失

示例docker運行命令:
下面的命令運行一個Ubuntu容器,以交互方式附加到本地命令行會話,并運行/bin/bash.
$ docker run -i -t ubuntu /bin/bash

當你運行這個命令時,會發生一下情況(假如你使用的是默認倉庫的配置):

  1. 如果你本地沒有Ubuntu鏡像,Docker會從你配置的倉庫中拉出它,就像你手動運行Docker拉Ubuntu一樣。
  2. Docker創建一個新容器,就像你手動運行了一個Docker容器創建命令一樣。
  3. Docker將一個讀寫文件系統分配給容器作為他的最后一層。這允許正在運行的容器在其本地文件系統中創建或修改文件或目錄。
  4. Docker創建一個網絡接口連接到默認網絡,如果你沒有指定任何網絡的選項。這包括為一個容器分配IP地址,默認情況下,容器可以使用宿主機的網絡連接到外部網絡。
  5. Docker啟動容器并執行/bin/bash。由于容器以交互方式運行并附加到終端(由于 -i 和 -t 標志),所以你可以在輸出機庫到中段時使用鍵盤提供輸入。
  6. 當你鍵入 exit 以終止 /bin/bash,容器將停止,但不會被刪除。你可以重新啟動它或刪除它。

SERVICES(服務)
服務允許你跨多個Docker守護進程擴展容器,這些守護進程與多個管理器和工作人員一起工作。集群中的每個成員都是一個Docker守護進程,這些守護進程都使用Docker API進行通信。服務需要你定義所需的狀態,例如在任何給定時間必須可用的服務副本的數量。默認情況下,服務跨所有工作節點進行負載均衡,對于使用者來說,Docker服務似乎是一個單獨的應用程序。Docker Engine在Docker 1.12及更高版本中支持集群模式

The underlying technology(底層技術)
Docker使用Go編寫的,他利用了Linux內核的幾個特性來交互其功能

Namespaces(名稱空間)
Docker使用一種稱為名稱空間的技術來提供稱為容器的隔離工作區。運行容器時,Docker為該容器創建一組名稱空間
這些名稱空間提供了一個隔離層。容器的每個方面都在一個單獨的名稱空間中運行,他的訪問權限僅限于該名稱空間。
DoDocker Engine在Linux上使用的命名空間如下:
pid 名稱空間:進程隔離(PID:Process ID)
net 名稱空間:管理網絡接口(net:Networking)
ipc 名稱空間:管理對 ipc 資源的訪問(ipc:進程間通信)
mnt 名稱空間:管理文件系統掛載點(mnt:mount)
uts 名稱空間: 隔離內核和版本標識符(UTS:Unix分時系統)

Control groups(控制組)
Linux上的Docker Engine還依賴于另一種稱為control groups(cgrous)的技術。一個cgroups限定一個程序為一組特定的資源。控制組允許Docker Engine將可用的硬件資源共享給容器,并可選的執行限制和約束。例如,你可以對一個特定容器限制內存。

Union file systems(Union文件系統)
Union文件系統,或UnionFS,是通過創建層來操作的文件系統,使他們非常輕量級和快速。Docker Engine使用UnionFS為容器提供構建塊。Docker Engine可以使用多個UnionFS變體,包括AUFS,btrfs、vfs和DeviceMapper。

Container format(容器格式)
Docker Engine將名稱空間,控制組,和UnionFS組合成稱為容器格式的包裝器。默認的容器格式是libcontainer。將來,Docker可能通過與 BSD Jails 或 Solaris Zones等技術集成來支持其他容器格式

總結:


image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,024評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,285評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,328評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,878評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,098評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,616評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,554評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,725評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,971評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,339評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,695評論 2 370