本文章是在網(wǎng)易云課堂的課程學(xué)習(xí)中編寫,部分圖片從網(wǎng)易云課堂ppt引用
容器化專題
導(dǎo)學(xué):
偏重于理解和使用,以核心概念為主,跟著操作為輔,學(xué)會(huì)查閱官方文檔,理解容器化技術(shù)在項(xiàng)目中的應(yīng)用
重點(diǎn):
1、要理解docker和k8s的使用,知道有哪些功能,知道如何使用
2、了解容器化帶來(lái)的好處,知道容器化技術(shù)具備的功能
難點(diǎn):
1、要了解docker和k8s的架構(gòu),理解容器編排的概念
2、了解操作系統(tǒng)、網(wǎng)絡(luò)的概念
首先學(xué)習(xí)Docker
分為六大模塊進(jìn)行學(xué)習(xí),列表如下:
1、Docker基礎(chǔ)概念
2、Docker安裝、卸載和加速
3、Docker鏡像、容器的常用命令
4、利用 Docker file 構(gòu)建私有鏡像
5、運(yùn)行Java程序
6、搭建Docker私有倉(cāng)庫(kù)
為避免篇幅過(guò)長(zhǎng),分成六篇文章來(lái)記錄。本文章介紹的是基礎(chǔ)概念模塊
一、Docker基礎(chǔ)概念
【Docker介紹】
1、Docker是用Go語(yǔ)言進(jìn)行開(kāi)發(fā)實(shí)現(xiàn),基于Linux內(nèi)核的cgroup、namespace以及 AUFS類的Union FS等技術(shù),對(duì)進(jìn)程進(jìn)行封裝隔離,屬于操作系統(tǒng)層面的虛擬化技術(shù)。由于隔離的進(jìn)程獨(dú)立于宿主和其它的隔離的進(jìn)程,因此也稱其為容器。
2、Docker在容器的基礎(chǔ)上,進(jìn)行了進(jìn)一步的封裝,從文件系統(tǒng)、網(wǎng)絡(luò)互聯(lián)到進(jìn)程隔離等等,極大的簡(jiǎn)化了容器的創(chuàng)建和維護(hù)。使得Docker技術(shù)比虛擬機(jī)技術(shù)更為輕便、快捷。
【Docker和傳統(tǒng)虛擬機(jī)的對(duì)比】
傳統(tǒng)虛擬機(jī)技術(shù):虛擬出一套硬件后,在其上運(yùn)行一個(gè)完整操作系統(tǒng),在該系統(tǒng)上再運(yùn)行所需應(yīng)用進(jìn)程;
Docker:容器內(nèi)的應(yīng)用進(jìn)程直接運(yùn)行于宿主的內(nèi)核,容器內(nèi)沒(méi)有自己的內(nèi)核,而且也沒(méi)有進(jìn)行硬件虛擬。因此容器要比傳統(tǒng)虛擬機(jī)更為輕便。

【為什么要使用Docker】
Docker優(yōu)勢(shì):更高效地利用系統(tǒng)資源、更快速的啟動(dòng)時(shí)間、一致的運(yùn)行環(huán)境、持續(xù)交付和部署部署、更輕松的遷移、更輕松的維護(hù)和擴(kuò)展。
【Docker架構(gòu)】
1、Docker主要分為三大塊:客戶端、主機(jī)、倉(cāng)庫(kù)
2、Docker工作模式:使用客戶端-服務(wù)器(C/S)架構(gòu)模式,使用遠(yuǎn)程API來(lái)管理和創(chuàng)建Docker容器。

