Docker簡介以及安裝

                        Docker簡介以及安裝html

                                        做者:尹正傑git

版權聲明:原創做品,謝絕轉載!不然將追究法律責任。github

 

 

一.什麼是容器docker

1.一種虛擬化方案shell

  與傳統的虛擬機不一樣,傳統的虛擬機是經過中間層將一臺或多臺獨立的機器虛擬運行在物理硬件之上。而容器則是直接運行在操做系統內核之上的用戶空間,所以容器虛擬化也被稱做操做系統虛擬化。 

2.操做系統級別的虛擬化編程

  因爲依賴操做系統的特性,因此容器只能運行在底層操做系統相同或類似的操做系統。Docker使用的容器技術正是依賴於Linux內核的Namespace和Cgroups(Control Group)等特性。因此Docker上只能運行Linux類型的操做系統,而不能運行Windows操做系統。這是Docker技術和虛擬化技術在系統的靈活性上的劣勢。

3.對比容器技術和虛擬機windows

  磁盤佔用空間小
    一個顯而易見的區別就是磁盤佔用空間更少。使用虛擬機部署應用,不但包括了應用和其依賴的庫還須要包含完整的操做系統。本來只須要幾十兆(M)的應用卻須要幾個G的操做系統來支撐。而容器技術只須要包含應用和其所依賴的庫,這樣資源佔用就大大減小。

  硬件利用率
    另外,虛擬機須要模擬硬件的行爲,對內存和CPU的損耗也至關的大,因此一樣配置的服務器,使用容器技術要比使用虛擬機可以提供更多的服務能力,服務更多的用戶。

4.爲何容器有這麼多特色直到docker的出現才被關注起來呢?服務器

容器技術的複雜性:
  一個重要的緣由就是容器技術的複雜性,容器自己它就比較複雜,它依賴於Linux自己的不少特性。並且它不容易安裝也不容易管理而實現自動化。而docker就是爲了改變這一切而出現的。因此說Docker的虛擬化技術是容器的一種。

 

二.什麼是Docker網絡

  Docker是一個可以把開發的應該程序自動部署到容器的開源引擎。它使用Golang語言編寫。在2013年初,由dotCloud公司發佈,基於Apache 2.0開源受權協議發行。Docke在虛擬化的容器執行環境中,增長一了一個應用程序部署引擎。該引擎目標就是提供一個輕量快速的環境可以運行開發者程序並方便高效的將程序從開發者環境部署到測試環境,而後再從測試環境部署到生產環境。

  GitHub地址:https://github.com/docker/docker

 

三.Docker的特色架構

1.提供簡單輕量的建模方式

  Docker很是容易上手,用戶只須要幾分鐘就能夠把本身的程序Docker化,大多數Docker容器只須要不到一秒就能夠運行起來。因爲去除了管理程度的開銷,Docker容器擁有很是高的性能,同時,同一臺宿主機中,也能夠運行更多的容器,使用戶能夠儘量的充分利用系統資源。 

2.職責的邏輯分離

  使用Docker開發者只須要關係容器中運行的應用程序,而運維人員只須要關係如何管理容器。Docker設計的目的就是要增強開發人員寫代碼的開發環境與應用要部署的生產環境的一致性。

3.快速高效的開發生命週期

  Docker的目標之一是縮短代碼。從開發,測試,到部署上線運行的週期,讓你的應用程序具有可移植性。在容器中開發,以容器的形式交互和分發。這樣以開發,測試,生產都是用相同的環境,也就避免了額外的調試和部署上的開銷。這樣就可以有效縮短產品上線的週期。

4.鼓勵使用面向服務的架構

  Docker推薦單個容器只運行一個應用程序或者進程,這樣就造成了一個分佈式的應用程序模型。在這種模型下,應用程序或服務均可以表示爲一系列內部互聯的容器,從而使分佈式部署應用程序,擴展,或者調試應用程序都變得很是簡單。這樣就可以避免在同一臺服務器上部署不一樣服務時可能帶來的服務之間的互相影響。這樣在出現問題的時候也比較容易定位問題的所在。

 

