docker學習筆記01

Docker 最初是 dotCloud 公司創始人 Solomon Hykes 在法國期間發起的一個公司
內部項目

它 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然後發佈到任何流行的 Linux或Windows 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口

Docker 使用 Google 公司推出的 Go 語言 進行開發實現,基於 Linux 內核的
cgroup, namespace, 以及 AUFS 類的 Union FS 等技術對進程進行封裝隔離,
屬於操作系統層面的虛擬化技術。 由於隔離的進程獨立於宿主和其它的隔離的進
程, 因此也稱其爲***容器***

Docker 包括三個基本概念
鏡像( Image)
容器( Container)
倉庫( Repository)

一: Docker 鏡像( Image)

Docker 鏡像可以看作是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建之後也不會被改變。這裏比如官網提供的centos 鏡像就是一套完整的操作系統鏡像
注意:
鏡像中有個非常重要的概念——分層存儲
因爲鏡像包含操作系統完整的 root 文件系統, 其體積往往是龐大的(鏡像就相當於一個操作系統),因此在Docker 設計時, 就充分利用 Union FS 的技術, 將其設計爲分層存儲的架構。

所以嚴格來說, 鏡像並非是像一個 ISO 那樣的打包文件, 鏡像只是一個虛擬的概念, 其 實際體現並非由一個文件組成,而是由一組文件系統組成, 或者說, 由多層文件系 統聯合組成。

所以在鏡像構建時, 會一層層構建, 前一層是後一層的基礎。 每一層構建完就不會再發生改變, 後一層上的任何改變只發生在自己這一層。

比如, 刪除前一層文件的操作,實際不是真的刪除前一層的文件, 而是僅在當前層標記爲該文件已刪除。 在最終容器運行的時候, 雖然不會看到這個文件, 但是實際上該文件會一直跟隨鏡像。 因此, 在構建鏡像的時候, 需要額外小心, 每一層儘量只包含該層需要添加的東西,任何額外的東西應該在該層構建結束前清理掉。

分層存儲的好處是可以用之前構建好的鏡像作爲基礎層, 然後進一步添加新的層, 以定製自己所需的內容, 構建新的鏡像。

一: Docker 容器( Container)

鏡像( Image) 和容器( Container) 的關係是相伴相生的關係,容器是鏡像的運行時實例。也就是靜止的時候是鏡像,當我們啓用docker的時候鏡像就會變成容器,總結來說,容器的實質是鏡像的進程
雖然它是一個進程,但是和當前部署它的宿主機的其他進程是由很大的區別的:容器進程運行於屬於自己的獨立的 命名空間。

因此容器可以擁有自己的網絡配置、自己的進程空間, 甚至自己的用戶 ID 空間。 容器內的進程是運行在一個隔離的環境裏, 使用起來, 就好像是在一個獨立於宿主的系統下操作一樣。(感覺就是以前windows上安裝的vmware虛擬機一樣)

鏡像一個非常重要的概念是分層存儲, 容器也是如此。 每一個容器運行時, 是以鏡像爲
基礎層, 在其上創建一個當前容器的存儲層, 我們可以稱這個爲容器運行時讀寫而
準備的存儲層爲容器存儲層。

危險提示
容器存儲層的生存週期和容器一樣, 容器消亡時, 容器存儲層也隨之消亡。 因此,
任何保存於容器存儲層的信息都會隨容器刪除而丟失(包括你的mysql、redis、或者上傳的文件)

按照 Docker 最佳實踐的要求, 容器不應該向其存儲層內寫入任何數據, 容器存儲
層要保持無狀態化。 所有的文件寫入操作, 都應該使用 數據卷( Volume) 、 或者
綁定宿主目錄, 在這些位置的讀寫會跳過容器存儲層, 直接對宿主(或網絡存儲)發
生讀寫, 其性能和穩定性更高(就是不要把你需要存儲的數據存儲到容器上,你需要直接存儲到安裝docker的宿主機上去)

數據卷的生存週期獨立於容器, 容器消亡, 數據卷不會消亡。 因此, 使用數據卷
後, 容器可以隨意刪除、 重新 run , 數據卻不會丟失

三: Docker 倉庫( Repository)

當我們創建了一個我們可以在宿主機上方便,輕易使用的鏡像後,我們往往希望可以運用到很多地方而不僅僅是我們當前宿主機去使用,把多個鏡像存儲在一起(爲了方便給每個鏡像起名一個tag)這就形成了多個鏡像組成的Docker 倉庫

通常, 一個倉庫會包含同一個軟件不同版本的鏡像, 而標籤(我們起的別名)就常用於對應該軟件的各個版本。 我們可以通過 <倉庫名>:<標籤> 的格式來指定具體是這個軟件哪個版本的鏡像。 如果不給出標籤, 將以 latest (也就是當前發佈的最後版本)作爲默認標籤

安裝:

可以參考網上的安裝步驟,注意下你當前服務器的版本就好參考文章:

https://www.cnblogs.com/qgc1995/archive/2018/08/29/9553572.html

安裝完畢之後systemctl start docker啓動docker,然後systemctl enable docker加入開機啓動最後輸入docker version ,如果顯示出來一些運行結果,證明安裝完成了

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