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

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

生活随笔

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

asp.net

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

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

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

  • Docker-Compose

    • 代碼修改

    • yml file

    • up & down

  • 鏡像倉(cāng)庫(kù)

前言

上一篇【.Net Core in Docker極簡(jiǎn)入門(mén)(上篇)】講解了docker的一些基本命令和操作,并成功構(gòu)建了自己的asp.net core web應(yīng)用的鏡像,啟動(dòng)容器。本篇繼續(xù)。

開(kāi)始

上一篇的項(xiàng)目例子非常簡(jiǎn)單,通常我們的實(shí)際項(xiàng)目要復(fù)雜的多。項(xiàng)目中會(huì)依賴各種組件服務(wù),比如數(shù)據(jù)庫(kù),MQ,緩存等等。這就會(huì)涉及到多個(gè)容器,如果手動(dòng)用docker命令去一個(gè)一個(gè)的啟動(dòng)就很麻煩了,那么這時(shí)候就可以使用Docker-Compose來(lái)完成多個(gè)容器的管理。

Docker-Compose

什么是Docker Compose?

Compose 是用于定義和運(yùn)行多容器 Docker 應(yīng)用程序的工具。通過(guò) Compose,您可以使用 YML 文件來(lái)配置應(yīng)用程序需要的所有服務(wù)。然后,使用一個(gè)命令,就可以從 YML 文件配置中創(chuàng)建并啟動(dòng)所有服務(wù)。

簡(jiǎn)單來(lái)理解,Compose類似一個(gè)批量工具,可以執(zhí)行一組命令,支持批量構(gòu)建鏡像,批量啟動(dòng)容器,批量刪除容器等等功能。

Windows的Docker Desktop中已經(jīng)包括了Compose,Linux下Compose則需要單獨(dú)安裝一下。

下面在項(xiàng)目中添加一些數(shù)據(jù)庫(kù)操作的相關(guān)代碼便于測(cè)試,使用EF Core+SQL Server。

代碼修改

安裝EF Code相關(guān)的包:

修改代碼:

public?class?WeatherForecast {[Key]public?int?Id?{?get;?set;?}public?DateTime?Date?{?get;?set;?}public?int?TemperatureC?{?get;?set;?}public?int?TemperatureF?{?get;?set;?}public?string?Summary?{?get;?set;?} } public?class?DemoContext?:?DbContext {public?DemoContext(DbContextOptions<DemoContext>?options):?base(options){}public?DbSet<WeatherForecast>?WeatherForecasts?{?get;?set;?}protected?override?void?OnModelCreating(ModelBuilder?modelBuilder){base.OnModelCreating(modelBuilder);//初始化種子數(shù)據(jù)modelBuilder.Entity<WeatherForecast>().HasData(new?WeatherForecast{Id?=?1,Date?=?DateTime.Now,Summary?=?"none",TemperatureC?=?20,TemperatureF?=?32?+?(int)(20?/?0.5556)},?new?WeatherForecast{Id?=?2,Date?=?DateTime.Now.AddDays(1),Summary?=?"none",TemperatureC?=?25,TemperatureF?=?32?+?(int)(25?/?0.5556)});} } public?class?Startup {......public?void?ConfigureServices(IServiceCollection?services){services.AddControllers();services.AddDbContext<DemoContext>(opt?=>?opt.UseSqlServer(Configuration.GetConnectionString("DemoContext")));}public?void?Configure(IApplicationBuilder?app,?IWebHostEnvironment?env,?DemoContext?context){//自動(dòng)遷移context.Database.Migrate();......} } public?class?WeatherForecastController?:?ControllerBase {private?readonly?ILogger<WeatherForecastController>?_logger;private?readonly?DemoContext?_context;public?WeatherForecastController(ILogger<WeatherForecastController>?logger,?DemoContext?context){_logger?=?logger;_context?=?context;}[HttpGet]public?IEnumerable<WeatherForecast>?Get(){return?_context.WeatherForecasts.ToArray();} }

appsettings.json添加數(shù)據(jù)庫(kù)連接字符串配置:

{......"ConnectionStrings":?{"DemoContext":?"Server=sql-server;Database=DemoDB;User?Id=sa;Password=Password@2020;"} }

注意:Server=sql-server,這個(gè)sql-server是需要在docker-compose.yml中定義的,下面再說(shuō)。

添加遷移:

yml file

右鍵項(xiàng)目-添加-容器業(yè)務(wù)流程協(xié)調(diào)程序支持

添加后會(huì)生成docker-compose相關(guān)文件:

其中的docker-compose.yml文件需要修改一下:

version:?'3.4'services:webapplication1:image:?${DOCKER_REGISTRY-}webapplication1build:context:?.dockerfile:?WebApplication1/Dockerfileports:?-?'5000:80'networks:-?my-netdepends_on:-?sql-serversql-server:image:?mcr.microsoft.com/mssql/server:2019-CU5-ubuntu-18.04ports:?-?'1434:1433'environment:?ACCEPT_EULA:?YSA_PASSWORD:?Password@2020networks:?-?my-netnetworks:?my-net:?driver:?bridge?

services下定義了2個(gè)服務(wù)webapplication1、sql-server,相當(dāng)于2個(gè)容器。webapplication1是基于WebApplication1/Dockerfile構(gòu)建的鏡像${DOCKER_REGISTRY-}webapplication1來(lái)啟動(dòng),depends_on用于指定依賴的服務(wù),這里的webapplication1服務(wù)依賴于sql-server服務(wù)。networks用于指定網(wǎng)絡(luò),因?yàn)閐ocker中容器之間默認(rèn)是無(wú)法直接通信的,這里創(chuàng)建了一個(gè)bridge模式的網(wǎng)絡(luò)my-net,webapplication1和sql-server都在my-net網(wǎng)絡(luò)中,那么他們之間就可以通過(guò)服務(wù)名來(lái)通信。所以在上面webapplication1的數(shù)據(jù)庫(kù)連接字符串中就可以寫(xiě):Server=sql-server。通常數(shù)據(jù)庫(kù)的數(shù)據(jù)目錄會(huì)掛載到主機(jī)上,防止容器發(fā)生意外導(dǎo)致數(shù)據(jù)丟失。

上一篇有小伙伴問(wèn)容器內(nèi)能不能訪問(wèn)容器外的數(shù)據(jù)庫(kù),這個(gè)是可以訪問(wèn)的。訪問(wèn)宿主機(jī)的話直接用IP訪問(wèn)就可以,或者用host.docker.internal,這個(gè)host.docker.internal是docker安裝時(shí)會(huì)寫(xiě)入到你的hosts文件里的一個(gè)主機(jī)名,實(shí)際還是指向你的主機(jī)IP。

以上的yml內(nèi)容還是比較簡(jiǎn)單,yml文件是使用Compose必不可少的,語(yǔ)法可以自行學(xué)習(xí)一下。掌握其語(yǔ)法關(guān)鍵字后,你就可以在docker-compose.yml文件中定義更復(fù)雜的環(huán)境。

up & down

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

執(zhí)行docker-compose up,也可以加-d參數(shù),讓他在后臺(tái)運(yùn)行

啟動(dòng)完成后,瀏覽器訪問(wèn):http://localhost:5000/weatherforecast

成功。這里省略了docker-compose build命令,你也可以在up前先執(zhí)行build。

docker-compose是不是很方便呢,即使你的系統(tǒng)環(huán)境部署再?gòu)?fù)雜,也只需要一個(gè)up指令。