四.Docker的使用場景

1.使用Docker容器開發,測試,部署服務

  由於Docker自己很是輕量化,因此本地開發人員能夠構建並分享Docker容器。容器能夠在開發環境中建立,而後在提交到測試,最終進入生產環境。

2.建立隔離的運行環境

  在不少企業應用中,同一服務的不一樣版本可能服務不一樣的用戶。那麼使用Docker能夠很是容易的建立不一樣的生產環境來運行不一樣的服務。

3.搭建測試環境

  因爲Docker的輕量化,因此開發者很容易在本地搭建測試環境,來測試程序在不一樣系統下的兼容性,甚至是搭建集羣部署的測試,而學生也能夠很容易利用Docker來搭建學習開發的環境。

4.構建多用戶平臺即服務(PaaS)基礎設施

5.提供軟件及服務(SaaS)應用程序

6.高性能,超大規模的宿主機部署。

  目前,AWS等公有云服務都提供了對Docker技術的支持,使開發者能夠藉助雲平臺,利用Docker能夠搭建PaaS,SaaS等服務。同時,也有不少開發者在使用OpenStack和Docker結合提供PaaS,SaaS服務。使得Docker在雲計算領域有着很是廣闊的領域。

 

五.Docker的基本組成

1.Docker Client(客戶端)

2.Docker Daemon(守護進程)

  C/S架構
    咱們先看一下Docker的客戶端和守護進程,Docker是C/S架構的程序,Docker的客戶端向Docker的服務器端(也就是Docker的守護進程)發起請求,Docker守護進程處理完請求並返回結果。

  本地/遠程
    Docker的客戶端訪問Docker服務端既能夠在本地也能夠經過遠程來訪問。咱們經過Docke客戶端執行各類命令,而後Docker客戶端會將這些命令發送給守護進程,守護進程的執行結果還會傳回客戶端,使咱們能夠經過客戶端來查看命令運行的結果。

  博主推薦閱讀:
    https://www.cnblogs.com/yinzhengjie/p/10508291.html

 

3.Docker Image(鏡像)

  Docker容器的基石
    鏡像是Docker容器的基石,容器基於鏡像啓動和運行,鏡像就比如容器的源代碼,保存了用於啓動容器的各類條件。

  層疊的只讀文件系統
    Docker鏡像是一個層疊的只讀文件系統,它的最底端是一個引導文件系統(即bootfs,這很像典型的Linux引導文件系統),Docker用戶幾乎永遠不會和引導文件系統有交互。實際上,當一個容器啓動後,它將會被移到內存中,而Docker的引導文件系統將會被卸載。而Docker文件系統的第二層是rootfs文件系統,它位於引導文件之上,root文件系統能夠是一種或是多種的操做系統,好比Ubantu,CentOS等等。在傳統的系統引導中,root文件系統會最早以只讀的形式加載,當引導結束並完成了完整性的檢查後,他纔會被切換爲讀寫模式。可是在Docker裏,root的文件系統永遠只能是隻讀狀態。

  聯合加載(union mount)
    Docker利用聯合加載技術,又會在root文件系統之上加載更多的只讀文件系統。聯合加載指的是一次同時加載多個文件系統。可是在外面開起來只能看見一個文件系統。聯合加載會將各層文件系統疊加在一塊兒,這樣最終的文件系統會包含全部的底層文件和目錄。
    Docker將知足以上三點的文件系統稱之爲鏡像。一個鏡像能夠放到另外一個鏡像的底部,對於下面的鏡像成爲父鏡像,能夠依次類推,直到鏡像佔的最底部,最底部的鏡像成爲基礎鏡像。

 

