快速入门:使用SQL Server编写和使用ASP.NET Core
预计阅读时间:6分钟
本快速入门指南演示了如何在Linux上使用Docker Engine和Docker Compose并通过.NET Core SDK映像 和Linux上的 SQL Server来设置和运行示例ASP.NET Core应用程序 。您只需要在所选平台上安装Docker Engine 和Docker Compose:Linux,Mac或Windows。
对于此示例,我们使用microsoft/dotnet:2.1-sdk
Docker映像创建一个示例.NET Core Web应用程序
。之后,我们创建一个Dockerfile
,将其配置为使用我们的SQL Server数据库,然后创建一个
docker-compose.yml
定义所有这些组件行为的。
注意:此样本是为Linux上的Docker Engine制作的。对于Windows容器,请访问 Docker Labs for Windows Containers。
-
为您的应用程序创建一个新目录。
该目录是您的docker-compose项目的上下文。对于 泊坞窗Windows版桌面和 码头工人Mac版桌面,您需要设置文件共享的,你需要将卷映射。
-
在您的目录中,使用
dotnet:2.1-sdk
Docker映像在该/app
目录下的容器内并在工作目录中的主机中生成示例Web应用程序:$ docker run -v ${PWD}:/app --workdir /app microsoft/dotnet:2.1-sdk dotnet new mvc --auth Individual
注意:如果在Windows的Docker Desktop中运行,请确保使用Powershell或指定应用程序目录的绝对路径。
-
Dockerfile
在您的应用目录中创建一个,然后添加以下内容:# syntax=docker/dockerfile:1 FROM microsoft/dotnet:2.1-sdk COPY . /app WORKDIR /app RUN ["dotnet", "restore"] RUN ["dotnet", "build"] EXPOSE 80/tcp RUN chmod +x ./entrypoint.sh CMD /bin/bash ./entrypoint.sh
该文件定义了如何构建Web应用程序映像。它使用 .NET Core SDK映像,使用生成的代码映射卷,还原依赖关系,构建项目并公开端口80。此后,它将调用
entrypoint
我们在下一步中创建的脚本。 -
该
Dockerfile
品牌使用一个入口点的到你的webapp码头工人的形象。在一个名为的文件中创建此脚本,entrypoint.sh
然后粘贴以下内容。注意:确保使用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
此脚本在启动后还原数据库,然后运行该应用程序。这为SQL Server数据库映像启动提供了一些时间。
-
创建一个
docker-compose.yml
文件。在文件中写入以下内容,并确保SA_PASSWORD
在db
下面的环境变量中替换密码。该文件定义了图像作为独立服务进行交互的方式。注意:SQL Server容器需要安全的密码才能启动:最小长度为8个字符,包括大写和小写字母,基数为10的数字和/或非字母数字符号。
version: "3.9" services: web: build: . ports: - "8000:80" depends_on: - db db: image: "mcr.microsoft.com/mssql/server" environment: SA_PASSWORD: "Your_password123" ACCEPT_EULA: "Y"
该文件定义
web
和db
微服务,它们的关系,它们正在使用的端口以及它们的特定环境变量。注意:如果选择错误的Compose文件版本,则可能会收到错误消息。确保选择与您的系统兼容的版本。
-
转到
Startup.cs
并找到名为ConfigureServices
(提示:它应该在第42行下面)的函数。替换整个函数以使用以下代码(请注意括号!)。注意:请确保将 以下变量中的
Password
字段更新为connection
您在docker-compose.yml
文件中定义的字段。[...] public void ConfigureServices(IServiceCollection services) { // Database connection string. // Make sure to update the Password value below from "Your_password123" to your actual password. var connection = @"Server=db;Database=master;User=sa;Password=Your_password123;"; // This line uses 'UseSqlServer' in the 'options' parameter // with the connection string defined above. services.AddDbContext<ApplicationDbContext>( options => options.UseSqlServer(connection)); services.AddIdentity<ApplicationUser, IdentityRole>() .AddEntityFrameworkStores<ApplicationDbContext>() .AddDefaultTokenProviders(); services.AddMvc(); // Add application services. services.AddTransient<IEmailSender, AuthMessageSender>(); services.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 build
命令。$ docker-compose build
-
确保为Docker Engine分配至少2GB的内存。这是在Mac上的Docker桌面和 Windows上的Docker桌面上执行此操作的方法 。这是在Linux容器上运行SQL Server所必需的。
-
运行
docker-compose up
命令。几秒钟后,您应该能够打开localhost:8000并访问ASP.NET核心示例网站。默认情况下,该应用程序正在侦听端口80,但我们将其映射到中的端口8000docker-compose.yml
。$ docker-compose up
继续尝试该网站!本示例使用后端的SQL Server数据库映像进行身份验证。
准备好!现在,您已经在Docker Compose中针对SQL Server运行了一个ASP.NET Core应用程序!此示例使用了一些最流行的Microsoft Linux产品。要了解有关Windows容器的更多信息,请查看Windows容器的 Docker实验室, 以试用.NET Framework和更多SQL Server教程。