本文章是在網(wǎng)易云課堂的課程學習中編寫,部分圖片從網(wǎng)易云課堂ppt引用
容器化專題
導學:
偏重于理解和使用直晨,以核心概念為主,跟著操作為輔,學會查閱官方文檔焚刺,理解容器化技術在項目中的應用
重點:
1敛摘、要理解docker和k8s的使用,知道有哪些功能乳愉,知道如何使用
2兄淫、了解容器化帶來的好處,知道容器化技術具備的功能
難點:
1坡脐、要了解docker和k8s的架構泄私,理解容器編排的概念
2、了解操作系統(tǒng)备闲、網(wǎng)絡的概念
首先學習Docker
分為六大模塊進行學習晌端,列表如下:
1、Docker基礎概念
2恬砂、Docker安裝咧纠、卸載和加速
3、Docker鏡像泻骤、容器的常用命令
4漆羔、利用 Docker file 構建私有鏡像
5乳幸、運行Java程序
6、搭建Docker私有倉庫
為避免篇幅過長钧椰,分成六篇文章來記錄粹断。本文章介紹的是基礎概念模塊
一、Docker基礎概念
【Docker介紹】
1嫡霞、Docker是用Go語言進行開發(fā)實現(xiàn)瓶埋,基于Linux內(nèi)核的cgroup、namespace以及 AUFS類的Union FS等技術诊沪,對進程進行封裝隔離养筒,屬于操作系統(tǒng)層面的虛擬化技術。由于隔離的進程獨立于宿主和其它的隔離的進程端姚,因此也稱其為容器晕粪。
2、Docker在容器的基礎上渐裸,進行了進一步的封裝巫湘,從文件系統(tǒng)、網(wǎng)絡互聯(lián)到進程隔離等等昏鹃,極大的簡化了容器的創(chuàng)建和維護尚氛。使得Docker技術比虛擬機技術更為輕便、快捷洞渤。
【Docker和傳統(tǒng)虛擬機的對比】
傳統(tǒng)虛擬機技術:虛擬出一套硬件后阅嘶,在其上運行一個完整操作系統(tǒng),在該系統(tǒng)上再運行所需應用進程;
Docker:容器內(nèi)的應用進程直接運行于宿主的內(nèi)核载迄,容器內(nèi)沒有自己的內(nèi)核讯柔,而且也沒有進行硬件虛擬。因此容器要比傳統(tǒng)虛擬機更為輕便护昧。
【為什么要使用Docker】
Docker優(yōu)勢:更高效地利用系統(tǒng)資源魂迄、更快速的啟動時間、一致的運行環(huán)境捏卓、持續(xù)交付和部署部署极祸、更輕松的遷移、更輕松的維護和擴展怠晴。
【Docker架構】
1遥金、Docker主要分為三大塊:客戶端、主機蒜田、倉庫
2稿械、Docker工作模式:使用客戶端-服務器(C/S)架構模式,使用遠程API來管理和創(chuàng)建Docker容器冲粤。
相關概念介紹:
1)Docker鏡像:是用于創(chuàng)建Docker容器的模板
2)Docker容器:是獨立運行的一個或一組應用
3)Docker客戶端:通過命令行或其他工具美莫,使用Docker的API與Docker的守護進程進行通信
4)Docker主機:可以是物理機或虛擬機页眯,用于執(zhí)行守護進程的倉庫
5)Docker倉庫:用于保存鏡像,可以理解為代碼控制中的代碼倉庫厢呵,比如GitHub
6)Docker machine:是一個簡化的docker安裝的命令行工具窝撵,通過簡單的命令行即可在相應平臺上安裝Docker
【Docker基本概念】
理解了Docker的下面三個基本概念,就理解了Docke的整個生命周期
1襟铭、鏡像(Image)
Docker鏡像相當于一個特殊的文件系統(tǒng)
以操作系統(tǒng)為例碌奉,操作系統(tǒng)分為內(nèi)核和用戶空間。對于Linux而言寒砖,內(nèi)核啟動后赐劣,會掛載root文件系統(tǒng)為其提供用戶空間支持。而Docker鏡像(Image) 哩都, 就相當于是一個root文件系統(tǒng)魁兼,除了提供容器運行時所需的程序、庫漠嵌、資源咐汞、配置等文件外,還包含了一些為運行時準備的配置參數(shù)(如匿名卷献雅、環(huán)境變量碉考、用戶等)。鏡像不包含任何動態(tài)數(shù)據(jù)挺身,其內(nèi)容在構建之后也不會被改變。
Docker鏡像分層存儲
Docker是分層存儲的架構锌仅,使得鏡像的復用章钾、定制變得更為容易。鏡像是一個虛擬的概念热芹,由一組多層的文件系統(tǒng)組成贱傀。鏡像構建時,是一層層地構建伊脓,每一層構建完不會再改變府寒,所以在構建每一層時盡量只包含該層需要添加的東西。還可以用之前構建好的鏡像作為基礎層报腔,進一步添加新的層株搔,定制自己所需的內(nèi)容,構建新的鏡像纯蛾。
2纤房、容器(Container)
容器和鏡像的關系
類似于Java中的類和實例,鏡像是靜態(tài)的定義翻诉,容器是鏡像運行時的實體炮姨。容器可以被創(chuàng)建捌刮、啟動、停止舒岸、刪除绅作、暫停等。
容器存儲層
是為容器運行時讀寫而準備的存儲層蛾派。容器也是分層存儲的俄认,每一個容器運行時,是以鏡像為基礎層碍脏,在其上面創(chuàng)建一個當前容器的存儲層梭依,它的生命周期和容器一樣,所以任何保存在容器存儲層的信息都會隨容器刪除而丟失典尾。
**注意:容器不應該向存儲層內(nèi)寫入任何數(shù)據(jù)役拴,容器存儲層要保持無狀態(tài)化。所有文件寫入操作钾埂,都應使用Volume數(shù)據(jù)卷河闰,或綁定宿主目錄,這樣讀寫會跳過容器存儲層褥紫,直接對宿主(或網(wǎng)絡存儲)發(fā)生讀寫姜性,性能和穩(wěn)定性更高。
數(shù)據(jù)卷
生命周期獨立于容器髓考,容器消亡,數(shù)據(jù)卷不會消亡氨菇。使用數(shù)據(jù)卷后,容器刪除或重新運行后乌询,數(shù)據(jù)不會丟失。
3豌研、倉庫(Repository)
Docker Registry
Docker Registry是集中存儲妹田、分發(fā)鏡像的服務,使得鏡像能夠在其他服務器上使用鬼佣。
一個Docker Registry可以包含多個倉庫(Repository),每個倉庫可以包含多個標簽沮趣,每個標簽對應一個鏡像。
通常一個倉庫會包含同一個軟件不同版本的鏡像坷随,標簽就常用于對應該軟件的各個版本房铭。我們可以通過<倉庫名>:<標簽>的格式來指定具體是該軟件哪個版本的鏡像驻龟。如果不給出標簽,將以最新的(latest)作為默認標簽翁狐。
舉個栗子:以centos鏡像為例凌蔬,centos 是倉庫的名字,其內(nèi)包含有不同的版本標簽砂心,如,6.9辩诞、7.5。我們可以通過centos:6.9译暂,或者centos:7.5來具體指定所需哪個版本的鏡像。如果忽略了標簽崎脉,比如centos,那將視為centos:latest伯顶。
Docker倉庫
1)Docker?Registry公開倉庫
常用的Registry是官方的Docker Hub,這也是默認的Registry祭衩。除此以外,還有CoreOS的Quay.io汪厨,CoreOS相關的鏡像存儲在這里愉择。另外,還有Google 的Google Container Registry, Kubernetes 的鏡像使用的就是這個服務衷戈。
加速器:國內(nèi)的一些云服務商提供的針對Docker Hub的鏡像服務层坠。常見的有阿里云加速器、DaoCloud 加速器等破花。使用加速器會直接從國內(nèi)的地址下載Docker Hub的鏡像疲吸,比直接從Docker Hub下載速度會提高很多前鹅。
國內(nèi)也有一些云服務商提供類似于Docker Hub的公開服務。比如網(wǎng)易云鏡像服務蹂喻、DaoCloud鏡像市場、阿里云鏡像庫等口四。
2)Docker?Registry私有倉庫
用戶可以在本地搭建私有Docker Registry。Docker 官方提供了Docker Registry鏡像秦陋,可以直接使用做為私有Registry服務。
開源的Docker Registry鏡像只提供了Docker Registry API的服務端實現(xiàn)踱侣,足以支持docker命令,不影響使用探膊。但不包含圖形界面待榔,以及鏡像維護、用戶管理锐锣、訪問控制等高級功能。在官方的商業(yè)化版本Docker Trusted Registry中雕憔,提供了這些高級功能。
除了官方的Docker Registry外分瘦,還有第三方軟件實現(xiàn)了Docker Registry API琉苇,甚至提供了用戶界面以及一些高級功能。比如并扇,VMWare Harbor和Sonatype Nexus。