docker架構(gòu)是什么?docker鏡像發(fā)布方法介紹

在網(wǎng)絡(luò)應(yīng)用的很多情況下,使用一些我們不多見(jiàn)的軟件或應(yīng)用是很正常的情況。這個(gè)時(shí)候就需要我們現(xiàn)學(xué)一些操作及應(yīng)用,才能讓我們的任務(wù)得到推進(jìn)。而學(xué)習(xí)新知識(shí)往往不是那么容易的,我們需要的是一篇足夠詳細(xì)的教學(xué)文章,讓我們這些沒(méi)有基礎(chǔ)的同學(xué)也能快速掌握。那么下面創(chuàng)新互聯(lián)建站小編就為大家介紹一下docker架構(gòu)是什么?為大家?guī)?lái)docker鏡像發(fā)布方法介紹,希望對(duì)大家有所幫助。

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供莫力達(dá)企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)H5開(kāi)發(fā)、小程序制作等業(yè)務(wù)。10年已為莫力達(dá)眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。Docker 架構(gòu)

在Docker的架構(gòu)中,主要有三個(gè)主要概念:鏡像Docker 鏡像可以看作是一個(gè)特殊的文件系統(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ǔ)鏡像,這些相同的基礎(chǔ)鏡像在docker的角度來(lái)看就是完全相同的層。在docker鏡像的傳輸過(guò)程中,當(dāng)某些相同的層已經(jīng)存在的時(shí)候,就完全不需要重新傳輸了,這大大提高了鏡像在網(wǎng)絡(luò)上的傳輸效率。分層的設(shè)計(jì)不僅使鏡像分發(fā)更高效,也有利于減少鏡像的存儲(chǔ)空間。每一層僅僅被存儲(chǔ)一次,就算基于相同基礎(chǔ)層的鏡像被創(chuàng)建兩個(gè)容器的時(shí)候,這兩個(gè)容器也是互相隔離的,雖然他們能讀到相同的文件,但是卻看不到對(duì)方文件的修改。

一個(gè)容器被創(chuàng)建的時(shí)候,會(huì)創(chuàng)建一個(gè)新的可寫層,容器中的修改會(huì)反應(yīng)到這個(gè)新的可寫層中。就算了容器修改了底層的文件,此文件的修改內(nèi)容會(huì)copy到頂層,底層依然不會(huì)發(fā)生變化。容器鏡像(Image)和容器(Container)的關(guān)系,就像是面向?qū)ο蟪绦蛟O(shè)計(jì)中的類和實(shí)例一樣,鏡像是靜態(tài)的定義,容器是鏡像運(yùn)行時(shí)的實(shí)體。容器可以被創(chuàng)建、啟動(dòng)、停止、刪除、暫停等。docker的容器通常是一個(gè)linux容器,它是運(yùn)行在宿主機(jī)上的一個(gè)進(jìn)程,但是和其他宿主進(jìn)程是隔離的,并且所用的資源是受限的(只能訪問(wèn)特定的資源,比如網(wǎng)絡(luò)接口,文件系統(tǒng))鏡像倉(cāng)庫(kù)鏡像倉(cāng)庫(kù)和它的字面意思一致,是很多鏡像的集合,它的作用就是把鏡像共享給每個(gè)人,當(dāng)然這里順便提一下,鏡像倉(cāng)庫(kù)也可以有私人倉(cāng)庫(kù)。

當(dāng)你的應(yīng)用程序被打包之后,如果想在另外一個(gè)機(jī)器上運(yùn)行,你就可以把你的應(yīng)用鏡像上傳到鏡像倉(cāng)庫(kù),然后開(kāi)放這個(gè)倉(cāng)庫(kù),這樣網(wǎng)絡(luò)上的任何機(jī)器都能夠下載你的鏡像,然后運(yùn)行。通常,一個(gè)倉(cāng)庫(kù)會(huì)包含同一個(gè)軟件不同版本的鏡像,而標(biāo)簽就常用于對(duì)應(yīng)該軟件的各個(gè)版本 。我們可以通過(guò):的格式來(lái)指定具體是這個(gè)軟件哪個(gè)版本的鏡像。如果不給出標(biāo)簽,將以 latest 作為默認(rèn)標(biāo)簽.。倉(cāng)庫(kù)又可以分為兩種形式:

private(私有倉(cāng)庫(kù))
Docker Registry 公有倉(cāng)庫(kù)是開(kāi)放給用戶使用、允許用戶管理鏡像的 Registry 服務(wù)。一般這類公開(kāi)服務(wù)允許用戶免費(fèi)上傳、下載公開(kāi)的鏡像,并可能提供收費(fèi)服務(wù)供用戶管理私有鏡像。
除了使用公開(kāi)服務(wù)外,用戶還可以在本地搭建私有 Docker Registry 。Docker 官方提供了 Docker Registry鏡像,可以直接使用做為私有 Registry 服務(wù)。當(dāng)用戶創(chuàng)建了自己的鏡像之后就可以使用 push 命令將它上傳到公有或者私有倉(cāng)庫(kù),這樣下次在另外一臺(tái)機(jī)器上使用這個(gè)鏡像時(shí)候,只需要從倉(cāng)庫(kù)上 pull 下來(lái)就可以了。構(gòu)建分發(fā)運(yùn)行鏡像開(kāi)發(fā)人員首先構(gòu)建一個(gè)鏡像,然后把鏡像推到鏡像倉(cāng)庫(kù)中。因此,任何可以訪問(wèn)鏡像倉(cāng)庫(kù)的人都可以使用該鏡像。然后,他們可以將鏡像拉取到任何運(yùn)行著Docker的機(jī)器上并運(yùn)行鏡像。Docker會(huì)基于鏡像創(chuàng)建一個(gè)獨(dú)立的容器,并運(yùn)行二進(jìn)制可執(zhí)行文件指定其作為鏡像的一部分。

