非常教程

Docker 17参考手册

撰写 | Compose

ASP.NET Core + SQL Server on Linux (Compose)

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

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

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

  1. 为您的应用程序创建一个新目录。这个目录将是你的docker-compose项目的上下文。对于Docker for Windows和Docker for Mac,您必须为您需要映射的卷设置文件共享。
  2. 在您的目录中,使用aspnetcore-buildDocker镜像在/app目录下的容器中生成一个示例Web应用程序,并将其放入工作目录中的主机中:$ docker run -v $ {PWD}:/ app --workdir / app microsoft / aspnetcore -build:lts dotnet new mvc --auth单独 注意:如果在Docker for Windows中运行,请确保使用Powershell或指定应用程序目录的绝对路径。
  3. 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我们将在下一步创建的脚本。
  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" services: web: build: . ports: - "8000:80" depends_on: - db db: image: "microsoft/mssql-server-linux" environment: SA_PASSWORD: "your_password" ACCEPT_EULA: "Y"

此文件定义webdb微服务,他们的关系,他们正在使用的端口,和他们特定的环境变量。

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>(); } ...

  1. 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依赖项使用相同的版本。
  2. 准备!您现在可以运行该docker-compose build命令。$ docker-compose build
  3. 确保你至少分配4GB的内存给Docker Engine。以下是如何在Docker for Mac和Docker for Windows上执行此操作。这是在Linux容器上运行SQL Server所必需的。
  4. 运行该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教程。

撰写 | Compose相关

1.关于版本和升级 | About versions and upgrading (Compose)
2.CLI环境变量 | CLI environment variables (Compose)
3.命令行完成 | Command-line completion (Compose)
4.组成 | Compose
5.组合命令行参考 | Compose command-line reference
6.控制启动顺序 | Control startup order (Compose)
7.Django and PostgreSQL (Compose)
8.Docker堆栈和分布式应用程序包 | Docker stacks and distributed application bundles (Compose)
9.docker-compose构建 | docker-compose build
10.docker-compose 束 | docker-compose bundle
11.docker-compose配置 | docker-compose config
12.docker-compose创建 | docker-compose create
13.docker-compose down
14.docker-compose事件 | docker-compose events
15.docker-compose exec
16.docker-compose助手 | docker-compose help
17.docker-compose图像 | docker-compose images
18.docker-compose kill
19.docker-compose logs
20.docker-compose暂停 | docker-compose pause
21.docker-compose port
22.docker-compose ps
23.docker-compose pull
24.docker-compose push
25.docker-compose重启 | docker-compose restart
26.docker-compose rm
27.docker-compose运行 | docker-compose run
28.docker-compose 规模 | docker-compose scale
29.docker-compose开始 | docker-compose start
30.docker-compose结束 | docker-compose stop
31.docker-compose顶部 | docker-compose top
32.docker-compose 取消暂停 | docker-compose unpause
33.docker-compose up
34.环境文件 | Environment file (Compose)
35.Compose中的环境变量 | Environment variables in Compose
36.Compose中的扩展服务 | Extend services in Compose
37.常见问题 | Frequently asked questions (Compose)
38.开始 | Getting started (Compose)
39.安装Compose | Install Compose
40.链接环境变量(不建议使用) | Link environment variables (deprecated) (Compose)
41.Compose网络 | Networking in Compose
42.Docker Compose总览 | Overview of Docker Compose
43. docker-compose CLI总览 | Overview of docker-compose CLI
44.快速开始:Compose和WordPress | Quickstart: Compose and WordPress
45.Rails and PostgreSQL (Compose)
46.Compose的简单应用 | Sample apps with Compose
47.Compose在产品中的使用 | Using Compose in production
48.Using Compose with Swarm
49.版本1 | Version 1 (Compose)
50.版本2 | Version 2 (Compose)
51.版本3 | Version 3 (Compose)
Docker 17

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

主页 https://docker.com/
源码 https://github.com/docker/docker
版本 17
发布版本 17.06