Docker 17
撰写 | Compose

ASP.NET Core + SQL Server on Linux (Compose)

快速入门:使用SQL Server编写和ASP.NET Core

本快速入门指南演示了如何在Linux和Docker Compose上使用Docker Engine来设置和运行使用ASP.NET Core Build映像Linux映像上SQL Server的示例ASP.NET Core应用程序。您只需在选定的平台上安装Docker Engine和Docker Compose:Linux,Mac或Windows。

对于这个示例,我们将使用aspnetcore-buildDocker镜像创建一个示例.NET Core Web应用程序。之后,我们将创建一个Dockerfile,配置此应用程序以使用我们的SQL Server数据库,然后创建一个docker-compose.yml将定义所有这些组件的行为。

注意:此示例是为Linux上的Docker Engine制作的。对于Windows Containers,请访问Docker Labs for Windows Containers。

  • 为您的应用程序创建一个新目录。这个目录将是你的docker-compose项目的上下文。对于Docker for WindowsDocker for Mac,您必须为您需要映射的卷设置文件共享。

#!/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

该脚本将在启动后恢复数据库,然后运行该应用程序。这允许一段时间启动SQL Server数据库映像。

5. 创建一个docker-compose.yml文件。在文件中写入以下内容,并确保SA_PASSWORDdb下面的环境变量中替换密码。该文件将定义图像作为独立服务进行交互的方式。 注意:SQL Server容器需要安全密码才能启动:最小长度为8个字符,包括大写和小写字母,基本10位数字和/或非字母数字符号。

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"

此文件定义webdb微服务,他们的关系,他们正在使用的端口,和他们特定的环境变量。

6. 转到Startup.cs并找到所调用的函数ConfigureServices(提示:它应该在第42行)。替换整个函数以使用以下代码(注意括号!)。 注意:确保将下面变量中的Password字段更新为connection您在docker-compose.yml文件中定义的字段。

...公共无效ConfigureServices(IServiceCollection服务){/ /数据库连接字符串。//确保将“your_password”下面的密码值更新为您的实际密码。var connection = @“Server = db; Database = master; User = sa; Password = your_password;”; //此行在'options'参数中使用'UseSqlServer'//并且上面定义了连接字符串。services.AddDbContext <ApplicationDbContext>(options => options.UseSqlServer(connection)); services.AddIdentity <ApplicationUser,IdentityRole>().AddEntityFrameworkStores <ApplicationDbContext>().AddDefaultTokenProviders(); services.AddMvc(); //添加应用程序服务。services.AddTransient <IEmailSender,AuthMessageSender>(); 服务。AddTransient <ISmsSender,AuthMessageSender>(); } ...

  • 去app.csproj。你会发现一行:<PackageReference Include =“Microsoft.EntityFrameworkCore.Sqlite”Version =“1.1.2”/>生成的项目默认使用sqlite。要使用SQL Server,请添加以下代码行app.csproj:<PackageReference Include =“Microsoft.EntityFrameworkCore.SqlServer”Version =“1.1.2”/>在撰写本文时,Sqlite依赖关系的版本为1.1.2。对于SQL Server依赖项使用相同的版本。

准备!您现在有一个在Docker Compose中针对SQL Server运行的ASP.NET Core应用程序!本示例使用了一些最受欢迎的用于Linux的Microsoft产品。要了解有关Windows Containers的更多信息,请查看Docker Labs for Windows Containers以尝试.NET Framework和更多SQL Server教程。