自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

開(kāi)發(fā)者們,Docker到底是什么,能干什么?

開(kāi)發(fā) 架構(gòu)
對(duì)于大多數(shù)開(kāi)發(fā)者來(lái)說(shuō),Docker之所以被廣泛使用,最主要的原因可能就是方便,它提供了一套標(biāo)準(zhǔn)化的解決方案,極大地提升了部署、發(fā)布、運(yùn)維的效率。因此,如果你的項(xiàng)目中目前還沒(méi)有使用Docker,或者想深入了解一下Docker,這篇文章值得你一讀。

?背景

隨著云原生、容器化、微服務(wù)、k8s等技術(shù)的發(fā)展,容器Docker也火了一把,同時(shí)也逐漸被軟件開(kāi)發(fā)者在實(shí)踐中進(jìn)行運(yùn)用。個(gè)人在目前接手的項(xiàng)目、參與的項(xiàng)目或技術(shù)交流中,發(fā)現(xiàn)Docker已經(jīng)非常普及。

對(duì)于大多數(shù)開(kāi)發(fā)者來(lái)說(shuō),Docker之所以被廣泛使用,最主要的原因可能就是方便,它提供了一套標(biāo)準(zhǔn)化的解決方案,極大地提升了部署、發(fā)布、運(yùn)維的效率。因此,如果你的項(xiàng)目中目前還沒(méi)有使用Docker,或者想深入了解一下Docker,這篇文章值得你一讀。

Docker是什么?

在聊Docker是什么之前,我們先來(lái)回顧一下傳統(tǒng)的產(chǎn)品開(kāi)發(fā)上線涉及到的難點(diǎn)。一款產(chǎn)品從開(kāi)發(fā)到上線,經(jīng)歷了開(kāi)發(fā)環(huán)境、測(cè)試環(huán)境、生產(chǎn)環(huán)境等不同的操作系統(tǒng)、運(yùn)行環(huán)境和應(yīng)用配置等環(huán)境。在項(xiàng)目管理中,還涉及到不同版本以及不同版本之間兼容性等問(wèn)題。

這些問(wèn)題對(duì)開(kāi)發(fā)人員和運(yùn)維人員都是極大的考驗(yàn),同時(shí)對(duì)各方的協(xié)作也有一定的要求。不然就會(huì)出現(xiàn)”代碼在我這里運(yùn)行的好好的啊“,這種尷尬的局面。而Docker的出現(xiàn)就是提供了一套用來(lái)解決此類問(wèn)題的標(biāo)準(zhǔn)解決方案。

Docker

Docker的口號(hào)是”一次創(chuàng)建或配置,可以在任意地方正常運(yùn)行“。如口號(hào)所說(shuō),Docker的出現(xiàn)對(duì)于開(kāi)發(fā)和運(yùn)維人員是一大福音,基于Docker可以方便地搞定標(biāo)準(zhǔn)化的發(fā)布流程,再也不用糾結(jié)不同環(huán)境導(dǎo)致的問(wèn)題了。

其實(shí),Docker的使用可以理解為:軟件是帶環(huán)境安裝的,也就是說(shuō),安裝的時(shí)候把原始環(huán)境一模一樣的復(fù)制過(guò)來(lái)一份。這樣也就消除了不同機(jī)器運(yùn)行結(jié)果不同的問(wèn)題。

那么,Docker是什么呢?Docker是一個(gè)開(kāi)源的應(yīng)用容器引擎,基于Go語(yǔ)言,并遵從Apache2.0協(xié)議開(kāi)源。它可以讓開(kāi)發(fā)者打包應(yīng)用以及依賴包到一個(gè)輕量級(jí)、可移植的容器中,然后發(fā)布到任何流行的Linux機(jī)器上,也可以實(shí)現(xiàn)虛擬化。Docker可用于開(kāi)發(fā)應(yīng)用、交付應(yīng)用、運(yùn)行應(yīng)用等場(chǎng)景。

容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口,更重要的是容器性能開(kāi)銷極低。Docker允許用戶將基礎(chǔ)設(shè)施中的應(yīng)用單獨(dú)分割出來(lái),形成更小的部分容器,從而提高軟件交付速度。