相關(guān)概念介紹:
1)Docker鏡像:是用于創(chuàng)建Docker容器的模板
2)Docker容器:是獨(dú)立運(yùn)行的一個(gè)或一組應(yīng)用
3)Docker客戶端:通過(guò)命令行或其他工具,使用Docker的API與Docker的守護(hù)進(jìn)程進(jìn)行通信
4)Docker主機(jī):可以是物理機(jī)或虛擬機(jī),用于執(zhí)行守護(hù)進(jìn)程的倉(cāng)庫(kù)
5)Docker倉(cāng)庫(kù):用于保存鏡像,可以理解為代碼控制中的代碼倉(cāng)庫(kù),比如GitHub
6)Docker machine:是一個(gè)簡(jiǎn)化的docker安裝的命令行工具,通過(guò)簡(jiǎn)單的命令行即可在相應(yīng)平臺(tái)上安裝Docker
【Docker基本概念】
理解了Docker的下面三個(gè)基本概念,就理解了Docke的整個(gè)生命周期
1、鏡像(Image)
Docker鏡像相當(dāng)于一個(gè)特殊的文件系統(tǒng)
以操作系統(tǒng)為例,操作系統(tǒng)分為內(nèi)核和用戶空間。對(duì)于Linux而言,內(nèi)核啟動(dòng)后,會(huì)掛載root文件系統(tǒng)為其提供用戶空間支持。而Docker鏡像(Image) , 就相當(dāng)于是一個(gè)root文件系統(tǒng),除了提供容器運(yùn)行時(shí)所需的程序、庫(kù)、資源、配置等文件外,還包含了一些為運(yùn)行時(shí)準(zhǔn)備的配置參數(shù)(如匿名卷、環(huán)境變量、用戶等)。鏡像不包含任何動(dòng)態(tài)數(shù)據(jù),其內(nèi)容在構(gòu)建之后也不會(huì)被改變。
Docker鏡像分層存儲(chǔ)
Docker是分層存儲(chǔ)的架構(gòu),使得鏡像的復(fù)用、定制變得更為容易。鏡像是一個(gè)虛擬的概念,由一組多層的文件系統(tǒng)組成。鏡像構(gòu)建時(shí),是一層層地構(gòu)建,每一層構(gòu)建完不會(huì)再改變,所以在構(gòu)建每一層時(shí)盡量只包含該層需要添加的東西。還可以用之前構(gòu)建好的鏡像作為基礎(chǔ)層,進(jìn)一步添加新的層,定制自己所需的內(nèi)容,構(gòu)建新的鏡像。
2、容器(Container)
容器和鏡像的關(guān)系
類似于Java中的類和實(shí)例,鏡像是靜態(tài)的定義,容器是鏡像運(yùn)行時(shí)的實(shí)體。容器可以被創(chuàng)建、啟動(dòng)、停止、刪除、暫停等。
容器存儲(chǔ)層
是為容器運(yùn)行時(shí)讀寫而準(zhǔn)備的存儲(chǔ)層。容器也是分層存儲(chǔ)的,每一個(gè)容器運(yùn)行時(shí),是以鏡像為基礎(chǔ)層,在其上面創(chuàng)建一個(gè)當(dāng)前容器的存儲(chǔ)層,它的生命周期和容器一樣,所以任何保存在容器存儲(chǔ)層的信息都會(huì)隨容器刪除而丟失。
**注意:容器不應(yīng)該向存儲(chǔ)層內(nèi)寫入任何數(shù)據(jù),容器存儲(chǔ)層要保持無(wú)狀態(tài)化。所有文件寫入操作,都應(yīng)使用Volume數(shù)據(jù)卷,或綁定宿主目錄,這樣讀寫會(huì)跳過(guò)容器存儲(chǔ)層,直接對(duì)宿主(或網(wǎng)絡(luò)存儲(chǔ))發(fā)生讀寫,性能和穩(wěn)定性更高。
數(shù)據(jù)卷
生命周期獨(dú)立于容器,容器消亡,數(shù)據(jù)卷不會(huì)消亡。使用數(shù)據(jù)卷后,容器刪除或重新運(yùn)行后,數(shù)據(jù)不會(huì)丟失。
3、倉(cāng)庫(kù)(Repository)
Docker Registry
Docker Registry是集中存儲(chǔ)、分發(fā)鏡像的服務(wù),使得鏡像能夠在其他服務(wù)器上使用。
一個(gè)Docker Registry可以包含多個(gè)倉(cāng)庫(kù)(Repository),每個(gè)倉(cāng)庫(kù)可以包含多個(gè)標(biāo)簽,每個(gè)標(biāo)簽對(duì)應(yīng)一個(gè)鏡像。
通常一個(gè)倉(cāng)庫(kù)會(huì)包含同一個(gè)軟件不同版本的鏡像,標(biāo)簽就常用于對(duì)應(yīng)該軟件的各個(gè)版本。我們可以通過(guò)<倉(cāng)庫(kù)名>:<標(biāo)簽>的格式來(lái)指定具體是該軟件哪個(gè)版本的鏡像。如果不給出標(biāo)簽,將以最新的(latest)作為默認(rèn)標(biāo)簽。
舉個(gè)栗子:以centos鏡像為例,centos 是倉(cāng)庫(kù)的名字,其內(nèi)包含有不同的版本標(biāo)簽,如,6.9、7.5。我們可以通過(guò)centos:6.9,或者centos:7.5來(lái)具體指定所需哪個(gè)版本的鏡像。如果忽略了標(biāo)簽,比如centos,那將視為centos:latest。
Docker倉(cāng)庫(kù)
1)Docker?Registry公開(kāi)倉(cāng)庫(kù)
常用的Registry是官方的Docker Hub,這也是默認(rèn)的Registry。除此以外,還有CoreOS的Quay.io,CoreOS相關(guān)的鏡像存儲(chǔ)在這里。另外,還有Google 的Google Container Registry, Kubernetes 的鏡像使用的就是這個(gè)服務(wù)。
加速器:國(guó)內(nèi)的一些云服務(wù)商提供的針對(duì)Docker Hub的鏡像服務(wù)。常見(jiàn)的有阿里云加速器、DaoCloud 加速器等。使用加速器會(huì)直接從國(guó)內(nèi)的地址下載Docker Hub的鏡像,比直接從Docker Hub下載速度會(huì)提高很多。
國(guó)內(nèi)也有一些云服務(wù)商提供類似于Docker Hub的公開(kāi)服務(wù)。比如網(wǎng)易云鏡像服務(wù)、DaoCloud鏡像市場(chǎng)、阿里云鏡像庫(kù)等。
2)Docker?Registry私有倉(cāng)庫(kù)
用戶可以在本地搭建私有Docker Registry。Docker 官方提供了Docker Registry鏡像,可以直接使用做為私有Registry服務(wù)。
開(kāi)源的Docker Registry鏡像只提供了Docker Registry API的服務(wù)端實(shí)現(xiàn),足以支持docker命令,不影響使用。但不包含圖形界面,以及鏡像維護(hù)、用戶管理、訪問(wèn)控制等高級(jí)功能。在官方的商業(yè)化版本Docker Trusted Registry中,提供了這些高級(jí)功能。
除了官方的Docker Registry外,還有第三方軟件實(shí)現(xiàn)了Docker Registry API,甚至提供了用戶界面以及一些高級(jí)功能。比如,VMWare Harbor和Sonatype Nexus。