Quickstart: Compose and ASP.NET Core with SQL Server

预计阅读时间:6分钟

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

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

注意:此示例是为 Linux 上的 Docker 引擎制作的. 对于 Windows 容器,请访问Docker Labs for Windows Containers .

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

    这个目录是你的 docker-compose 项目的上下文. 对于Docker Desktop for WindowsDocker Desktop for Mac ,您需要为需要映射的卷设置文件共享.

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

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

    注意:如果在 Docker Desktop for Windows 中运行,请确保使用 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 Docker 映像的入口点. 在名为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文件. 在文件中写入以下内容,并确保替换下面db下的SA_PASSWORD环境变量中的密码. 此文件定义图像作为独立服务交互的方式.

    注意: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 行下). 替换整个函数以使用以下代码(注意括号!).

    注意:确保将下面connection变量中的Password字段更新为您在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 引擎分配至少 2GB 的内存. 这是在Docker Desktop for MacDocker Desktop for Windows上的操作方法. 这是在 Linux 容器上运行 SQL Server 所必需的.

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

    $ docker-compose up
    

    Go ahead and try out the website! This sample uses the SQL Server database image in the back-end for authentication.

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

Next steps

More Compose documentation

dotnet, .NET, Core, example, ASP.NET 核心, SQL 服务器, mssql

by  icopy.site