?
本文檔使用 php中文網(wǎng)手冊 發(fā)布
本快速入門指南演示了如何在Linux和Docker Compose上使用Docker Engine來設(shè)置和運行使用ASP.NET Core Build映像和Linux映像上的SQL Server的示例ASP.NET Core應(yīng)用程序。您只需在選定的平臺上安裝Docker Engine和Docker Compose:Linux,Mac或Windows。
對于這個示例,我們將使用aspnetcore-build
Docker鏡像創(chuàng)建一個示例.NET Core Web應(yīng)用程序。之后,我們將創(chuàng)建一個Dockerfile
,配置此應(yīng)用程序以使用我們的SQL Server數(shù)據(jù)庫,然后創(chuàng)建一個docker-compose.yml
將定義所有這些組件的行為。
注意:此示例是為Linux上的Docker Engine制作的。對于Windows Containers,請訪問Docker Labs for Windows Containers。
為您的應(yīng)用程序創(chuàng)建一個新目錄。這個目錄將是你的docker-compose項目的上下文。對于Docker for Windows和Docker for Mac,您必須為您需要映射的卷設(shè)置文件共享。
在您的目錄中,使用aspnetcore-build
Docker鏡像在/app
目錄下的容器中生成一個示例Web應(yīng)用程序,并將其放入工作目錄中的主機中:$ docker run -v $ {PWD}:/ app --workdir / app microsoft / aspnetcore -build:lts dotnet new mvc --auth單獨 注意:如果在Docker for Windows中運行,請確保使用Powershell或指定應(yīng)用程序目錄的絕對路徑。
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,將卷與生成的代碼進行映射,恢復(fù)依賴關(guān)系,構(gòu)建項目并公開端口80.之后,它將調(diào)用entrypoint
我們將在下一步創(chuàng)建的腳本。
該Dockerfile
品牌使用一個入口點的到你的webapp碼頭工人的形象。在調(diào)用的文件中創(chuàng)建此腳本entrypoint.sh
并粘貼下面的內(nèi)容。 注意:確保使用UNIX行分隔符。如果您使用基于Windows的分隔符(回車和換行符),該腳本將不起作用。
#!/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
該腳本將在啟動后恢復(fù)數(shù)據(jù)庫,然后運行該應(yīng)用程序。這允許一段時間啟動SQL Server數(shù)據(jù)庫映像。
5. 創(chuàng)建一個docker-compose.yml
文件。在文件中寫入以下內(nèi)容,并確保SA_PASSWORD
在db
下面的環(huán)境變量中替換密碼。該文件將定義圖像作為獨立服務(wù)進行交互的方式。 注意:SQL Server容器需要安全密碼才能啟動:最小長度為8個字符,包括大寫和小寫字母,基本10位數(shù)字和/或非字母數(shù)字符號。
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行)。替換整個函數(shù)以使用以下代碼(注意括號?。?。 注意:確保將下面變量中的Password
字段更新為connection
您在docker-compose.yml
文件中定義的字段。
...公共無效ConfigureServices(IServiceCollection服務(wù)){/ /數(shù)據(jù)庫連接字符串。//確保將“your_password”下面的密碼值更新為您的實際密碼。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
。你會發(fā)現(xiàn)一行:<PackageReference Include =“Microsoft.EntityFrameworkCore.Sqlite”Version =“1.1.2”/>生成的項目默認(rèn)使用sqlite。要使用SQL Server,請?zhí)砑右韵麓a行app.csproj
:<PackageReference Include =“Microsoft.EntityFrameworkCore.SqlServer”Version =“1.1.2”/>在撰寫本文時,Sqlite依賴關(guān)系的版本為1.1.2。對于SQL Server依賴項使用相同的版本。
準(zhǔn)備!您現(xiàn)在可以運行該docker-compose build
命令。$ docker-compose build
確保你至少分配4GB的內(nèi)存給Docker Engine。以下是如何在Docker for Mac和Docker for Windows上執(zhí)行此操作。這是在Linux容器上運行SQL Server所必需的。
運行該docker-compose up
命令。幾秒鐘后,您應(yīng)該可以打開localhost:8000并查看ASP.NET核心示例網(wǎng)站。應(yīng)用程序默認(rèn)偵聽端口80,但我們將其映射到端口8000 docker-compose.yml
。$ docker-compose up繼續(xù)嘗試網(wǎng)站!此示例將使用后端的SQL Server數(shù)據(jù)庫映像進行身份驗證。
準(zhǔn)備!您現(xiàn)在有一個在Docker Compose中針對SQL Server運行的ASP.NET Core應(yīng)用程序!本示例使用了一些最受歡迎的用于Linux的Microsoft產(chǎn)品。要了解有關(guān)Windows Containers的更多信息,請查看Docker Labs for Windows Containers以嘗試.NET Framework和更多SQL Server教程。