如果你想摧毀這個(gè)環(huán)境只需要執(zhí)行docker-compose down即可

同樣的,以上操作也可以直接在vs2019中完成,無(wú)需手動(dòng)執(zhí)行指令,只需要將docker-compose項(xiàng)目設(shè)為啟動(dòng)項(xiàng),然后直接運(yùn)行即可,還支持代碼調(diào)試哦。不過(guò)由于網(wǎng)絡(luò)等問(wèn)題,可能會(huì)遇到一些坑。。。

鏡像倉(cāng)庫(kù)

我們也可以把自己的鏡像推送到遠(yuǎn)程倉(cāng)庫(kù),然后在其他機(jī)器上直接就能通過(guò)命令拉取了。國(guó)內(nèi)阿里云之類的都有docker鏡像倉(cāng)庫(kù)服務(wù),也可以搭建私有倉(cāng)庫(kù),本文就推送到docker的官方倉(cāng)庫(kù)docker hub。首先需要在docker官網(wǎng)https://www.docker.com/注冊(cè)賬號(hào)。

重新構(gòu)建鏡像:docker build -t xhznl/webapp1 -f ./WebApplication1/Dockerfile .

其中xhznl是我的docker用戶名。

登錄docker:docker login,輸入自己的用戶名密碼。

登錄成功后即可推送鏡像,執(zhí)行:docker push xhznl/webapp1

推送成功,在docker官網(wǎng)可以查看鏡像:

這樣在其他機(jī)器的docker中也可以通過(guò)docker pull xhznl/webapp1來(lái)拉取這個(gè)鏡像。

修改docker-compose.yml文件,將webapplication1服務(wù)的image改為xhznl/webapp1,然后把這個(gè)docker-compose.yml文件放到任何裝有docker的機(jī)器上,只需執(zhí)行docker-compose up,即可啟動(dòng)程序的所有環(huán)境,是不是很神奇。

services:webapplication1:image:?xhznl/webapp1ports:?-?'5000:80'networks:-?my-netdepends_on:-?sql-server

最后推薦一波vs code,安裝docker相關(guān)插件,無(wú)論是編寫(xiě)yml文件還是管理docker都很方便, 很多操作都不用手敲命令啦。。。

最后

Docker作為當(dāng)今最流行的容器技術(shù),是很多技術(shù)架構(gòu)的基礎(chǔ)。它有很多的優(yōu)點(diǎn),使用中也會(huì)面臨各種問(wèn)題,希望本篇入門(mén)文章能夠幫助到一些初學(xué)的小伙伴。


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

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

總結(jié)

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

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