4.Docker Container(容器)

  經過鏡像啓動
    Docker容器經過鏡像來啓動,Docker容器是Docker的執行來源,容器中能夠運行客戶的一個或多個進程。

  啓動和執行階段
    若是說鏡像是Docker生命週期的構建和打包階段,那麼容器就是啓動和執行階段。當一個容器啓動時,Docker會在鏡像的最頂層加載一個讀寫文件系統(也就是一個可寫的文件層)。咱們在Docker中運行的程序,就是在這個層中進行執行的。

  寫時複製(copy on write)
    當Docker第一次啓動一個容器時,初始的讀寫層是空的,當文件系統發生變化時,這些變化都會應用到這一層上。好比,若是想修改一個文件,這個文件首先會從該讀寫層下面的只讀層複製到該讀寫層,該文件的只讀版本依然存在,可是已經被讀寫層中的該文件副本所隱藏。這就是Docker種一個重要的技術,寫時複製。

 

 

  每一個只讀鏡像都是隻讀的,而且之後永遠不會變化,當建立一個新容器時,Docker會構建出來一個鏡像棧(如上圖),在棧的最頂層添加可寫層(讀寫層),這個讀寫層加上下面的只讀鏡像層以及一些配置數據就構成了一個容器。容器的這種特色加上鏡像的分紅框架使咱們能夠快熟的構建鏡像並容許包含咱們本身的應用程序和服務的容器。

5.Docker Registry(倉庫)

Docker用倉庫來保存用戶構建的鏡像,倉庫分爲公有和私有兩種,Docker公司本身提供了一個公有的私有倉庫,叫作「Docker Hub」。咱們能夠在「Docker Hub」上去註冊帳號,分享並保存本身的鏡像。目前,"Docker Hub"已經有了豐富的Docker鏡像。固然,咱們能夠經過「Docker Hub」來查找咱們須要的鏡像,爲咱們節省了不少構建鏡像的時間。固然咱們也能夠架設本身私有的倉庫。

 

 

 

六.Docker容器相關技術簡介

  Docker依賴的Linux內核2個重要特性,一個是Namespaces命名空間,一個是Control groups(cgroups)控制組,接下來咱們就來了解一下這2個特性。瞭解這2個特性可以更好的幫助咱們理解Docker的資源分配和管理。

1>.Namespaces命名空間

  咱們知道不少編程語言都包含了命名空間的概念,咱們能夠理解命名空間是一種封裝的概念,而封裝自己是就是實現了代碼隔離。那在操做系統中命名空間提供了什麼呢?它提供的是系統資源的隔離,系統資源包括了進程,網絡,文件系統等等。實際上,Linux內核實現命名空間的主要目的之一就是爲了實現輕量級虛擬化服務,也就是咱們說的容器。在同一個命名空間下的進程,能夠感知彼此的變化,而對其餘命名空間的進程而一無所知。這樣,就可讓容器中的進程產生一個錯覺,保護它本身置身於一個獨立的系統環境中,以此來達到獨立和隔離的目的。

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

1 a>.PID(Process ID) 進程隔離 2 b>.NET(Network) 管理網絡接口 3 c>.IPC(InterProcess Communication) 管理跨進程通訊的訪問 4 d>.MNT(Mount)管理掛載點 5 e>.UTS(Unix Timesharing System)隔離內核和版本表示

2>.Control groups(cgroups)控制組

  用Namespaces命名空間隔離的資源是如何管理起來的呢?這個時候就須要用到Control groups來完成了。Control groups是Linux內核提供的一種能夠限制,記錄,隔離進程組的所使用物理資源的機制。最初,是由Google工程師來提出的。而且在2007年的時候被」Linux kernel 2.6.24「版本整合進來,能夠說cgroups就是爲了實現容器技術而生的。沒有cgroups就沒有容器的今天。

Control groups(cgroups)控制組提供瞭如下功能:

1 a>.資源限制(好比,memory子系統能夠爲進程組設置一個內存資源的使用上限,一旦進程組使用的資源達到了限額,那他在申請資源的時候就會發出資源上限的消息。) 2 b>.優先級設定(它能夠設定哪些進程組能夠設定更大的CPU或是磁盤I/O資源) 3 c>.資源計量(它能夠計算出進程組使用了多少進程資源,尤爲是在計費系統中,這一點很是重要。) 4 d>.資源控制(它能夠將進程組掛起和恢復。) 

3.Docker容器的能力

咱們以及瞭解到了Namespaces和cgroups的特性,這些特性個Docker帶來了如下幾個能力:

1 a>.文件系統的隔離:每一個容器都有本身的root文件系統; 2 b>.進程隔離:每一個容器都運行在本身的進程環境中; 3 c>.網絡隔離:容器鍵的虛擬網絡接口的IP地址都是分開的; 4 d>.資源隔離和分組:使用cgroups將CPU和內存之類的資源獨立分配給每一個Dorcker容器;

 

七.Docker的安裝和部署

官方安裝文檔地址:https://docs.docker.com/engine/installation/

1.在Ubantu服務器上安裝Docker

a>.安裝ubantu維護的版本

 

查看docker版本

 

利用docker容器運行命令

 

2.在windows操做系統上安裝docker

  GitHub地址:https://github.com/boot2docker/boot2docker

  安裝包下載地址:https://github.com/boot2docker/windows-installer/releases

  咱們從上面的介紹中知道docker是Linux容器技術的一種實現,它提供了操做系統級別的虛擬化,而且依賴於Linux內核的Namespace和Cgroups等特性。因此,從本質上來講,docker只能運行在Linux系統中而且也只能運行Linux系統的容器。那麼在windows中咱們如何運行docker呢?

  其實是須要經過虛擬機來實現,目前咱們經過"Boot2Docker for Windows"的這一整套的運行環境,那麼"Boot2Docker for Windows"包含哪些組件呢?分別是:Boot2Docker Linux ISO(正是一個爲docker定製的虛擬機鏡像,其中包含了docker的運行環境),Virtualbox(提供虛擬機服務的軟件),MSYS-git(提供了一個shell 的運行環境),管理工具等四個部分組成。

  注意,windows運行docker是必須依賴雲虛擬機的,可是在Linux系統上,docker是能夠直接運行在宿主機上的喲。從理論上來講,docker目前並不能支持windows應用的部署,可是微軟公司依然對docker基於了厚望。目前,在Windows Azure(微軟的公有云服務)中,已經經過Linux鏡像提供了docker的支持,而且也提供了docker的鏡像倉庫,同時,微軟也聲稱將在下一代的windows server(2016)中內建對docker的支持。目前咱們看到Docker Windows CLI已經提供了源碼。開發者能夠經過GitHub去下載,在本地進行編譯。因此,在將來,docker在windows server中也是一個重要的組成部分。

a>.點擊下一步

 

b>.自定義安裝路徑(不推薦使用中文路徑)

 

c>.選擇全部的組件

 

d>.肯定安裝

 

e>.等待安裝完成

 

f>.若是有彈窗提示,能夠勾選信任按鈕

 

g>.安裝完畢

 

h>.查看docker版本

 

3.在OS X中安裝docker

  和windows同樣,docker也不能直接運行在蘋果的操做系統中,也是須要Boot2Docker來實現。那什麼是Boot2Docker呢?首先,它包含了一個輕量級的Linux發行版,專門爲Docker定製,可以運行docker的守護進程;第二,就是Virtualbox VM,它用來裝載守護docker守護進程的Linux系統;第三,是docker的客戶端,用來和docker的守護進程進行通訊;第四,是一些管理工具。

  GitHub地址依然是:https://github.com/boot2docker/boot2docker

  Boot2Docker下載地址是:https://docs.docker.com/docker-for-mac/install/#download-docker-for-mac

相關文章
相關標籤/搜索