Docker系列1:Docker與容器基礎知識介紹

1.什麼是容器

docker必需要要說容器,因此咱們須要首先來講一下容器的概念。linux

  • 其實容器就是一工具,泛指能夠容納其餘的物品工具,能夠用來存儲、運輸物品;物品能夠放在容器中的,而容器能夠保護物品。nginx

常見的容器:算法

  • 瓶子docker

  • 籃子apache

  • ubuntu

  • 集裝箱windows

  • 櫃子後端

2.虛擬化技術

說容器,就必須對比容器和虛擬化技術,首先就說虛擬化技術。centos

咱們實現虛擬化技術主要有兩種tomcat

方式1:主機虛擬化

這裏所虛擬化的是整個硬件平臺,好比vmwarevirtual box,他們所虛擬出來的是一個完整的裸機,咱們能夠再這個裸機上隨意的安裝os和軟件。

主機虛擬化是分爲兩類的

type-I(類型1的虛擬化)

type-ii(類型2的虛擬化)

程序運行在虛擬機中,確定比運行在物理機中性能差,那麼爲何還要將其運行在虛擬機中?

  • 複用:好比須要運行兩個tomcat,讓其工做在虛擬機中,就能夠實現8080套接字不衝突了

  • 隔離:一個進程在虛擬機中作任何操做,對於其餘虛擬機中的進程和物理機中的進程都是沒有影響的

那麼咱們怎麼即實現隔離,又不影響性能呢?

  • 一個主機在運行起來以後,分爲內核空間和用戶空間,在用戶空間中就是運行用戶空間進程。

  • 默認全部的用戶進程都是在同一個用戶空間的,那麼此時咱們要想隔離多個進程的運行環境,就能夠建立多個用戶空間,並且多個用戶空間是互相隔離的

  • 這裏一個一個性對獨立的用戶空間就是咱們所謂的linux 容器

使用容器,目的是爲了建立一個隔離的環境,在這個隔離環境環境中,應該至少包括隔離以下幾個層面

  • UTS:主機名和域名

  • Mount:工做目錄,也稱之爲安裝樹

  • IPCipc是必需要進行隔離的,若是不隔離IPC,那麼多個進程就能夠互相通訊,那麼就不存在隔離了

  • PID:隔離PID也是必須的

  • user 和group:在容器中也要有獨立的用戶,好比都要有root ,可是這個root確定不能都是真正的root,由於若是是真root用戶的話,就有權限刪除其餘容器中的內容了。

  • network:隔離網絡是最爲重要的,由於一個容器做爲一個獨立的單元工做,那麼就須要爲每一個容器準備一個網卡、接口、tcp/IP協議棧。

這裏有個概念就是namespaces(名稱空間)

  • linux的內核原生就支持了6種名稱空間,在構建容器的時候,就是從這6個名稱空間中抽取出來一部分構成一個容器。

各類名稱空間與所支持的內核版本

圖片1.png

  • 從這裏能夠看到,若是想更好的使用容器技術,centos6就不適合了。

3.LXC

所謂的LXC,其實就是linux Container,這是一種基於模板的方式實現容器技術應用的解決方案 ,在LXC中包含了一組工具

  • lxc-create:快速建立容器的命令

4.什麼是Docker

  • 其實docker就是lxc的二次封裝發行版,他是用lxc做爲容器引擎,同時使用鏡像技術,將一個操做類型容器所須要的文件提取安裝好,並打成一個包

  • 當建立容器的時候,只須要將這個包複製N份並啓動容器,這樣就行了,速度很快。

  • 當用docker建立容器的時候,其實就是用lxc create來建立一個容器。

  • docker極大的下降了容器的使用難度

用來存放鏡像的服務器,咱們稱之爲docker倉庫,在這個倉庫中有咱們幾乎能想到的所有的容器

  • docker使用了一種更爲精巧的設計,那就是每一個容器中僅僅運行一個進程。

  • 好比在一個容器中僅僅運行nginx,若是要用apache,就須要下載另外一個容器了,此時的nginxapache就可會經過容器間的通訊邏輯進行通訊。

  • 這裏讓每一個進程運行在一個獨立的容器中,並且咱們也知道容器是一個隔離的環境,那麼這樣一來,一個進程出現了問題,對於其餘的進程是不會受到影響的。

 

使用docker另個一好處:真正的實現的一次編寫,處處運行了

  • 如今咱們的生成環境中,都是多版本並行的,如同時用着centos5 6 7,同時還用着windowsubuntu等系統,若是這個時候要開發一個程序在全部的平臺都能運行,這個時候每每是須要有好幾個團隊分別開發面向不一樣系統的版本。

  • 而有了docker之後,就只須要開發一個版本,並將這個軟件作到一個docker鏡像中,這樣只須要將這個鏡像放到任意的平臺上,只要這個平臺有docker,那麼就能夠運行這個鏡像,同時這個程序也就能夠開始運行了,因此,軟件開發的難度大大下降了。

 

再來講docker鏡像的構建方式

  • docker鏡像的構建方式是很特殊的,稱之爲:分層構建、聯合掛載