Docker從17.03版本之后分為CE(Community Edition: 社區(qū)版)和EE(Enterprise Edition: 企業(yè)版),通常使用社區(qū)版就可以滿足大多數(shù)業(yè)務(wù)場(chǎng)景。

Docker容器與虛擬機(jī)的區(qū)別

Docker容器與虛擬機(jī)很相似,但它們之間又有著很大的區(qū)別。

虛擬機(jī)是通過(guò)軟件模擬的具有完整硬件系統(tǒng)功能的、運(yùn)行在一個(gè)完全隔離環(huán)境中的完整計(jì)算機(jī)系統(tǒng)。創(chuàng)建虛擬機(jī)時(shí),會(huì)將實(shí)體機(jī)的部分硬盤和內(nèi)存容量作為虛擬機(jī)的硬盤和內(nèi)存,每個(gè)虛擬機(jī)都有獨(dú)立的硬盤和操作系統(tǒng),可以像使用實(shí)體機(jī)一樣對(duì)虛擬機(jī)進(jìn)行操作。

虛擬機(jī)會(huì)消耗大量系統(tǒng)資源和開(kāi)銷,尤其是當(dāng)多個(gè)虛擬機(jī)在同一物理服務(wù)器上運(yùn)行時(shí),每個(gè)虛擬機(jī)都有自己的子操作系統(tǒng),大量精力以及資源被用于虛擬化的部署和運(yùn)行上。

容器類似于虛擬機(jī),只是容器不是完整的操作系統(tǒng),容器通常只包含必要的操作系統(tǒng)包和應(yīng)用程序,這就是它們輕量級(jí)的原因。

圖片

Docker與虛擬機(jī)

可以出,傳統(tǒng)的虛擬機(jī)是在宿主機(jī)之上,又添加了一個(gè)新的操作系統(tǒng),這就導(dǎo)致了虛擬機(jī)的臃腫,不適合遷移。而Docker是直接寄存在宿主機(jī)上,完全就會(huì)避免大部分虛擬機(jī)帶來(lái)的困擾。

Docker是一個(gè)黑盒的進(jìn)程,區(qū)別于傳統(tǒng)的進(jìn)程,Docker可以獨(dú)立出一個(gè)自己的空間,不會(huì)使得在Docker中的行為以及變量溢出到宿主機(jī)上。

容器與虛擬機(jī)的各項(xiàng)區(qū)別:

圖片

容器與虛擬機(jī)的區(qū)別

Docker能做什么?

那么,當(dāng)在開(kāi)發(fā)中使用了Docker能為我們帶來(lái)哪些便利呢?先來(lái)看一張圖。

圖片

Docker使用前后對(duì)比

在沒(méi)有使用Docker時(shí),我們開(kāi)發(fā)完畢一個(gè)項(xiàng)目,需要打成war包或jar包。然后,在服務(wù)器上進(jìn)行各種環(huán)境的安裝、配置以及應(yīng)用程序維護(hù),比如:JDK、Tomcat、數(shù)據(jù)庫(kù)等。

而且,上述的配置在開(kāi)發(fā)環(huán)境、測(cè)試服務(wù)器、生產(chǎn)服務(wù)器(通常會(huì)有很多個(gè)),都需要進(jìn)行一遍同樣的操作,工作量相當(dāng)繁重。在使用了Docker之后,我們可以自己創(chuàng)建一個(gè)空的鏡像從頭構(gòu)建,也可以使用公共倉(cāng)庫(kù)中已經(jīng)構(gòu)建好的鏡像,直接使用。當(dāng)需要在不同環(huán)境中進(jìn)行部署時(shí),直接使用構(gòu)建好的鏡像即可,一次構(gòu)建,多環(huán)境多次使用,方便快捷。

Docker的6大優(yōu)勢(shì)

對(duì)比傳統(tǒng)的運(yùn)維發(fā)布方式,Docker有以下6大優(yōu)勢(shì):

