摘要:因為鏡像包含操作系統完整的文件系統,其體積往往是龐大的,因此在設計時,就充分利用的技術,將其設計為分層存儲的架構。分層存儲的特征還使得鏡像的復用定制變的更為容易。容器也采用分層存儲。
什么是 Docker?
Docker 使用 Google 公司推出的 Go 語言 進行開發實現,基于 Linux 內核的 cgroup,namespace,以及 AUFS 類的 Union FS 等技術,對進程進行封裝隔離,屬于 操作系統層面的虛擬化技術。由于隔離的進程獨立于宿主和其它的隔離的進程,因此也稱其為容器。
Docker 在容器的基礎上,進行了進一步的封裝,從文件系統、網絡互聯到進程隔離等等,極大的簡化了容器的創建和維護。使得 Docker 技術比虛擬機技術更為輕便、快捷。
下面的圖片比較了 Docker 和傳統虛擬化方式的不同之處。傳統虛擬機技術是虛擬出一套硬件后,在其上運行一個完整操作系統,在該系統上再運行所需應用進程;
而容器內的應用進程直接運行于宿主的內核,容器內沒有自己的內核,而且也沒有進行硬件虛擬。因此容器要比傳統虛擬機更為輕便。
Docker 的通俗解釋Docker的思想來自于集裝箱,集裝箱解決了什么問題?在一艘大船上,可以把貨物規整的擺放起來。并且各種各樣的貨物被集裝箱標準化了,集裝箱和集裝箱之間不會互相影響。那么我就不需要專門運送水果的船和專門運送化學品的船了。只要這些貨物在集裝箱里封裝的好好的,那我就可以用一艘大船把他們都運走。docker就是類似的理念。
不同的應用程序可能會有不同的應用環境,比如.net開發的網站和php開發的網站依賴的軟件就不一樣,如果把他們依賴的軟件都安裝在一個服務器上就要調試很久,而且很麻煩,還會造成一些沖突。比如IIS和Apache訪問端口沖突。這個時候你就要隔離.net開發的網站和php開發的網站。常規來講,我們可以在服務器上創建不同的虛擬機在不同的虛擬機上放置不同的應用,但是虛擬機開銷比較高。docker 可以實現虛擬機隔離應用環境的功能,并且開銷比虛擬機小。
開發軟件的時候用的是 Ubuntu,但是運維管理的都是 Centos,運維在把你的軟件從開發環境轉移到生產環境的時候就會遇到一些 Ubuntu 轉 Centos 的問題,比如:有個特殊版本的數據庫,只有Ubuntu 支持,Centos 不支持,在轉移的過程當中運維就得想辦法解決這樣的問題。這時候要是有docker 你就可以把開發環境直接封裝轉移給運維,運維直接部署你給他的docker就可以了。而且部署速度快。
在服務器負載方面,如果你多帶帶開一個虛擬機,那么虛擬機會占用空閑內存的,docker部署的話,這些內存就會利用起來。
Docker 基本概念 鏡像 ( Image )操作系統分為內核和用戶空間。對于 Linux 而言,內核啟動后,會掛載 root 文件系統為其提供用戶空間支持。而 Docker 鏡像(Image),就相當于是一個 root 文件系統。比如官方鏡像 ubuntu:16.04 就包含了完整的一套 Ubuntu 16.04 最小系統的 root 文件系統。
Docker 鏡像是一個 特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建之后也不會被改變。
因為鏡像包含操作系統完整的 root 文件系統,其體積往往是龐大的,因此在 Docker 設計時,就充分利用 Union FS 的技術,將其設計為 分層存儲 的架構。所以嚴格來說,鏡像并非是像一個 ISO 那樣的打包文件,鏡像只是一個虛擬的概念,其實際體現并非由一個文件組成,而是由一組文件系統組成,或者說,由多層文件系統聯合組成。
鏡像構建時,會一層層構建,前一層是后一層的基礎。每一層構建完就不會再發生改變,后一層上的任何改變只發生在自己這一層。比如,刪除前一層文件的操作,實際不是真的刪除前一層的文件,而是僅在當前層標記為該文件已刪除。在最終容器運行的時候,雖然不會看到這個文件,但是實際上該文件會一直跟隨鏡像。因此,在構建鏡像的時候,需要額外小心,每一層盡量只包含該層需要添加的東西,任何額外的東西應該在該層構建結束前清理掉。
分層存儲的特征還使得鏡像的復用、定制變的更為容易。甚至可以用之前構建好的鏡像作為基礎層,然后進一步添加新的層,以定制自己所需的內容,構建新的鏡像。
容器(Container)鏡像(Image)和容器(Container)的關系,就像是面向對象程序設計中的 類 和 實例 一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等。
容器的實質是進程,但與直接在宿主執行的進程不同,容器進程運行于屬于自己的獨立的命名空間。因此容器可以擁有自己的 root 文件系統、自己的網絡配置、自己的進程空間,甚至自己的用戶 ID 空間。容器內的進程是運行在一個隔離的環境里,使用起來就好像是在一個獨立于宿主的系統下操作一樣。這種特性使得容器封裝的應用比直接在宿主運行更加安全。
容器也采用分層存儲。每一個容器運行時,是以鏡像為基礎層,在其上創建一個當前容器的存儲層,我們可以稱 這個為容器運行時讀寫而準備 的存儲層為容器存儲層。容器存儲層的生存周期和容器一樣,容器消亡時,容器存儲層也隨之消亡。因此,任何保存于容器存儲層的信息都會隨容器刪除而丟失。
容器不應該向其存儲層內寫入任何數據,容器存儲層要保持無狀態化。所有的文件寫入操作,都應該使用數據卷(Volume)、或者綁定宿主目錄,在這些位置的讀寫會跳過容器存儲層,直接對宿主(或網絡存儲)發生讀寫,其性能和穩定性更高。
數據卷的生存周期獨立于容器,容器消亡,數據卷不會消亡。因此,使用數據卷后,容器刪除或者重新運行之后,數據卻不會丟失。
倉庫(Repository)鏡像構建完成后,可以很容易的在當前宿主機上運行,但是,如果需要在其它服務器上使用這個鏡像,我們就需要一個 集中存儲、分發鏡像 的服務,Docker Registry 就是這樣的服務。一個 Docker Registry 中可以包含多個倉庫(Repository);每個倉庫可以包含多個標簽(Tag);每個標簽對應一個鏡像。
通常,一個倉庫會包含同一個軟件不同版本的鏡像,而標簽就常用于對應該軟件的各個版本。我們可以通過 <倉庫名>:<標簽> 的格式來指定具體是這個軟件哪個版本的鏡像。如果不給出標簽,將以 latest 作為默認標簽。以 Ubuntu 鏡像 為例,ubuntu 是倉庫的名字,其內包含有不同的版本標簽,如,14.04, 16.04。我們可以通過 ubuntu:14.04,或者 ubuntu:16.04 來具體指定所需哪個版本的鏡像。如果忽略了標簽,比如 ubuntu,那將視為 ubuntu:latest。
倉庫名經常以 兩段式路徑 形式出現,比如 jwilder/nginx-proxy,前者往往意味著 Docker Registry 多用戶環境下的用戶名,后者則往往是對應的軟件名。但這并非絕對,取決于所使用的具體 Docker Registry 的軟件或服務。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27472.html
摘要:初識是什么是一個開源的應用容器引擎,基于語言并遵從協議開源。容器是完全使用沙箱機制,相互之間不會有任何接口更重要的是容器性能開銷極低。命令為,如下由此可知,我們新打包的鏡像的為。登錄賬號再輸入自己的賬號密碼即可。 初識Docker Docker是什么? ??Docker 是一個開源的應用容器引擎,基于?Go 語言并遵從Apache2.0協議開源。??Docker 可以讓開發者打包他們的...
摘要:至于很具體的操作指令,比如怎么安裝,怎么和來跑一個簡單的,請參考官方文檔部分的或者也可參考文末的一些參考資料參考資料官方文檔入門教程系列簡明教程使用演示中文系列資源從入門到實踐作者更多文章個人網站 docker入門概覽 標簽 : docker [TOC] 本文對docker進行大致介紹,包括概述,安裝,簡單使用,架構,基本原理等方面 寫在前面 本文是自己學習docker的一個記錄...
摘要:入門系列之一在一個容器里運行指定的應用入門系列之二使用制作包含指定應用的鏡像本文我們會介紹如何將這個本地制作好的鏡像發布到,讓全世界其他愛好者能夠使用您的鏡像。首先您得在上注冊一個帳號然后創建一個新的,用于存放鏡像。 這個系列的前兩篇文章,我們已經把我們的應用成功地在Docker里通過nginx運行了起來,并且用dockerfile里制作好了一個鏡像。 Docker入門系列之一:在一...
摘要:從命名上就知道這是一篇簡單粗暴的新手入門教程,為什么要簡單粗暴我認為有自學能力的人幫他入門就夠了,不能自學的一時半會兒也教不會,不符合入門教程的初衷,建議出門左拐去找找視頻教程本章目標大概了解是個什么玩意知道常用的指令參數能啟動一個容器不然 從命名上就知道這是一篇簡單粗暴的docker新手入門教程, 為什么要簡單粗暴? 我認為有自學能力的人幫他入門就夠了, 不能自學的一時半會兒也教不會...
摘要:前言其實接觸也有一段時間了,但是一直沒有做下總結,現在網上關于的介紹也有很多了,本著好記性不如爛筆頭的原則,還是自己再記錄一波吧。實現目標安裝探索基本概念及用法環境準備位,內核版本不低于安裝以下命令均需在權限下執行。 showImg(https://segmentfault.com/img/remote/1460000017894270?w=538&h=344); 前言 其實接觸 do...
摘要:原文地址零基礎入門指南一介紹簡介源代碼托管在上,公司開源的一個基于技術之上構建的容器引擎,基于語言并遵從協議開源。通過等實現內核虛擬化技術,并提供容器的資源隔離與安全保障等。 原文地址:Docker零基礎入門指南(一):Docker介紹 Docker簡介 Docker源代碼托管在 GitHub上,Docker 公司開源的一個基于LXC技術之上構建的Container容器引擎,基于Go...
閱讀 1946·2021-11-15 17:58
閱讀 2133·2021-10-19 11:45
閱讀 3490·2021-09-02 15:40
閱讀 2599·2021-07-25 10:50
閱讀 3748·2019-08-30 15:56
閱讀 3151·2019-08-30 12:44
閱讀 1031·2019-08-26 13:38
閱讀 1874·2019-08-23 18:29