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

预计阅读时间:6分钟

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

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

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

  1. 为您的应用程序创建一个新目录。

    该目录是您的docker-compose项目的上下文。对于 泊坞窗Windows版桌面码头工人Mac版桌面,您需要设置文件共享的,你需要将卷映射。

  2. 在您的目录中,使用dotnet:2.1-sdkDocker映像在该/app目录下的容器内并在工作目录中的主机中生成示例Web应用程序:

    $ docker run -v ${PWD}:/app --workdir /app microsoft/dotnet:2.1-sdk dotnet new mvc --auth Individual
    

    注意:如果在Windows的Docker Desktop中运行,请确保使用Powershell或指定应用程序目录的绝对路径。

  3. 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我们在下一步中创建的脚本。

  4. 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数据库映像启动提供了一些时间。

  5. 创建一个docker-compose.yml文件。在文件中写入以下内容,并确保SA_PASSWORDdb下面的环境变量中替换密码。该文件定义了图像作为独立服务进行交互的方式。

    注意: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"
    

    该文件定义webdb微服务,它们的关系,它们正在使用的端口以及它们的特定环境变量。

    注意:如果选择错误的Compose文件版本,则可能会收到错误消息。确保选择与您的系统兼容的版本。

  6. 转到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>();
    }
    [...]
    
  7. 转到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依赖项使用相同的版本。

  8. 准备好!现在,您可以运行docker-compose build命令。

    $ docker-compose build
    
  9. 确保为Docker Engine分配至少2GB的内存。这是在Mac上的Docker桌面Windows上的Docker桌面上执行此操作的方法 。这是在Linux容器上运行SQL Server所必需的。

  10. 运行docker-compose up命令。几秒钟后,您应该能够打开localhost:8000并访问ASP.NET核心示例网站。默认情况下,该应用程序正在侦听端口80,但我们将其映射到中的端口8000 docker-compose.yml

    $ docker-compose up
    

    继续尝试该网站!本示例使用后端的SQL Server数据库映像进行身份验证。

准备好!现在,您已经在Docker Compose中针对SQL Server运行了一个ASP.NET Core应用程序!此示例使用了一些最流行的Microsoft Linux产品。要了解有关Windows容器的更多信息,请查看Windows容器的 Docker实验室, 以试用.NET Framework和更多SQL Server教程。

下一步

更多撰写文档

dotnet.NETCore示例ASP.NET CoreSQL Servermssql