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-build
Docker镜像创建一个示例.NET Core Web应用程序。之后,我们将创建一个Dockerfile
,配置此应用程序以使用我们的SQL Server数据库,然后创建一个docker-compose.yml
将定义所有这些组件的行为。
注意
:此示例是为Linux上的Docker Engine制作的。对于Windows Containers,请访问Docker Labs for Windows Containers。
- 为您的应用程序创建一个新目录。这个目录将是你的docker-compose项目的上下文。对于Docker for Windows和Docker 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_PASSWORD
在db
下面的环境变量中替换密码。该文件将定义图像作为独立服务进行交互的方式。 注意
: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"
此文件定义web
和db
微服务,他们的关系,他们正在使用的端口,和他们特定的环境变量。
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教程。