久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    10分鐘快速掌握Docker必備基礎(chǔ)知識(shí)

     yi321yi 2019-08-25

    Docker是時(shí)下熱門的容器技術(shù),相信作為一名開發(fā)人員,你一定聽(tīng)說(shuō)過(guò)或者使用過(guò),很多人會(huì)把Docker理解為一個(gè)輕量級(jí)虛擬機(jī),但其實(shí)Docker與虛擬機(jī)(VM)是兩種不同的計(jì)算機(jī)虛擬化技術(shù),也有很多人會(huì)覺(jué)得,有了虛擬機(jī),那為什么還要使用Docker呢?

    帶著心里的一點(diǎn)點(diǎn)疑問(wèn),讓我們一起來(lái)學(xué)習(xí)Docker吧。

    沒(méi)有虛擬化技術(shù)的原始年代

    我們仔細(xì)想想,在沒(méi)有計(jì)算虛擬化技術(shù)的“遠(yuǎn)古”年代,如果我們要部署一個(gè)應(yīng)用程序(Application),一般的步驟是怎么樣的?

    第一步肯定是先要準(zhǔn)備一臺(tái)物理服務(wù)器,然后在物理服務(wù)器上安裝一個(gè)操作系統(tǒng)(Operating System),有了操作系統(tǒng)之后,便在操作系統(tǒng)上安裝運(yùn)行我們的應(yīng)用程序,這個(gè)過(guò)程可以用下面的圖來(lái)表示:


    物理服務(wù)器部署應(yīng)用示意圖

    那么,這種方式有什么問(wèn)題呢?其實(shí),在物理機(jī)上部署應(yīng)用有以下幾個(gè)缺點(diǎn):

    • 部署非常慢:因?yàn)槲覀兊孟葴?zhǔn)備硬件服務(wù)器,接著還要安裝操作系統(tǒng),然后再部署應(yīng)用程序,而且應(yīng)用程序還有很多的依賴軟件,所以這個(gè)過(guò)程是比較慢的。

    • 成本非常高:主要是物理器成本太高,即使是部署一個(gè)簡(jiǎn)單的應(yīng)用,也需要一臺(tái)服務(wù)器。

    • 資源浪費(fèi):如果應(yīng)用太簡(jiǎn)單,也容易浪費(fèi)硬件資源,比如CPU和內(nèi)存

    • 遷移和擴(kuò)展太慢:如果需要遷移應(yīng)用,或者擴(kuò)展應(yīng)用,都要再準(zhǔn)備其他的物理服務(wù)器,過(guò)程很麻煩,也很慢。

    那么有什么辦法可以解決這些問(wèn)題呢?答案便是虛擬化技術(shù)。

    使用虛擬機(jī)部署應(yīng)用程序的年代

    什么是虛擬化技術(shù)

    談到計(jì)算機(jī)的虛擬化技術(shù),我們直接想到的便是虛擬機(jī),虛擬機(jī)允許我們?cè)谝慌_(tái)物理計(jì)算機(jī)模擬出多臺(tái)機(jī)器,簡(jiǎn)單地理解,虛擬化技術(shù)就是在一臺(tái)物理計(jì)算機(jī)上,通過(guò)中間虛擬軟件層Hypervisor隔離CPU、內(nèi)存等硬件資源,虛擬出多臺(tái)虛擬服務(wù)器,這樣做的話,一臺(tái)物理服務(wù)器便可以安裝多個(gè)應(yīng)用程序,達(dá)到資源利用的最大化,而且多個(gè)應(yīng)用之間相互隔離,如下圖所示:


    虛擬機(jī)上部署應(yīng)用示意圖

    虛擬機(jī)的優(yōu)點(diǎn)

    • 可以把資源分配到不同的虛擬機(jī),達(dá)到硬件資源的最大化利用

    • 與直接在物理機(jī)上部署應(yīng)用,虛擬更容易擴(kuò)展應(yīng)用。

    • 云服務(wù):通過(guò)虛擬機(jī)虛擬出不同的物理資源,可以快速搭建云服務(wù)。

    虛擬機(jī)的不足之處

    虛擬機(jī)的不足之外來(lái)自于對(duì)物理服務(wù)器資源的消耗,當(dāng)我們?cè)谖锢矸?wù)器創(chuàng)建一臺(tái)虛擬機(jī)時(shí),便需要虛擬出一套硬件并在上面運(yùn)行完整的操作系統(tǒng),每臺(tái)虛擬機(jī)都占用許多的服務(wù)器資源。

    Docker是什么?

    相對(duì)于虛擬機(jī)的笨重,Docker則更顯得輕量化,因此不會(huì)占用太多的系統(tǒng)資源。

    Docker是使用時(shí)下很火的Golang語(yǔ)言進(jìn)行開發(fā)的,其技術(shù)核心是Linux內(nèi)核的Cgroup,NamespaceAUFS類的Union FS等技術(shù),這些技術(shù)都是Linux內(nèi)核中早已存在很多年的技術(shù),所以嚴(yán)格來(lái)說(shuō)并不是一個(gè)完全創(chuàng)新的技術(shù),Docker通過(guò)這些底層的Linux技術(shù),對(duì)Linux進(jìn)程進(jìn)行封裝隔離,而被隔離的進(jìn)程也被稱為容器,完全獨(dú)立于宿主機(jī)的進(jìn)程。

    所以Docker是容器技術(shù)的一種實(shí)現(xiàn),也是操作系統(tǒng)層面的一種虛擬化,與虛擬機(jī)的通過(guò)一套硬件再安裝操作系統(tǒng)完全不同。


    Docker容器與系統(tǒng)關(guān)系示意圖

    Docker與虛擬機(jī)之間的比較

    Docker是在操作系統(tǒng)進(jìn)程層面的隔離,而虛擬機(jī)是在物理資源層面的隔離,兩者完全不同,另外,我們也可以通過(guò)下面的一個(gè)比較,了解兩者的根本性差異。


    容器與虛擬機(jī)的比較【摘自《Docker-從入門到實(shí)踐》】

    從上面的容器與虛擬機(jī)的對(duì)比中,我們明白了容器技術(shù)的優(yōu)勢(shì)。

    容器解決了開發(fā)與生產(chǎn)環(huán)境的問(wèn)題

    開發(fā)環(huán)境與生產(chǎn)環(huán)境折射的是開發(fā)人員與運(yùn)維人員之間的矛盾,也許我們常常會(huì)聽(tīng)到開發(fā)人員對(duì)運(yùn)維人員說(shuō)的這樣一句話:“在我的電腦運(yùn)行沒(méi)問(wèn)題,怎么到了你那里就出問(wèn)題了,肯定是你的問(wèn)題”,而運(yùn)維人員是認(rèn)為是開發(fā)人員的問(wèn)題。

    開發(fā)人員需要在本機(jī)安裝各種各樣的測(cè)試環(huán)境,因此開發(fā)的項(xiàng)目需要軟件越多,依賴越多,安裝的環(huán)境也就越復(fù)雜。

    同樣的,運(yùn)維人員需要為開發(fā)人員開發(fā)的項(xiàng)目提供生產(chǎn)環(huán)境,而運(yùn)維人員除了應(yīng)對(duì)軟件之間的依賴,還需要考慮安裝軟件與硬件之間的兼容性問(wèn)題。

    就是這樣,所以我們經(jīng)常看到開發(fā)與運(yùn)維相互甩鍋,怎么解決這個(gè)問(wèn)題呢?

    容器就是一個(gè)不錯(cuò)的解決方案,容器能成為開發(fā)與運(yùn)維之間溝通的語(yǔ)言,因?yàn)槿萜骶拖褚粋€(gè)集裝箱一樣,提供了軟件運(yùn)行的最小化環(huán)境,將應(yīng)用與其需要的環(huán)境一起打包成為鏡像,便可以在開發(fā)與運(yùn)維之間溝通與傳輸。


    Docker的版本

    Docker分為社區(qū)版(CE)和企業(yè)版(EE)兩個(gè)版本,社區(qū)版本可以免費(fèi)使用,而企業(yè)版則需要付費(fèi)使用,對(duì)于我們個(gè)人開發(fā)者或小企業(yè)來(lái)說(shuō),一般是使用社區(qū)版的。

    Docker CE有三個(gè)更新頻道,分別為stabletestnightlystable是穩(wěn)定版本,test是測(cè)試后的預(yù)發(fā)布版本,而nightly則是開發(fā)中準(zhǔn)備在下一個(gè)版本正式發(fā)布的版本,我們可以根據(jù)自己的需求下載安裝。

    如何安裝Docker?

    好了,通過(guò)前面的介紹,我們應(yīng)該對(duì)Docker有了初步的了解,下面開始進(jìn)入Docker的學(xué)習(xí)之旅了。

    而學(xué)習(xí)Docker的第一步,從安裝Docker運(yùn)行環(huán)境開始,我們以Docker的社區(qū)版本(CE)安裝為例,

    Docker社區(qū)版本提供了Mac OS,Microsoft WindowsLinux(Centos,Ubuntu,Fedora,Debian)等操作系統(tǒng)的安裝包,同時(shí)也支持在云服務(wù)器上的安裝,比如AWS Cloud

    在Windows系統(tǒng)上安裝

    Docker Desktop for Windows

    DockerWindows提供了一個(gè)桌面應(yīng)用程序管理的安裝包(Docker Desktop for Windows),不過(guò)對(duì)系統(tǒng)有以下幾點(diǎn)要求:

    1. 必須是64Windows10專業(yè)版,企業(yè)版,教育版,構(gòu)建在15063或更高版本,

    2. BIOS中啟用虛擬化。通常,默認(rèn)情況下啟用虛擬化。

    3. 至少有4GB內(nèi)存。

    4. CPU支持SLAT

    如果操作系統(tǒng)滿足上面的要求,則可以直接下載安裝包直接安裝,在安裝成功后,Docker并不會(huì)自動(dòng)啟動(dòng),需要我們自己?jiǎn)?dòng),我們可以開始菜單中找到Docker,如下圖,單擊啟動(dòng)便可啟動(dòng)。


    Docker Toolbox

    如果系統(tǒng)達(dá)不到上面的要求,比如說(shuō)你用的是Windows 7操作系統(tǒng),這時(shí)候要想使用Docker,便需要借助Docker ToolboxDocker ToolboxDocker提供的在比較舊的Mac OS,Windows操作系統(tǒng)上安裝Docker環(huán)境的工具集。

    Docker Toolbox包括docker-cli(就是我們?cè)诮K端使用的docker命令行工具)docker-compose(多容器管理工具),docker-mecahineVirtualBox(虛擬機(jī))Kitematic(docker的GUI管理工具)

    本質(zhì)上使用Docker Toolbox安裝Docker環(huán)境,實(shí)際上是在VirtualBox中創(chuàng)建一個(gè)Linux虛擬機(jī),并在虛擬機(jī)上安裝Docker

    另外,在安裝過(guò)程中會(huì)開啟WindowsHyper-V模塊(Windows操作系統(tǒng)實(shí)現(xiàn)虛擬化的一種技術(shù)),這里面有個(gè)要注意的點(diǎn)是如果開啟了Hyper-V,則VirtualBox不再生效了。

    在Mac OS上安裝

    如同Windows操作系統(tǒng)一樣,DockerMac OS也一樣提供一個(gè)桌面應(yīng)用程序(Docker Desktop for Mac),比較簡(jiǎn)單,從docker官網(wǎng)上下載Dokcer.dmg安裝,打開Docker.dmg,如下圖所示:


    直接拖動(dòng)Docker圖標(biāo)便完成了安裝。

    對(duì)于比較老的Mac OS操作系統(tǒng),也可以像Windows一樣,使用Docker Toolbox,這點(diǎn)可以參考上面的介紹。

    Mac OS上安裝完成之后,在Application中找到Docker圖標(biāo),雙擊打開便可以啟動(dòng)Docker了,如下:


    在Linux上安裝

    Linux操作系統(tǒng)上的安裝,主要以Centos7為例,其他Linux系統(tǒng)的發(fā)行版本,如UbuntuDebianFedora等,可以自行查詢Docker的官方文檔。

    刪除舊的docker版本

    可能有些Linux預(yù)先安裝Docker,但一般版本比較舊,所以可以先執(zhí)行以下代碼來(lái)刪除舊版本的Docker

    指定安裝版本
    使用yum安裝docker
    啟動(dòng)docker服務(wù)器

    測(cè)試安裝是否成功

    通過(guò)上面幾種方式安裝了Docker之后,我們可以通過(guò)下面的方法來(lái)檢測(cè)安裝是否成功。

    打印docker版本
    拉取鏡像并運(yùn)行容器

    運(yùn)行上面的命令之后,如果有如下圖所示的輸出結(jié)果,則說(shuō)明安裝已經(jīng)成功了。


    Docker的基本概念

    鏡像(Image)、容器(Container)與倉(cāng)庫(kù)(Repository),這三個(gè)是docker中最基本也是最核心的概念,對(duì)這三個(gè)概念的掌握與理解,是學(xué)習(xí)docker的關(guān)鍵。

    鏡像(Image)

    什么是Docker的鏡像?

    Docker本質(zhì)上是一個(gè)運(yùn)行在Linux操作系統(tǒng)上的應(yīng)用,而Linux操作系統(tǒng)分為內(nèi)核和用戶空間,無(wú)論是Centos還是Ubuntu,都是在啟動(dòng)內(nèi)核之后,通過(guò)掛載Root文件系統(tǒng)來(lái)提供用戶空間的,而Docker鏡像就是一個(gè)Root文件系統(tǒng)

    Docker鏡像是一個(gè)特殊的文件系統(tǒng),提供容器運(yùn)行時(shí)所需的程序、庫(kù)、資源、配置等文件,另外還包含了一些為運(yùn)行時(shí)準(zhǔn)備的一些配置參數(shù)(如匿名卷、環(huán)境變量、用戶等)。

    鏡像是一個(gè)靜態(tài)的概念,不包含任何動(dòng)態(tài)數(shù)據(jù),其內(nèi)容在構(gòu)建之后也不會(huì)被改變。

    下面的命令是一些對(duì)鏡像的基本操作,如下:

    查看鏡像列表

    由于我們前面已經(jīng)拉取了hello-world鏡像,所以會(huì)輸出下面的內(nèi)容:

    下面的命令也一樣可以查看本地的鏡像列表,而且寫法更簡(jiǎn)潔。

    從倉(cāng)庫(kù)拉取鏡像

    前面我們已經(jīng)演示過(guò)使用docker pull命令拉取了hello-world鏡像了,當(dāng)然使用docker image pull命令也是一樣的。

    一般默認(rèn)是從Docker Hub上拉取鏡像的,Docker HubDocker官方提供的鏡像倉(cāng)庫(kù)服務(wù)(Docker Registry),有大量官方或第三方鏡像供我們使用,比如我們可以在命令行中輸入下面的命令直接拉取一個(gè)Centos鏡像:

    docker pull命令的完整寫法如下:

    拉取一個(gè)鏡像,需要指定Docker Registry的地址和端口號(hào),默認(rèn)是Docker Hub,還需要指定倉(cāng)庫(kù)名和標(biāo)簽,倉(cāng)庫(kù)名和標(biāo)簽唯一確定一個(gè)鏡像,而標(biāo)簽是可能省略,如果省略,則默認(rèn)使用latest作為標(biāo)簽名,另外,倉(cāng)庫(kù)名則由作者名和軟件名組成。

    那么,我們上面使用centos,那是因?yàn)槭÷宰髡呙瑒t作者名library,表示Docker官方的鏡像,所以上面的命令等同于:

    因此,如果拉取非官方的第三方鏡像,則需要指定完整倉(cāng)庫(kù)名,如下:

    運(yùn)行鏡像

    使用docker run命令,可以通過(guò)鏡像創(chuàng)建一個(gè)容器,如下:

    刪除鏡像

    當(dāng)本地有些鏡像我們不需要時(shí),那我們也可以刪除該鏡像,以節(jié)省存儲(chǔ)空間,不過(guò)要注意,如果有使用該鏡像創(chuàng)建的容器未刪除,則不允許刪除鏡像。

    刪除鏡像的快捷命令:

    好了,關(guān)于Docker鏡像的相關(guān)知識(shí),我們就簡(jiǎn)單地介紹到這里,有機(jī)會(huì)的話,我們單獨(dú)寫一篇文章來(lái)談?wù)劊貏e構(gòu)建Docker鏡像部分的相關(guān)知識(shí),有必要深入再學(xué)習(xí)一下。

    容器(Container)

    Docker的鏡像是用于生成容器的模板,鏡像分層的,鏡像與容器的關(guān)系,就是面向?qū)ο缶幊讨蓄惻c對(duì)象的關(guān)系,我們定好每一個(gè)類,然后使用類創(chuàng)建對(duì)象,對(duì)應(yīng)到Docker的使用上,則是構(gòu)建好每一個(gè)鏡像,然后使用鏡像創(chuàng)建我們需要的容器。

    啟動(dòng)和停止容器

    啟動(dòng)容器有兩種方式,一種是我們前面已經(jīng)介紹過(guò)的,使用docker run命令通過(guò)鏡像創(chuàng)建一個(gè)全新的容器,如下:

    另外一種啟動(dòng)容器的方式就是啟動(dòng)一個(gè)已經(jīng)停止運(yùn)行的容器:

    要停止正在運(yùn)行的容器可以使用docker container stopdocker stop命令,如下:

    查看所有容器

    如果要查看本地所有的容器,可以使用docker container ls命令:

    查看所有容器也有簡(jiǎn)潔的寫法,如下:

    刪除容器

    我們也可以使用docker container rm命令,或簡(jiǎn)潔的寫法docker rm命令來(lái)刪除容器,不過(guò)不允許刪除正在運(yùn)行的容器,因此如果要?jiǎng)h除的話,就必須先停止容器,

    當(dāng)我們需要批量刪除所有容器,可以用下面的命令:

    進(jìn)入容器

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

    在前面的例子中,我們使用兩種方式構(gòu)建鏡像,構(gòu)建完成之后,可以在本地運(yùn)行鏡像,生成容器,但如果在更多的服務(wù)器運(yùn)行鏡像呢?很明顯,這時(shí)候我們需要一個(gè)可以讓我們集中存儲(chǔ)和分發(fā)鏡像的服務(wù),就像Github可以讓我們自己存儲(chǔ)和分發(fā)代碼一樣。

    Docker Hub就是Docker提供用于存儲(chǔ)和分布鏡像的官方Docker Registry,也是默認(rèn)的Registry,其網(wǎng)址為https://hub.,前面我們使用docker pull命令便從Docker Hub上拉取鏡像。

    Docker Hub有很多官方或其他開發(fā)提供的高質(zhì)量鏡像供我們使用,當(dāng)然,如果要將我們自己構(gòu)建的鏡像上傳到Docker Hub上,我們需要在Docker Hub上注冊(cè)一個(gè)賬號(hào),然后把自己在本地構(gòu)建的鏡像發(fā)送到Docker Hub的倉(cāng)庫(kù)當(dāng)中,Docker Registry包含很多個(gè)倉(cāng)庫(kù),每個(gè)倉(cāng)庫(kù)對(duì)應(yīng)多個(gè)標(biāo)簽,不同標(biāo)簽對(duì)應(yīng)一個(gè)軟件的不同版本。

    Docker的組成與架構(gòu)

    在安裝好并啟動(dòng)了Docker之后,我們可以使用在命令行中使用docker命令操作docker,比如我們使用如下命令打印docker的版本信息。

    其結(jié)果如下:


    從上面的圖中,我們看到打出了兩個(gè)部分的信息:ClientServer

    這是因?yàn)?code>Docker跟大部分服務(wù)端軟件一樣(如MySQL),都是使用C/S的架構(gòu)模型,也就是通過(guò)客戶端調(diào)用服務(wù)器,只是我們現(xiàn)在剛好服務(wù)端和客戶端都在同一臺(tái)機(jī)器上而已。

    因此,我們可以使用下面的圖來(lái)表示Docker的架構(gòu),DOCKER_HOSTDocker server,而Clinet便是我們?cè)诿钪惺褂?code>docker命令。


    Docker Engine

    docker server為客戶端提供了容器、鏡像、數(shù)據(jù)卷、網(wǎng)絡(luò)管理等功能,其實(shí),這些功能都是由Docker Engine來(lái)實(shí)現(xiàn)的。

    1. dockerd:服務(wù)器守護(hù)進(jìn)程。

    2. Client docker Cli:命令行接口

    3. REST API:除了cli命令行接口,也可以通過(guò)REST API調(diào)用docker

    下面是Docker Engine的示例圖:


    小結(jié)

    作為一名開發(fā)人員,在學(xué)習(xí)或開發(fā)過(guò)程中,總需要安裝各種各樣的開發(fā)環(huán)境,另外,一個(gè)技術(shù)團(tuán)隊(duì)在開發(fā)項(xiàng)目的過(guò)程,也常常需要統(tǒng)一開發(fā)環(huán)境,這樣可能避免環(huán)境不一致引發(fā)的一些問(wèn)題。

    雖然使用虛擬機(jī)可以解決上面的問(wèn)題,但虛擬機(jī)太重,對(duì)宿主機(jī)資源消耗太大,而作為輕量級(jí)容器技術(shù),Docker可以簡(jiǎn)單輕松地解決上述問(wèn)題,讓開發(fā)環(huán)境的安裝以及應(yīng)用的部署變得非常簡(jiǎn)單,而且使用Docker,比在虛擬機(jī)安裝操作系統(tǒng),要簡(jiǎn)單得多。


      本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
      轉(zhuǎn)藏 分享 獻(xiàn)花(0

      0條評(píng)論

      發(fā)表

      請(qǐng)遵守用戶 評(píng)論公約

      類似文章 更多

      主站蜘蛛池模板: 十八禁午夜福利免费网站| 国产福利深夜在线观看| 亚洲欧美日韩综合久久久| 婷婷色香五月综合缴缴情香蕉| 韩国免费A级毛片久久| 麻豆成人精品国产免费| 欧美高清狂热视频60一70| 免费无码又爽又刺激高潮| 亚洲第一精品一二三区| 美女裸体18禁免费网站| 国产精品大全中文字幕| 久久精品夜夜夜夜夜久久| 无套内谢少妇毛片在线| 果冻传媒MV国产推荐视频| 日韩高清国产中文字幕| 精品无码久久久久国产| 日本一区二区不卡精品| 国内精品久久久久影院优| 成人亚欧欧美激情在线观看| 亚洲国产一区二区A毛片| 嫩草成人AV影院在线观看| 精品亚洲国产成人av| 韩国免费A级毛片久久| 中文字幕亚洲制服在线看| 日韩AV片无码一区二区不卡电影| 苍井空毛片精品久久久| 波多野结衣乳巨码无在线观看| A毛片终身免费观看网站| 国产A级作爱片无码| 国产日产欧产精品精乱了派| 桃花岛亚洲成在人线AV| 亚洲综合在线一区二区三区| 日韩国产亚洲一区二区三区| 免费无码又爽又刺激高潮虎虎视频| 97人人超碰国产精品最新O| 粗壮挺进邻居人妻| 亚洲欧美偷国产日韩| 无码国产69精品久久久久孕妇| 久久99国内精品自在现线| 強壮公弄得我次次高潮A片| 亚洲精品日韩在线丰满|