以構建nginx鏡像爲例解釋一下

  • 先作一個最底層、純淨的系統,好比最小化的centos6系統

  • 在這個centos系統的基礎上安裝一個nginx就構成了鏡像

注意,構建的鏡像只包含nginx自己,而不包含centos操做系統內容

  • 這個鏡像就包含了兩層,這兩層共同構成了運行在了linux上的centos

  • 當啓動容器的時候,須要將這兩層都掛載上去就能夠用了,這就是分層構建、聯合掛載,

  • 若是須要啓動多個鏡像,其中有nginxtomcatapache等,如都是基於centos的,因此在下載的時候,只須要下載一個centos,再分別下載須要層就能夠了。

爲什麼能實現多個上層應用公用底層系統?

  • 是由於底層的centostomcat都是隻讀的。

  • 當用戶在所建立的容器中執行寫操做的時候,底層是隻讀沒法修改

  • 因此,這個時候就會底層的資源複製一份上來,而後在複製的這層中進行修改,這種機制稱之爲:寫時複製

關於容器編排工具

  • 好比咱們有100個主機能夠運行docker,當須要啓動容器的時候,只須要編排工具發送指令,這個編排工具根據算法從後端的這幾種找一個來啓動docker

  • 再好比,咱們要運行amp的環境,這裏三個程序就是三個容器,這三個容器的啓動順序是有關係的,因此就須要設置啓動的順序,這樣編排工具還須要能夠根據順序依次啓動。

編排有不少:

  • 第一個:docker本身的編排工具:這裏實際上是三個工具的組合,machine+swarm+compose

  • 第二個:ASF的,meos+marathon

  • 第三個:google的,kubbernets,簡稱k8s,這是由於ks間有8個字母

5.對比kvm虛擬化

  • kvm:基於硬件虛擬化技術,是須要cpu支持的,是虛擬出來一個虛擬機,虛擬機管理器是須要佔用額外的系統資源的,也就是即便不跑任何虛擬機,都須要佔用6%左右的系統資源

  • docker:基於內核虛擬化技術,沒有虛擬任何東西,可是是經過隔離技術實現的,因此不會對系統帶來額外的開銷。

圖片3.png

6.對比openstack虛擬化

圖片4.png

  • 真正的docker是不該該當作虛擬機用的(雖然能夠)

7.docker架構

圖片5.png

整個架構分爲了三個部分

1:客戶端:cient

2:服務器端:docker_hosts

3:倉庫端:registery

各個部分之間通訊是基於http或者https進行通訊的

docker_host部分

    服務器端就是靠運行docker daemon來運行在守護進程模式的下的,此時的docker就會監聽在一個套接字之上了,並且docker是支持三種套接字的

ipv4套接字

ipv6套接字

unix socket套接字:也就是監聽在一個本地文件上。

docker倉庫

  • 首先docker的registery中提供了docker鏡像的存儲功能,並且還提供了用戶登陸下載鏡像時候的認證功能。

  • 另外dockerregistery中,還包括repository,一個repository就是一個目錄,在一個目錄中只存儲一個應該程序的鏡像,好比要建立的nginx的鏡像,那麼就建立一個目錄,這個目錄名就是nginx全部的nginx的鏡像都是放在同一個目錄下。

  • 由於如今有多個鏡像,那麼若是想惟一的標識一個鏡像,就須要藉助於 tag(標籤),好比第一個1.9 1.11 1.23,這樣經過repo名稱和標籤名的組合,就能夠惟一的標識一個鏡像。

圖片6.png

  • docker官方提供有docker倉庫,可是其實也有第三方提供的,並且也能夠本身作docker倉庫。

5.docker的應用場景

1.簡化配置

  • 工做中的環境有生產環境、測試環境、開發環境測試環境又分爲功能測試、性能測試;生產環境又分爲預生產環境和生成環境。

  • 這麼多的環境,環境不一樣,配置也就不一樣,若是配置不一樣,那麼就可能會致使上線失敗,使用docker就能夠簡化配置,作一個鏡像,使用這個鏡像就能夠完成部署上線。

2.代碼流水線管理

  • 開發人員在開發完成之後,將代碼傳遞到服務器上,而後測試人員能夠從服務器上拉去代碼進行測試,測試完成之後,開始進行發佈,首先就是進行灰度發佈,而後纔是正事發布。

3.開發效率

  • 新員工入職後配置各類環境,這個過程就每每是比較麻煩的,那麼這裏,咱們就能夠用docker作個容器輕鬆來實現。

4.應用隔離

  • 各個應用之間互相是隔離的。

5.服務器整合

  • 也就是說一個服務器能夠跑多個容器實例

6.調試能力

  • 處理bug的能力

7.多租戶

8.快速部署

  • docker是秒級的,啓動速度極其快。

  • 好比以前說過,春晚的微信搶紅包,用的是docker,說是能夠1秒啓動1000docker程序。

大中型公司選擇docker的理由

技術儲備

跟上節奏,提高自身技術

符和當前業務需求

    (目前廣泛都是第二個,根本都不是第一個和第三個)

相關文章
相關標籤/搜索