1.更高效地利用系統(tǒng)資源Docker對(duì)系統(tǒng)資源的利用率更高。因?yàn)槿萜鞑挥糜布摂M以及運(yùn)行完整操作系統(tǒng)等額外開(kāi)銷,無(wú)論是應(yīng)用執(zhí)行速度、內(nèi)存損耗或者文件的存儲(chǔ)速度,都要比傳統(tǒng)虛擬機(jī)技術(shù)更高效。因此,相比虛擬機(jī)技術(shù),相同配置的主機(jī),往往可以運(yùn)行更多數(shù)量的應(yīng)用。

2.更快的啟動(dòng)時(shí)間:”傳統(tǒng)的虛擬機(jī)技術(shù)啟動(dòng)應(yīng)用服務(wù)往往是分鐘級(jí)別的,而Docker由于直接運(yùn)行于宿主內(nèi)核,無(wú)需啟動(dòng)完整的操作系統(tǒng),因此可以做到秒級(jí)、甚至毫秒級(jí)的啟動(dòng)時(shí)間,大大的節(jié)約了開(kāi)發(fā)、測(cè)試、部署的時(shí)間。

3.一致的運(yùn)行環(huán)境開(kāi)發(fā)中常見(jiàn)的問(wèn)題是環(huán)境一致性問(wèn)題,由于開(kāi)發(fā)測(cè)試生產(chǎn)環(huán)境的不一致,導(dǎo)致有些bug沒(méi)能在開(kāi)發(fā)過(guò)程中被發(fā)現(xiàn),而Docker的鏡像提供了除內(nèi)核外完整的運(yùn)行時(shí)環(huán)境,確保了應(yīng)用運(yùn)行環(huán)境一致性,從而不會(huì)再出現(xiàn)“代碼在我機(jī)器上能跑,這不怪我啊”這類問(wèn)題。

4、持續(xù)交付和部署對(duì)開(kāi)發(fā)和運(yùn)維(DevOps)來(lái)說(shuō),最希望的就是一次創(chuàng)建或配置,可以在任意地方正常運(yùn)行,使用Docker可以通過(guò)定制應(yīng)用鏡像來(lái)實(shí)現(xiàn)持續(xù)集成、持續(xù)交付、部署。這一部分的實(shí)踐可參考《為了實(shí)現(xiàn)CI/CD,先來(lái)定制一個(gè)Docker鏡像【實(shí)戰(zhàn)精華篇】》這篇文章。

5、更輕松遷移Docker確保了執(zhí)行環(huán)境的一致性,使得應(yīng)用的遷移更加容易,Docker可以在很多平臺(tái)上運(yùn)行,無(wú)論是物理機(jī)、虛擬機(jī)、公有云、私有云,甚至是筆記本,其運(yùn)行結(jié)果是一致的。因此用戶不用擔(dān)心運(yùn)行環(huán)境的變化導(dǎo)致應(yīng)用無(wú)法正常運(yùn)行的情況。

6、更輕松的維護(hù)和拓展:”Docker使用的分層存儲(chǔ)以及鏡像的技術(shù),使得應(yīng)用重復(fù)部分的復(fù)用更為容易,也使得應(yīng)用的維護(hù)更新更加簡(jiǎn)單,基于基礎(chǔ)鏡像進(jìn)一步擴(kuò)展鏡像也變得十分簡(jiǎn)單。此外,Docker團(tuán)隊(duì)同各個(gè)開(kāi)源項(xiàng)目團(tuán)隊(duì)一起維護(hù)了一大批高質(zhì)量的官網(wǎng)鏡像,既可以直接在生產(chǎn)環(huán)境使用,又可以作為基礎(chǔ)進(jìn)一步定制,大大的降低了應(yīng)用服務(wù)的鏡像制作成本。

Docker的基礎(chǔ)概念

在使用Docker時(shí),我們要掌握Docker中的一些核心組件及概念。

來(lái)看一張Docker的架構(gòu)圖:

圖片

Docker架構(gòu)圖

Docker的基本組成是由鏡像(image)、容器(container)、倉(cāng)庫(kù)(repository)構(gòu)成。

鏡像(image)

Docker鏡像就是一個(gè)只讀的模板,是文件與meta data的集合。鏡像是基于分層的實(shí)現(xiàn)的,每一層都可以添加刪除文件,從而形成新的鏡像。

