摘要:核心對(duì)名字空間的支持完全隔離了工作環(huán)境中應(yīng)用程序的視野,包括進(jìn)程樹(shù)網(wǎng)絡(luò)用戶與掛載文件系統(tǒng),而核心的提供資源隔離,包括存儲(chǔ)器與網(wǎng)絡(luò)。因此更為輕量快速和易于管理。
docker 如日中天,這不是單純的炒概念,docker 確確實(shí)實(shí)解決了開(kāi)發(fā)與運(yùn)維的痛點(diǎn),因此在企業(yè)開(kāi)發(fā)中得到了非常廣泛的使用,本文對(duì)于 docker 的這些基本知識(shí)點(diǎn)再做一些簡(jiǎn)單回顧。
什么是 docker根據(jù) wikipedia 中的介紹:
Docker 是一個(gè)開(kāi)放源代碼軟件項(xiàng)目,讓?xiě)?yīng)用程序布署在軟件容器下的工作可以自動(dòng)化進(jìn)行,借此在 Linux 操作系統(tǒng)上,提供一個(gè)額外的軟件抽象層,以及操作系統(tǒng)層虛擬化的自動(dòng)管理機(jī)制。
Docker 利用 Linux 核心中的資源分脫機(jī)制,例如 cgroups ,以及 Linux 核心名字空間(name space),來(lái)創(chuàng)建獨(dú)立的軟件容器(containers)。這可以在單一 Linux 實(shí)體下運(yùn)作,避免啟動(dòng)一個(gè)虛擬機(jī)造成的額外負(fù)擔(dān)。Linux 核心對(duì)名字空間的支持完全隔離了工作環(huán)境中應(yīng)用程序的視野,包括進(jìn)程樹(shù)、網(wǎng)絡(luò)、用戶 ID 與掛載文件系統(tǒng),而核心的 cgroup 提供資源隔離,包括 CPU 、存儲(chǔ)器、block I/O 與網(wǎng)絡(luò)。從 0.9 版本起,Dockers 在使用抽象虛擬是經(jīng)由 libvirt 的 LXC 與 systemd - nspawn 提供界面的基礎(chǔ)上,開(kāi)始包括 libcontainer 庫(kù)做為以自己的方式開(kāi)始直接使用由 Linux 核心提供的虛擬化的設(shè)施。
依據(jù)行業(yè)分析公司“451研究”:“Dockers 是有能力打包應(yīng)用程序及其虛擬容器,可以在任何 Linux 服務(wù)器上運(yùn)行的依賴性工具,這有助于實(shí)現(xiàn)靈活性和便攜性,應(yīng)用程序在任何地方都可以運(yùn)行,無(wú)論是公有云、私有云、單機(jī)等?!?。
這里的介紹有點(diǎn)繞口,讓我來(lái)介紹下 docker 解決了哪些痛點(diǎn):
簡(jiǎn)化環(huán)境管理
傳統(tǒng)的軟件開(kāi)發(fā)與發(fā)布環(huán)境復(fù)雜,配置繁瑣,經(jīng)常有讀者在微信上問(wèn):我的代碼開(kāi)發(fā)環(huán)境可以運(yùn)行,一旦部署到服務(wù)器上就運(yùn)行不了了。這個(gè)問(wèn)題很常見(jiàn),也確實(shí)很煩人,但是問(wèn)題總要解決,開(kāi)發(fā)環(huán)境、測(cè)試環(huán)境、生產(chǎn)環(huán)境,每個(gè)環(huán)節(jié)都有可能出現(xiàn)這樣那樣的問(wèn)題,如果能夠在各個(gè)環(huán)境中實(shí)現(xiàn)一鍵部署,就會(huì)方便很多,例如一鍵安裝 linux 、一鍵安裝 mysql、一鍵安裝 nginx 等,docker 徹底解決了這個(gè)問(wèn)題。
虛擬化更加輕量級(jí)
說(shuō)到容器,說(shuō)到虛擬化,很多人總會(huì)想到虛擬機(jī),想到 VMware、VirtualBox 等工具,不同于這些虛擬技術(shù),docker 虛擬化更加輕量級(jí),傳統(tǒng)的虛擬機(jī)都是先虛擬出一個(gè)操作系統(tǒng),然后在操作系統(tǒng)上完成各種各樣的配置,這樣并不能充分的利用物理機(jī)的性能,docker 則是一種操作系統(tǒng)級(jí)別的虛擬技術(shù),它運(yùn)行在操作系統(tǒng)之上的用戶空間,所有的容器都共用一個(gè)系統(tǒng)內(nèi)核甚至公共庫(kù),容器引擎提供了進(jìn)程級(jí)別的隔離,讓每個(gè)容器都像運(yùn)行在多帶帶的系統(tǒng)之上,但是又能夠共享很多底層資源。因此 docker 更為輕量、快速和易于管理。
程序可移植
有了前面介紹的兩個(gè)特點(diǎn),程序可移植就是順理成章的事情了。
docker 和虛擬機(jī)前面介紹了 docker 與傳統(tǒng)虛擬機(jī)的差異,通過(guò)下表再來(lái)詳細(xì)了解下這種差異:
||docker|虛擬機(jī)|
|:--|:---|:--|
|相同點(diǎn)|1. 都可在不同的主機(jī)之間遷移
2. 都具備 root 權(quán)限
3. 都可以遠(yuǎn)程控制
4. 都有備份、回滾操作
|
|操作系統(tǒng)|在性能上有優(yōu)勢(shì),可以輕易的運(yùn)行多個(gè)操作系統(tǒng)|可以安裝任何系統(tǒng),但是性能不及容器|
|原理|和宿主機(jī)共享內(nèi)核,所有容器運(yùn)行在容器引擎之上,容器并非一個(gè)完整的操作系統(tǒng),所有容器共享操作系統(tǒng),在進(jìn)程級(jí)進(jìn)行隔離|每一個(gè)虛擬機(jī)都建立在虛擬的硬件之上,提供指令級(jí)的虛擬,具備一個(gè)完整的操作系統(tǒng)|
|優(yōu)點(diǎn)|高效、集中。一個(gè)硬件節(jié)點(diǎn)可以運(yùn)行數(shù)以百計(jì)的的容器,非常節(jié)省資源,QoS 會(huì)盡量滿足,但不保證一定滿足。內(nèi)核由提供者升級(jí),服務(wù)由服務(wù)提供者管理|對(duì)操作系統(tǒng)具有絕對(duì)權(quán)限,對(duì)系統(tǒng)版本和系統(tǒng)升級(jí)具有完全的管理權(quán)限。具有一整套的的資源:CPU、RAM 和磁盤。QoS 是有保證的,每一個(gè)虛擬機(jī)就像一個(gè)真實(shí)的物理機(jī)一樣,可以實(shí)現(xiàn)不同的操作系統(tǒng)運(yùn)行在同一物理節(jié)點(diǎn)上。|
|資源管理|彈性資源分配:資源可以在沒(méi)有關(guān)閉容器的情況下添加,數(shù)據(jù)卷也無(wú)需重新分配大小|虛擬機(jī)需要重啟,虛擬機(jī)里邊的操作系統(tǒng)需要處理新加入的資源,如磁盤等,都需要重新分區(qū)。|
|遠(yuǎn)程管理|根據(jù)操作系統(tǒng)的不同,可以通過(guò) shell 或者遠(yuǎn)程桌面進(jìn)行|遠(yuǎn)程控制由虛擬化平臺(tái)提供,可以在虛擬機(jī)啟動(dòng)之前連接|
|缺點(diǎn)|對(duì)內(nèi)核沒(méi)有控制權(quán)限,只有容器的提供者具備升級(jí)權(quán)限。只有一個(gè)內(nèi)核運(yùn)行在物理節(jié)點(diǎn)上,幾乎不能實(shí)現(xiàn)不同的操作系統(tǒng)混合。容器提供者一般僅提供少數(shù)的幾個(gè)操作系統(tǒng)|每一臺(tái)虛擬機(jī)都具有更大的負(fù)載,耗費(fèi)更多的資源,用戶需要全權(quán)維護(hù)和管理。一臺(tái)物理機(jī)上能夠運(yùn)行的虛擬機(jī)非常有限|
|配置|快速,基本上是一鍵配置|配置時(shí)間長(zhǎng)|
|啟動(dòng)時(shí)間|秒級(jí)|分鐘級(jí)|
|硬盤使用|MB|GB|
|性能|接近原生態(tài)|弱于原生態(tài)|
|系統(tǒng)支持?jǐn)?shù)量|單機(jī)支持上千個(gè)|一般不多于幾十個(gè)|
不同與傳統(tǒng)容器,docker 早起基于 LXC,后來(lái)基于自研的 libContainer,docker 對(duì)于傳統(tǒng)容器做了許多優(yōu)化,如下:
跨平臺(tái)的可移植性
面向應(yīng)用
版本控制
組件復(fù)用
共享性
工具生態(tài)系統(tǒng)
docker 應(yīng)用場(chǎng)景加速本地開(kāi)發(fā)
自動(dòng)打包和部署應(yīng)用
創(chuàng)建輕量、私有的PaaS環(huán)境
自動(dòng)化測(cè)試和持續(xù)集成/部署
部署并擴(kuò)展Web應(yīng)用、數(shù)據(jù)庫(kù)和后端服務(wù)器
創(chuàng)建安全沙盒
輕量級(jí)的桌面虛擬化
docker 核心組件docker 中有三大核心組件:
鏡像
鏡像是一個(gè)只讀的靜態(tài)模版,它保存了容器需要的環(huán)境和應(yīng)用的執(zhí)行代碼,可以將鏡像看成是容器的代碼,當(dāng)代碼運(yùn)行起來(lái)之后,就成了容器,鏡像和容器的關(guān)系也類似于程序和進(jìn)程的關(guān)系。
容器
容器是一個(gè)運(yùn)行時(shí)環(huán)境,是鏡像的一個(gè)運(yùn)行狀態(tài),它是鏡像執(zhí)行的動(dòng)態(tài)表現(xiàn)。
庫(kù)
庫(kù)是一個(gè)特定的用戶存儲(chǔ)鏡像的目錄,一個(gè)用戶可以建立多個(gè)庫(kù)來(lái)保存自己的鏡像。
docker相關(guān)技術(shù)隔離性
可度量性
移植性
安全性
docker 安裝相對(duì)而言,Linux 上安裝 Docker 是最容易的,其次是 Mac ,最后是 Windows ,Windows 因此要裝的東西比較多,官方也提供了兩個(gè)不同的安裝包,支持不同的 Windows 的不同版本,一個(gè)是針對(duì) Win10 的安裝引導(dǎo)程序,還有一個(gè)是兼容性較好的 Toolbox ,但是在 Windows 上運(yùn)行 Docker ,后期在虛擬目錄等方面還會(huì)遇到各種問(wèn)題,所以這里松哥是非常不建議大家在 Windows 中安裝 Docker ,有 Mac 的上 Mac (Mac 上安裝 Docker 就像安裝普通軟件一樣),沒(méi)有 Mac 的裝 Linux 虛擬機(jī),再裝 Docker 即可,這里我就先以 CentOS 上安裝 Docker 為例,來(lái)說(shuō)說(shuō) Docker 安裝。
分別執(zhí)行如下安裝命令:
# 首先安裝 Docker yum -y install docker # 然后啟動(dòng) Docker 服務(wù) service docker start # 測(cè)試安裝是否成功 docker -v
安裝完成后,看到如下頁(yè)面,表示安裝成功:
總結(jié)本文主要向大家介紹了 Docker 的基本概念以及 Docker 的安裝 ,下篇文章我們向大家介紹 Docker 中基本的容器操作。有問(wèn)題歡迎留言討論。
參考資料:
[1] 曾金龍,肖新華,劉清.Docker開(kāi)發(fā)實(shí)踐[M].北京:人民郵電出版社,2015.
關(guān)注公眾號(hào)【江南一點(diǎn)雨】,專注于 Spring Boot+微服務(wù)以及前后端分離等全棧技術(shù),定期視頻教程分享,關(guān)注后回復(fù) Java ,領(lǐng)取松哥為你精心準(zhǔn)備的 Java 干貨!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/27874.html
摘要:前提好幾周沒(méi)更新博客了,對(duì)不斷支持我博客的童鞋們說(shuō)聲抱歉了。熟悉我的人都知道我寫(xiě)博客的時(shí)間比較早,而且堅(jiān)持的時(shí)間也比較久,一直到現(xiàn)在也是一直保持著更新?tīng)顟B(tài)。 showImg(https://segmentfault.com/img/remote/1460000014076586?w=1920&h=1080); 前提 好幾周沒(méi)更新博客了,對(duì)不斷支持我博客的童鞋們說(shuō)聲:抱歉了!。自己這段時(shí)...
摘要:作者麥冬白鯨魚(yú)是什么入門教程容器是與系統(tǒng)其他部分隔離開(kāi)的一系列進(jìn)程,運(yùn)行這些進(jìn)程所需的所有文件都由另一個(gè)鏡像提供,從開(kāi)發(fā)到測(cè)試再到生產(chǎn)的整個(gè)過(guò)程中,容器都具有可移植性和一致性??焖偃萜鞯膯?dòng)和創(chuàng)建無(wú)需啟動(dòng),可以實(shí)現(xiàn)秒級(jí)甚至毫秒級(jí)的啟動(dòng)。 作者: 麥冬 白鯨魚(yú) docker 是什么 Docker 入門教程 Docker容器是與系統(tǒng)其他部分隔離開(kāi)的一系列進(jìn)程,運(yùn)行這些進(jìn)程所需的所有文件都由...
摘要:容器類似虛擬機(jī),可以支持的操作包括啟動(dòng),停止,刪除等。交互式可以分配一個(gè)虛擬終端并關(guān)聯(lián)到任何容器的標(biāo)準(zhǔn)輸入上,例如運(yùn)行一個(gè)一次性交互。 Docker Docker 核心概念及入門 什么是docker Docker是一個(gè)開(kāi)放源代碼軟件項(xiàng)目,讓?xiě)?yīng)用程序布署在軟件貨柜下的工作可以自動(dòng)化進(jìn)行,借此在Linux操作系統(tǒng)上,提供一個(gè)額外的軟件抽象層,以及操作系統(tǒng)層虛擬化的自動(dòng)管理機(jī)制。Docker...
閱讀 2670·2023-04-26 02:44
閱讀 8652·2021-11-22 14:44
閱讀 2131·2021-09-27 13:36
閱讀 2527·2021-09-08 10:43
閱讀 690·2019-08-30 15:56
閱讀 1400·2019-08-30 15:55
閱讀 2895·2019-08-28 18:12
閱讀 2837·2019-08-26 13:50