?
本文檔使用 PHP中文網(wǎng)手冊(cè) 發(fā)布
本快速入門(mén)指南演示了如何在Linux和Docker Compose上使用Docker Engine來(lái)設(shè)置和運(yùn)行使用ASP.NET Core Build映像和Linux映像上的SQL Server的示例ASP.NET Core應(yīng)用程序。您只需在選定的平臺(tái)上安裝Docker Engine和Docker Compose:Linux,Mac或Windows。
對(duì)于這個(gè)示例,我們將使用aspnetcore-build
Docker鏡像創(chuàng)建一個(gè)示例.NET Core Web應(yīng)用程序。之后,我們將創(chuàng)建一個(gè)Dockerfile
,配置此應(yīng)用程序以使用我們的SQL Server數(shù)據(jù)庫(kù),然后創(chuàng)建一個(gè)docker-compose.yml
將定義所有這些組件的行為。
注意:此示例是為L(zhǎng)inux上的Docker Engine制作的。對(duì)于Windows Containers,請(qǐng)?jiān)L問(wèn)Docker Labs for Windows Containers。
為您的應(yīng)用程序創(chuàng)建一個(gè)新目錄。這個(gè)目錄將是你的docker-compose項(xiàng)目的上下文。對(duì)于Docker for Windows和Docker for Mac,您必須為您需要映射的卷設(shè)置文件共享。
在您的目錄中,使用aspnetcore-build
Docker鏡像在/app
目錄下的容器中生成一個(gè)示例Web應(yīng)用程序,并將其放入工作目錄中的主機(jī)中:$ docker run -v $ {PWD}:/ app --workdir / app microsoft / aspnetcore -build:lts dotnet new mvc --auth單獨(dú) 注意:如果在Docker for Windows中運(yùn)行,請(qǐng)確保使用Powershell或指定應(yīng)用程序目錄的絕對(duì)路徑。
Dockerfile
在您的應(yīng)用程序目錄中創(chuàng)建并添加以下內(nèi)容:FROM microsoft / aspnetcore-build:lts COPY。/ app WORKDIR / app RUN“dotnet”,“restore”RUN“dotnet”,“build”EXPOSE 80 / tcp RUN chmod + x ./entrypoint.sh CMD / bin / bash ./entrypoint.sh該文件定義了如何構(gòu)建Web應(yīng)用程序圖像。它將使用microsoft / aspnetcore-build,將卷與生成的代碼進(jìn)行映射,恢復(fù)依賴(lài)關(guān)系,構(gòu)建項(xiàng)目并公開(kāi)端口80.之后,它將調(diào)用entrypoint
我們將在下一步創(chuàng)建的腳本。
該Dockerfile
品牌使用一個(gè)入口點(diǎn)的到你的webapp碼頭工人的形象。在調(diào)用的文件中創(chuàng)建此腳本entrypoint.sh
并粘貼下面的內(nèi)容。 注意:確保使用UNIX行分隔符。如果您使用基于Windows的分隔符(回車(chē)和換行符),該腳本將不起作用。
#!/bin/bash set -e run_cmd="dotnet run --server.urls http://*:80" until dotnet ef database update; do >&2 echo "SQL Server is starting up" sleep 1 done >&2 echo "SQL Server is up - executing command" exec $run_cmd
該腳本將在啟動(dòng)后恢復(fù)數(shù)據(jù)庫(kù),然后運(yùn)行該應(yīng)用程序。這允許一段時(shí)間啟動(dòng)SQL Server數(shù)據(jù)庫(kù)映像。
5. 創(chuàng)建一個(gè)docker-compose.yml
文件。在文件中寫(xiě)入以下內(nèi)容,并確保SA_PASSWORD
在db
下面的環(huán)境變量中替換密碼。該文件將定義圖像作為獨(dú)立服務(wù)進(jìn)行交互的方式。 注意:SQL Server容器需要安全密碼才能啟動(dòng):最小長(zhǎng)度為8個(gè)字符,包括大寫(xiě)和小寫(xiě)字母,基本10位數(shù)字和/或非字母數(shù)字符號(hào)。
version: "3" services: web: build: . ports: - "8000:80" depends_on: - db db: image: "microsoft/mssql-server-linux" environment: SA_PASSWORD: "your_password" ACCEPT_EULA: "Y"
此文件定義web
和db
微服務(wù),他們的關(guān)系,他們正在使用的端口,和他們特定的環(huán)境變量。
6. 轉(zhuǎn)到Startup.cs
并找到所調(diào)用的函數(shù)ConfigureServices
(提示:它應(yīng)該在第42行)。替換整個(gè)函數(shù)以使用以下代碼(注意括號(hào)!)。 注意:確保將下面變量中的Password
字段更新為connection
您在docker-compose.yml
文件中定義的字段。
...公共無(wú)效ConfigureServices(IServiceCollection服務(wù)){/ /數(shù)據(jù)庫(kù)連接字符串。//確保將“your_password”下面的密碼值更新為您的實(shí)際密碼。var connection = @“Server = db; Database = master; User = sa; Password = your_password;”; //此行在'options'參數(shù)中使用'UseSqlServer'//并且上面定義了連接字符串。services.AddDbContext <ApplicationDbContext>(options => options.UseSqlServer(connection)); services.AddIdentity <ApplicationUser,IdentityRole>().AddEntityFrameworkStores <ApplicationDbContext>().AddDefaultTokenProviders(); services.AddMvc(); //添加應(yīng)用程序服務(wù)。services.AddTransient <IEmailSender,AuthMessageSender>(); 服務(wù)。AddTransient <ISmsSender,AuthMessageSender>(); } ...
去app.csproj
。你會(huì)發(fā)現(xiàn)一行:<PackageReference Include =“Microsoft.EntityFrameworkCore.Sqlite”Version =“1.1.2”/>生成的項(xiàng)目默認(rèn)使用sqlite。要使用SQL Server,請(qǐng)?zhí)砑右韵麓a行app.csproj
:<PackageReference Include =“Microsoft.EntityFrameworkCore.SqlServer”Version =“1.1.2”/>在撰寫(xiě)本文時(shí),Sqlite依賴(lài)關(guān)系的版本為1.1.2。對(duì)于SQL Server依賴(lài)項(xiàng)使用相同的版本。
準(zhǔn)備!您現(xiàn)在可以運(yùn)行該docker-compose build
命令。$ docker-compose build
確保你至少分配4GB的內(nèi)存給Docker Engine。以下是如何在Docker for Mac和Docker for Windows上執(zhí)行此操作。這是在Linux容器上運(yùn)行SQL Server所必需的。
運(yùn)行該docker-compose up
命令。幾秒鐘后,您應(yīng)該可以打開(kāi)localhost:8000并查看ASP.NET核心示例網(wǎng)站。應(yīng)用程序默認(rèn)偵聽(tīng)端口80,但我們將其映射到端口8000 docker-compose.yml
。$ docker-compose up繼續(xù)嘗試網(wǎng)站!此示例將使用后端的SQL Server數(shù)據(jù)庫(kù)映像進(jìn)行身份驗(yàn)證。
準(zhǔn)備!您現(xiàn)在有一個(gè)在Docker Compose中針對(duì)SQL Server運(yùn)行的ASP.NET Core應(yīng)用程序!本示例使用了一些最受歡迎的用于Linux的Microsoft產(chǎn)品。要了解有關(guān)Windows Containers的更多信息,請(qǐng)查看Docker Labs for Windows Containers以嘗試.NET Framework和更多SQL Server教程。