鏡像可以理解為是一個(gè)樹(shù)狀結(jié)構(gòu),每一個(gè)鏡像都會(huì)依賴于另一個(gè)鏡像,這個(gè)依賴關(guān)系體現(xiàn)在Docker鏡像制作的Dockerfile中的FROM指令上的。需要注意的是:如果是樹(shù)的根,那么就需要"FROM scratch"。

鏡像可以用來(lái)創(chuàng)建Docker容器,一個(gè)鏡像可以創(chuàng)建多個(gè)容器。

容器(container)

Docker利用容器獨(dú)立運(yùn)行的一個(gè)或一組應(yīng)用。容器是用鏡像創(chuàng)建的運(yùn)行實(shí)例,是在image的最后一層上面再添加一層。容器的定義和鏡像幾乎一模一樣,也是一堆層的統(tǒng)一視角,唯一區(qū)別在于容器的最上面那一層是可讀可寫的。

容器與鏡像相對(duì)比:鏡像負(fù)責(zé)存儲(chǔ)和分發(fā),容器負(fù)責(zé)運(yùn)行,它們之間的關(guān)系可以類比Java中類和實(shí)例的關(guān)系。

容器可以被啟動(dòng)、開(kāi)始、停止、刪除。每個(gè)容器都是相互隔離的、保證安全的平臺(tái)??梢园讶萜骺醋鍪且粋€(gè)簡(jiǎn)易版的Linux環(huán)境和運(yùn)行在其中的應(yīng)用程序。

倉(cāng)庫(kù)(repository)

倉(cāng)庫(kù)是集中存放鏡像文件的場(chǎng)所,它有點(diǎn)類似于Maven/Git的倉(cāng)庫(kù),當(dāng)我們需要鏡像文件時(shí),可以從遠(yuǎn)程倉(cāng)庫(kù)中拉取。

倉(cāng)庫(kù)和倉(cāng)庫(kù)注冊(cè)服務(wù)器(Registry)是有區(qū)別的。倉(cāng)庫(kù)注冊(cè)服務(wù)器上存放著多個(gè)倉(cāng)庫(kù),每個(gè)倉(cāng)庫(kù)中又包含了多個(gè)鏡像,每個(gè)鏡像有不同的標(biāo)簽(tag)。

倉(cāng)庫(kù)分為公開(kāi)倉(cāng)庫(kù)(Public)和私有倉(cāng)庫(kù)(Private)兩種形式。目前最大的公開(kāi)倉(cāng)庫(kù)是Docker Hub。

小結(jié)

通過(guò)本篇給大家講解了Docker的基本使用場(chǎng)景、相關(guān)概念、Docker能為我們帶來(lái)什么、Docker的優(yōu)勢(shì)等,想必大家通過(guò)本篇文章已經(jīng)能夠從整體上了解了Docker的概況。

責(zé)任編輯:武曉燕 來(lái)源: 程序新視界
相關(guān)推薦

2023-10-07 14:51:46

物聯(lián)網(wǎng)物聯(lián)網(wǎng)平臺(tái)

2022-12-02 14:57:15

物聯(lián)網(wǎng)物聯(lián)網(wǎng)平臺(tái)

2018-08-30 17:14:56

2014-03-07 10:46:49

編程語(yǔ)言趣味

2019-08-09 16:01:18

Hadoop數(shù)據(jù)庫(kù)

2012-01-16 08:56:17

開(kāi)發(fā)程序員

2020-04-22 13:29:35

基帶射頻信號(hào)

2020-07-08 13:38:10

NginxApache服務(wù)器

2019-04-22 10:08:52

NginxApacheWEB服務(wù)器

2013-02-18 08:15:35

powershell

2024-01-16 23:30:46

?fractionsPython分?jǐn)?shù)

2014-10-10 13:46:33

Docker

2020-09-22 08:22:28

快充

2020-09-27 06:53:57

MavenCDNwrapper

2020-10-14 06:22:14

UWB技術(shù)感知

2010-11-01 01:25:36

Windows NT

2011-04-27 09:30:48

企業(yè)架構(gòu)

2021-03-04 10:20:41

運(yùn)維工程師互聯(lián)網(wǎng)

2013-08-08 09:55:20

私有云DevOps方法虛擬機(jī)

2023-08-18 14:39:20

RCS谷歌
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)