前言
在Docker生態(tài)系統(tǒng)中除了上一節(jié)所講解的基本概念,還有其他專業(yè)術(shù)語,本文我們將一筆帶過,同時(shí)會(huì)開始陸續(xù)進(jìn)入到在.NET Core中使用Docker。
專業(yè)術(shù)語
Docker Engine(Docker引擎):客戶端 - 服務(wù)器應(yīng)用程序。 Docker公司將Docker Engine分為兩個(gè)產(chǎn)品。 Docker
Community Edition(CE)基于開源工具且免費(fèi),我們學(xué)習(xí)時(shí)可以使用這款產(chǎn)品。 Docker
Enterprise附帶了其他功能支持,比如管理和安全等等功能。
Docker Client(Docker客戶端):我們與Docker進(jìn)行交互的主要方式。
使用Docker命令行界面(CLI)時(shí),在終端中鍵入以docker開頭的命令,Docker Client會(huì)使用Docker
API將命令發(fā)送到Docker守護(hù)進(jìn)程中。
Docker Daemon(Docker守護(hù)進(jìn)程):監(jiān)聽Docker API請(qǐng)求的Docker服務(wù)器。 Docker守護(hù)進(jìn)程主要管理鏡像,容器,網(wǎng)絡(luò)和卷。
Docker Volumes(Docker卷):存儲(chǔ)創(chuàng)建應(yīng)用程序和運(yùn)行應(yīng)用程序持久化數(shù)據(jù)的最佳方式。
Docker Registry:存儲(chǔ)Docker鏡像的遠(yuǎn)程注冊(cè)位置。
我們將鏡像推送到注冊(cè)表并從注冊(cè)表中提取圖像,我們可以托管自己的注冊(cè)表或使用供應(yīng)商商的注冊(cè)表。
Docker Hub:Docker鏡像的最大注冊(cè)表。 它也是Dcoker默認(rèn)的注冊(cè)表位置, 我們可以在Docker
Hub上找到免費(fèi)的鏡像并存儲(chǔ)我們自己的圖像。
Docker Networking:允許我們將Docker容器連接在一起。 連接的Docker容器可以位于同一主機(jī)或多個(gè)主機(jī)上。
Docker Compose:屬于一個(gè)工具,我們可以非常輕松地運(yùn)行需要多個(gè)Docker容器的應(yīng)用程序。 Docker
Compose允許我們將命令寫到docker-compose.yml文件中以供重用。 Docker
Compose命令行界面(cli)使我們可以更輕松地與多容器應(yīng)用程序進(jìn)行交互。 Docker Compose免費(fèi)安裝Docker。
Docker Swarm:容器部署編排的產(chǎn)品。Docker官方教程進(jìn)行容器編排和部署使用的Docker Swarm。 建議不要浪費(fèi)時(shí)間在Docker
Swarm上,推薦使用Kubernetes(k8s)。
Docker Services:分布式應(yīng)用程序的不同部分。?服務(wù)實(shí)際上只是“生產(chǎn)中的容器”。服務(wù)只運(yùn)行一個(gè)鏡像,但它編碼了鏡像的運(yùn)行方式 -
它應(yīng)該使用哪些端口,容器應(yīng)該運(yùn)行多少個(gè)副本,以便服務(wù)具有所需的容量等等。
擴(kuò)展服務(wù)會(huì)更改運(yùn)行該軟件的容器實(shí)例的數(shù)量,從而為流程中的服務(wù)分配更多計(jì)算資源。Docker服務(wù)允許我們跨多個(gè)Docker守護(hù)進(jìn)程擴(kuò)展容器,并使Docker
Swarms成為可能。
回顧容器
Docker鏡像在構(gòu)建時(shí)被創(chuàng)建,而Dokcer容器在運(yùn)行時(shí)被創(chuàng)建
。Dockerfile是Docker的核心,Dockerfile告訴Docker如何構(gòu)建鏡像從而被用來制作容器,每個(gè)Docker鏡像都包含一個(gè)名為Dockerfile但沒有擴(kuò)展名的文件。當(dāng)調(diào)用docker
build以創(chuàng)建映像時(shí),假定Dockerfile位于當(dāng)前工作目錄中,可以使用文件標(biāo)志(-f)指定到其他位置,容器是由一系列層所構(gòu)建,而且每個(gè)鏡像層只讀,除了位于其他鏡像層之上的最終容器鏡像層。
Dockerfile告訴Docker要添加哪些層以及添加它們的順序,每個(gè)鏡像層實(shí)際上只是一個(gè)包含自上一層以來的所更改的文件。
在linux中,幾乎所有東西都是文件。基礎(chǔ)鏡像提供初始層,基礎(chǔ)鏡像也稱為父鏡像,將鏡像從遠(yuǎn)程存儲(chǔ)庫提取到本地時(shí),僅僅只下載本地計(jì)算機(jī)上尚未存在的層,
Docker通過重用現(xiàn)有層來節(jié)省空間和時(shí)間。
Dockerfile指令是一行開頭的大寫單詞,后緊跟其參數(shù),Dockerfile中的每一行都可以包含一條指令。 構(gòu)建圖像時(shí),將從上到下處理指令,如下:
只有FROM,RUN,COPY和ADD指令才能在最終鏡像中創(chuàng)建鏡像層,其他指令只是作為配置或說明,比如添加元數(shù)據(jù)或告訴Docker在運(yùn)行時(shí)執(zhí)行某些操作,例如公開端口或運(yùn)行命令。在本文中,我們使用基于linux的Docker鏡像,當(dāng)然我們也可以使用基于Windows的鏡像,建議使用linux。接下來我們來過濾下Dockerfile中各個(gè)指令說明。
Dockerfile指令
FROM - 指定基礎(chǔ)(父)鏡像。
LABEL - 提供元數(shù)據(jù),包含維護(hù)者信息。
ENV - 設(shè)置持久化環(huán)境變量。
RUN - 運(yùn)行命令并創(chuàng)建鏡像層,用于將包安裝到容器中。
COPY - 將文件和目錄復(fù)制到容器中。
ADD - 將文件和目錄復(fù)制到容器中。 可以u(píng)pack本地.tar文件。
CMD - 為執(zhí)行容器提供命令和參數(shù),可以覆蓋參數(shù),只能有一個(gè)CMD。
WORKDIR - 設(shè)置后續(xù)說明的工作目錄。
ARG - 定義一個(gè)在構(gòu)建時(shí)傳遞給Docker的變量。
ENTRYPOINT - 為正在執(zhí)行的容器提供命令和參數(shù)。?
EXPOSE - 對(duì)外暴露端口。
VOLUME - 創(chuàng)建目錄用于訪問和存儲(chǔ)持久化數(shù)據(jù)。
.NET Core入門例子?
接下來我們以.NET Core中使用Docker并輸出Hello World結(jié)束本文。
我們通過命令創(chuàng)建一個(gè).NET Core控制臺(tái)程序,接下來為了在頁面上輸出Hello World,我們需要使用中間件,所以我們添加AspNetCore包,如下:
然后我們打開控制臺(tái)程序,添加中間件打印Hello World代碼:
public class Startup { public void Configure(IApplicationBuilder
applicationBuilder, IHostingEnvironment hostingEnvironment) {
applicationBuilder.Run(async context => { await context.Response.WriteAsync("
Hello World"); }); } } class Program { static void Main(string[] args) {
WebHost.CreateDefaultBuilder() .UseStartup<Startup>() .UseKestrel() .UseUrls("
http://0.0.0.0:5050") .Build() .Run(); } }
程序已就緒完畢,接下來我們發(fā)布該控制臺(tái)程序,如下:
接下來將執(zhí)行上述步驟生成的bin目錄(實(shí)際上只需拷貝發(fā)布后生成的publish目錄即可,為了省事,我直接拷貝了整個(gè)bin目錄)拷貝到ubuntu中(由于我對(duì)linux不熟悉,所以采用虛擬機(jī)加載桌面端ubuntu鏡像的方式,對(duì)于從未使用過linux的童鞋,推薦使用桌面端ubuntu,友好的GUI界面,方便我們初學(xué)知道各個(gè)文件夾是做什么的,一看便知,后續(xù)再使用服務(wù)端版的ubuntu就會(huì)得心應(yīng)手啦)。?
?
接下來我們進(jìn)入HelloWorld文件目錄,創(chuàng)建Dockerfile文件從而來創(chuàng)建.NET Core鏡像。
然后我們來編寫Dockerfile文件構(gòu)建鏡像,如下:
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime COPY .
/bin/Debug/netcoreapp2.2/linux-x64/publish/ ./ ENTRYPOINT ["dotnet", "
HelloWorld.dll"]
父鏡像為.NET Core
2.2版本和我們創(chuàng)建的程序版本一致,然后將我們的應(yīng)用程序(即publish目錄)拷貝,最后指定程序運(yùn)行的命令和參數(shù)。有了Dockerfile文件,那么我們就可以開始構(gòu)建鏡像了,終端繼續(xù)運(yùn)行如下命令(
注意:鏡像標(biāo)簽名稱必須全部為小寫,否則報(bào)錯(cuò)):
docker build . -t hellowrold
鏡像已構(gòu)建完畢,接下來則是創(chuàng)建并啟動(dòng)容器運(yùn)行程序,如下:
docker run -p 5050:5050 hellowrold
從上述我們可看到容器已正常啟動(dòng),且運(yùn)行環(huán)境為生產(chǎn)環(huán)境,監(jiān)聽端口為5050。桌面版ubuntu默認(rèn)為我們安裝了火狐瀏覽器,此時(shí)我們打開瀏覽器將會(huì)輸出Hello
World,如下:
總結(jié)?
本文我們介紹Docker中的一些術(shù)語,然后最后寫了一個(gè)在.NET
Core中使用Docker的入門例子,非常簡(jiǎn)單。若直接使用服務(wù)端版本的ubuntu我是一臉懵逼,有了界面,我也大概知道了一些文件夾里存放的是什么,一目了然,雖說這還只是冰山一角,每天積累一點(diǎn),日積月累,厚積薄發(fā)嘛不是。?
熱門工具 換一換
感谢您访问我们的网站,您可能还对以下资源感兴趣:
调教肉文小说-国产成本人片免费av-空姐av种子无码-在线观看免费午夜视频-综合久久精品激情-国产成人丝袜视频在线观看软件-大芭区三区四区无码-啊啊好爽啊啊插啊用力啊啊-wanch视频网-国产精品成人a免费观看