©
本文档使用
php.cn手册 发布
本快速入门指南演示了如何在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,您必须为您需要映射的卷设置文件共享。
在您的目录中,使用aspnetcore-build
Docker镜像在/app
目录下的容器中生成一个示例Web应用程序,并将其放入工作目录中的主机中:$ docker run -v $ {PWD}:/ app --workdir / app microsoft / aspnetcore -build:lts dotnet new mvc --auth单独 注意:如果在Docker for Windows中运行,请确保使用Powershell或指定应用程序目录的绝对路径。
Dockerfile
在您的应用程序目录中创建并添加以下内容:FROM microsoft / aspnetcore-build:lts COPY。/ app WORKDIR / app RUN“dotnet”,“restore”RUN“dotnet”,“build”EXPOSE 80 / tcp RUN chmod + x ./entrypoint.sh CMD / bin / bash ./entrypoint.sh该文件定义了如何构建Web应用程序图像。它将使用microsoft / aspnetcore-build,将卷与生成的代码进行映射,恢复依赖关系,构建项目并公开端口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数据库映像。
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 build
命令。$ docker-compose build
确保你至少分配4GB的内存给Docker Engine。以下是如何在Docker for Mac和Docker for Windows上执行此操作。这是在Linux容器上运行SQL Server所必需的。
运行该docker-compose up
命令。几秒钟后,您应该可以打开localhost:8000并查看ASP.NET核心示例网站。应用程序默认侦听端口80,但我们将其映射到端口8000 docker-compose.yml
。$ docker-compose up继续尝试网站!此示例将使用后端的SQL Server数据库映像进行身份验证。
准备!您现在有一个在Docker Compose中针对SQL Server运行的ASP.NET Core应用程序!本示例使用了一些最受欢迎的用于Linux的Microsoft产品。要了解有关Windows Containers的更多信息,请查看Docker Labs for Windows Containers以尝试.NET Framework和更多SQL Server教程。