docker的缺陷
就像所有的技術(shù)解決方案,docker也不是完美的。docker的缺陷在于運(yùn)行的內(nèi)核,由于它直接運(yùn)行在宿主機(jī)的內(nèi)核之上,所以如果docker容器的運(yùn)行內(nèi)核版本和宿主機(jī)的內(nèi)核不匹配就會(huì)出現(xiàn)問(wèn)題。追根到底,還是硬件架構(gòu)設(shè)計(jì)上的差異,不僅僅是docker容器,幾乎所有的軟件都會(huì)有內(nèi)核架構(gòu)不同而不能運(yùn)行的問(wèn)題。除此之外,由于docker是基于linux的容器技術(shù),所以在windows下運(yùn)行并不令人滿意,雖然這些年docker在windows上也進(jìn)步了很多。 成都小程序開(kāi)發(fā)
docker鏡像發(fā)布
docker鏡像的倉(cāng)庫(kù)有很多,這里以官方網(wǎng)站https://hub.docker.com/ 為例,首先你要在官網(wǎng)創(chuàng)建一個(gè)賬號(hào),然后可以在Account Settings=》Security中設(shè)置一個(gè)AccessToken ,這里為了演示,沒(méi)有在官網(wǎng)顯示創(chuàng)建倉(cāng)庫(kù)。因?yàn)槲沂潜旧硎荂#出身,這里利用vs2019來(lái)做演示。打開(kāi)vs2019新建一個(gè)netcore的項(xiàng)目,我這里創(chuàng)建一個(gè)控制臺(tái)程序,程序很簡(jiǎn)單:
static void Main(string[] args) { Console.WriteLine("Hello World!"); while (true) { Console.WriteLine("Hello World22222!"); System.Threading.Thread.Sleep(1000); } }
然后在項(xiàng)目右鍵 添加=》docker支持,會(huì)根據(jù)當(dāng)前項(xiàng)目自動(dòng)生成dockerfile文件。就算沒(méi)有ide的支持,也可以自己手?jǐn)]一個(gè)dockerfile文件,然后利用docker的命令打包,當(dāng)然語(yǔ)法和以下是一樣的:
FROM mcr.microsoft.com/dotnet/core/runtime:3.0-buster-slim AS base WORKDIR /app FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build WORKDIR /src COPY ["netcoretest/netcoretest.csproj", "netcoretest/"] RUN dotnet restore "netcoretest/netcoretest.csproj" COPY . . WORKDIR "/src/netcoretest" RUN dotnet build "netcoretest.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "netcoretest.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "netcoretest.dll"]
然后項(xiàng)目右鍵 發(fā)布=》容器注冊(cè)表=》docker hub 創(chuàng)建發(fā)布選項(xiàng),會(huì)彈出輸入docker hub賬號(hào)密碼彈窗,然后輸入賬號(hào)密碼,最后點(diǎn)擊發(fā)布按鈕,本地必須要安裝docker哦,我這里為了演示,在windows上安裝的docker for windows。和以上類似,就算沒(méi)有ide的支持,我們一樣可以利用docker命令把鏡像推送到指定倉(cāng)庫(kù)。這里只是演示流程,所以不要糾結(jié)。

docker鏡像發(fā)布
如果環(huán)境沒(méi)有錯(cuò)誤的話,發(fā)布過(guò)程中會(huì)彈出黑窗口:

docker鏡像發(fā)布
發(fā)布完成,在docker hub中刷新頁(yè)面會(huì)發(fā)現(xiàn)新倉(cāng)庫(kù)已經(jīng)被創(chuàng)建好了。
接下來(lái)就是在裝有docker的機(jī)器上,拉取進(jìn)行并運(yùn)行容器了,這里以我本地windows 和測(cè)試服務(wù)器linux為例,分別演示,但是其實(shí)在兩個(gè)操作系統(tǒng)中命令是一模一樣的:
docker run chenhongyu/netcoretest

無(wú)論是在windows上還是在linux上,容器成功被拉取運(yùn)行。

上面這篇文章簡(jiǎn)單的為大家介紹了一下docker鏡像發(fā)布的方法以及docker的相關(guān)知識(shí),如果我們此前對(duì)此類的知識(shí)一點(diǎn)也沒(méi)有了解的,希望各位仔細(xì)研讀這篇文章,文章介紹的非常詳細(xì),相信在用心之后你也能夠快速掌握。如果你還想了解更多的相關(guān)知識(shí)與內(nèi)容,歡迎長(zhǎng)期關(guān)注創(chuàng)新互聯(lián),你定會(huì)有所收獲。

新聞名稱:docker架構(gòu)是什么?docker鏡像發(fā)布方法介紹
文章URL:http://muchs.cn/article28/sdeijp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、關(guān)鍵詞優(yōu)化網(wǎng)站營(yíng)銷、企業(yè)建站App設(shè)計(jì)、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)