日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

.Net Core in Docker极简入门(上篇)

發(fā)布時(shí)間:2023/12/4 asp.net 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .Net Core in Docker极简入门(上篇) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

點(diǎn)擊上方藍(lán)字"小黑在哪里"關(guān)注我吧

  • 環(huán)境準(zhǔn)備

  • Docker基礎(chǔ)概念

  • Docker基礎(chǔ)命令

  • Docker命令實(shí)踐

  • 構(gòu)建Docker鏡像

    • Dockerfile

    • bulid & run

前言

Docker 是一個(gè)開(kāi)源的應(yīng)用容器引擎,它十分火熱,如今幾乎成為了后端開(kāi)發(fā)人員必須掌握的一項(xiàng)技能。即使你在生產(chǎn)環(huán)境中可能用不上它,就算把它當(dāng)作一個(gè)輔助開(kāi)發(fā)的工具來(lái)使用,也是非常方便的。本文就介紹一下.Net ?Core應(yīng)用在Docker中的一些基本使用。

開(kāi)始

環(huán)境準(zhǔn)備

首先安裝docker,去官網(wǎng)下載:https://www.docker.com/get-started

windows系統(tǒng)的話(huà),默認(rèn)win10(較新的版本更好,可以用wsl)。win7只能用Docker Toolbox,bug非常多,不建議使用。。。

windows/mac 直接下載對(duì)應(yīng)的文件安裝就可以(本文的系統(tǒng)環(huán)境是win10 2004版本。),linux可以通過(guò)命令來(lái)安裝。關(guān)于安裝,網(wǎng)上已經(jīng)有很多資料了,就不多介紹。只是安裝后有2個(gè)必要的設(shè)置需要注意一下:

  • 鏡像加速

    有很多提供免費(fèi)加速服務(wù)的網(wǎng)站,可以自行搜索,我這里用的是阿里云。這個(gè)國(guó)內(nèi)網(wǎng)絡(luò)必須配置,不然鏡像幾乎拉取不下來(lái)。

  • 鏡像儲(chǔ)存路徑

  • 默認(rèn)docker的運(yùn)行文件是在C盤(pán),C盤(pán)空間不夠的話(huà),可以設(shè)置到別的盤(pán)。

    新版本的windows Docker Desktop默認(rèn)使用wsl運(yùn)行:

    這個(gè)設(shè)置比較麻煩,具體可以參考我之前的一篇:win10使用WSL 2運(yùn)行Docker Desktop,運(yùn)行文件從C盤(pán)遷移到其他目錄。如果是老版本Hyper-V啟動(dòng)的話(huà),界面上設(shè)置就可以。

    Docker基礎(chǔ)概念

    docker中最重要的2個(gè)概念就是“鏡像”和“容器”。

    • 鏡像:

    鏡像(Image)就是一堆只讀層(read-only layer)的統(tǒng)一視角。

    • 容器:

    容器(container)的定義和鏡像(image)幾乎一模一樣,也是一堆層的統(tǒng)一視角,唯一區(qū)別在于容器的最上面那一層是可讀可寫(xiě)的。

    要理解docker鏡像和docker容器之間的區(qū)別,確實(shí)不容易。

    想象一下,我們開(kāi)發(fā)的一個(gè)asp.net mvc應(yīng)用,使用Visual Studio將它發(fā)布出來(lái)后,會(huì)得到一堆發(fā)布后的文件,包含dll,cshtml,css,js,靜態(tài)資源文件等等。那么這堆文件就類(lèi)似于一個(gè)鏡像,鏡像是無(wú)法直接運(yùn)行的。當(dāng)我們把這堆文件掛載到IIS的一個(gè)站點(diǎn)上,就可以運(yùn)行了,也能被外界訪(fǎng)問(wèn)了,這個(gè)IIS站點(diǎn)就類(lèi)似是一個(gè)容器。容器相當(dāng)于是鏡像的一個(gè)運(yùn)行實(shí)例,需要注意的是,容器的所有讀寫(xiě)操作都只是針對(duì)容器的文件系統(tǒng),并不會(huì)影響到鏡像。一個(gè)鏡像可以運(yùn)行多個(gè)容器,容器之間是相互隔離的。

    Docker基礎(chǔ)命令

    • 鏡像相關(guān):

    docker images:列出所有本地鏡像。

    docker rmi 鏡像...|鏡像ID...:刪除本地鏡像,可以同時(shí)指定多個(gè)。

    docker build -t myimage:1.1 .:基于Dockerfile構(gòu)建一個(gè)名為myimage,tag為1.1的鏡像,結(jié)尾的 . 代表當(dāng)前目錄。

    docker pull mcr.microsoft.com/mssql/server:2019-CU5-ubuntu-18.04:從微軟鏡像倉(cāng)庫(kù)中拉取tag為2019-CU5-ubuntu-18.04的sqlserver 2019鏡像。

    ......

    • 容器相關(guān):

    docker ps:列出運(yùn)行中的容器。

    docker ps -a:列出所有的容器,包含未運(yùn)行的。

    docker run -it --rm -p 8080:80 --name mynginx nginx:使用鏡像nginx創(chuàng)建并啟動(dòng)一個(gè)名為mynginx的容器;-it代表以交互模式啟動(dòng),并為容器重新分配一個(gè)偽輸入終端;-p指定端口映射,將容器的80端口映射到主機(jī)的8080端口;--rm代表容器停止時(shí)自動(dòng)刪除容器。

    docker run -d -p 8080:80 -v /nginx/data:/data --name mynginx nginx:latest:使用鏡像nginx(tag為latest)創(chuàng)建并啟動(dòng)一個(gè)名為mynginx的容器;-d代表以后臺(tái)模式啟動(dòng);-p指定端口映射,將容器的80端口映射到主機(jī)的8080端口;-v代表掛載卷,將主機(jī)的/nginx/data目錄掛載到容器的 /data目錄。

    docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong@Passw0rd>" -d -p 1433:1433 --name sqlserver2019 mcr.microsoft.com/mssql/server:2019-CU5-ubuntu-18.04:使用sqlserver鏡像(tag為2019-CU5-ubuntu-18.04)創(chuàng)建并啟動(dòng)一個(gè)名為sqlserver2019的容器;-d代表以后臺(tái)模式啟動(dòng);-p指定端口映射,將容器的1433端口映射到主機(jī)的1433端口;-e是指定環(huán)境變量。

    docker start/stop/restart 容器名...|容器ID...:分別是啟動(dòng),停止,重啟容器,可以同時(shí)指定多個(gè)。

    docker rm 容器名...|容器ID... :刪除容器,可以同時(shí)指定多個(gè)。

    docker logs 容器名|容器ID:查看容器日志。

    ......

    Docker命令實(shí)踐

    下面在docker中使用sqlserver2019鏡像啟動(dòng)一個(gè)容器。

  • 拉取鏡像:

  • docker pull mcr.microsoft.com/mssql/server:2019-CU5-ubuntu-18.04

    注意,mcr.microsoft.com是微軟的鏡像源,國(guó)內(nèi)訪(fǎng)問(wèn)會(huì)比較慢。。。

  • 啟動(dòng)容器:

  • docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Password@2020" -d -p 1433:1433 --name sqlserver2019 mcr.microsoft.com/mssql/server:2019-CU5-ubuntu-18.04

  • 連接測(cè)試

  • 使用可視化工具連接數(shù)據(jù)庫(kù)測(cè)試,工具有很多,我這里使用的是SQL Server Management(也可以直接在docker中使用命令進(jìn)入容器連接數(shù)據(jù)庫(kù)測(cè)試)。

    使用賬號(hào)sa/Password@2020連接。服務(wù)器名稱(chēng)localhost,1433這個(gè)1433也可以省略,默認(rèn)端口就是1433。

    測(cè)試連接成功。以上通過(guò)2個(gè)命令即可得到一個(gè)sqlserver2019數(shù)據(jù)庫(kù),是不是比直接安裝到電腦上要方便很多呢。類(lèi)似的很多開(kāi)發(fā)環(huán)境都可以這么搭建,比如mysql,postgres,redis,mongodb,rabbitmq等等,各種工具隨便折騰,玩壞了大不了刪除容器,重新再來(lái)。。。

    構(gòu)建Docker鏡像

    下面使用docker構(gòu)建一個(gè)asp.net core web應(yīng)用的鏡像。

    首先使用vs2019新建一個(gè)asp.net core web應(yīng)用程序,選擇web api作為項(xiàng)目模板。

    Dockerfile

    右鍵項(xiàng)目-添加-Docker支持,目標(biāo)OS選擇Linux。

    添加docker支持后,vs2019會(huì)自動(dòng)幫我們創(chuàng)建Dockerfile文件。Dockerfile就是用來(lái)構(gòu)建鏡像的文件,其中包含了各種指令。以下是Dockerfile指令詳解:

    #使用asp.net?core?3.1作為基礎(chǔ)鏡像,起一個(gè)別名為base FROM?mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim?AS?base #設(shè)置容器的工作目錄為/app WORKDIR?/app #暴露80端口 EXPOSE?80#使用.net?core?sdk?3.1作為基礎(chǔ)鏡像,起一個(gè)別名為build FROM?mcr.microsoft.com/dotnet/core/sdk:3.1-buster?AS?build #設(shè)置容器的工作目錄為/src WORKDIR?/src #拷貝WebApplication1/WebApplication1.csproj項(xiàng)目文件到容器中的/src/WebApplication1/目錄 COPY?["WebApplication1/WebApplication1.csproj",?"WebApplication1/"] #執(zhí)行dotnet?restore命令,相當(dāng)于平時(shí)用vs還原nuget包 RUN?dotnet?restore?"WebApplication1/WebApplication1.csproj" #拷貝當(dāng)前目錄的文件到到容器的/src目錄 COPY?.?. #設(shè)置容器的工作目錄為/src/WebApplication1 WORKDIR?"/src/WebApplication1" #執(zhí)行dotnet build命令,相當(dāng)于平時(shí)用vs生成項(xiàng)目。以Release模式生成到容器的/app/build目錄 RUN?dotnet?build?"WebApplication1.csproj"?-c?Release?-o?/app/build#將上面的build(.net?core?sdk?3.1)作為基礎(chǔ)鏡像,又重命名為publish FROM?build?AS?publish #執(zhí)行dotnet publish命令,相當(dāng)于平時(shí)用vs發(fā)布項(xiàng)目。以Release模式發(fā)布到容器的/app/publish目錄 RUN?dotnet?publish?"WebApplication1.csproj"?-c?Release?-o?/app/publish#將上面的base(asp.net?core?3.1)作為基礎(chǔ)鏡像,又重命名為final FROM?base?AS?final #設(shè)置容器的工作目錄為/app WORKDIR?/app #拷貝/app/publish目錄到當(dāng)前工作目錄 COPY?--from=publish?/app/publish?. #指定容器入口命令,容器啟動(dòng)時(shí)會(huì)運(yùn)行dotnet?WebApplication1.dll ENTRYPOINT?["dotnet",?"WebApplication1.dll"]

    內(nèi)容挺長(zhǎng),實(shí)際上做的事情主要就是通過(guò).net core cli命令來(lái)定義了一系列打包發(fā)布運(yùn)行的過(guò)程。

    bulid & run

    來(lái)到項(xiàng)目根目錄,啟動(dòng)PowerShell或cmd執(zhí)行docker命令。

    構(gòu)建鏡像:docker build -t webapp1 -f ./WebApplication1/Dockerfile .參數(shù)-f是指定Dockerfile所在的目錄。

    使用docker images查看本地鏡像,webapp1就是上面構(gòu)建完成的鏡像:

    啟動(dòng)容器:docker run -d -p 5000:80 --name web1 webapp1

    使用docker ps查看運(yùn)行中的容器:

    瀏覽器訪(fǎng)問(wèn):http://localhost:5000/weatherforecast

    至此,一個(gè)簡(jiǎn)單的asp.net core web應(yīng)用就成功運(yùn)行于docker之中。

    其實(shí)vs2019本身對(duì)docker支持就非常好,以上操作直接可以在vs2019中完成,無(wú)需手動(dòng)執(zhí)行docker命令。

    將項(xiàng)目設(shè)置為Docker啟動(dòng):

    Ctrl+F5即可啟動(dòng):

    注意,這里容器工具首次加載會(huì)比較慢。。。啟動(dòng)完成后會(huì)自動(dòng)打開(kāi)瀏覽器,并綁定了一個(gè)隨機(jī)端口:

    這就是vs2019自動(dòng)幫我們創(chuàng)建的容器:

    查看vs2019中容器工具的輸出日志,可以看到vs2019執(zhí)行的指令內(nèi)容。


    本篇先寫(xiě)到這里。


    如果本文對(duì)您有用,

    不妨點(diǎn)個(gè)“”或者轉(zhuǎn)發(fā)朋友圈支持一下

    總結(jié)

    以上是生活随笔為你收集整理的.Net Core in Docker极简入门(上篇)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。