本文模拟一个比较完整的项目,包括前端(MVC), 后端(WebApi)和数据库(mssql-server-linux)。通过Docker Compose 定义,组合并执行它们。涉及到 Docker Compose 安装,命令,docker-compose.yml文件编写,WebApi 和 MVC 项目编写,Dockfile编写等

Docker Compose

简介

Docker Compose是Docker三剑客之一,用于定义和运行多个Docker容器应用,负责实现对 Docker 容器集群的快速编排。

我们可以通过Dockerfile定义一个单独的应用容器。然而在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器等。

Compose 恰好满足了这样的需求。它允许用户通过一个单独的 docker-compose.yml 配置板文件(YAML 格式)来定义一组相关联的应用容器。然后使用使用单个命令,就可以根据配置中创建并启动所有服务。

安装

  1. curl 下载 Docker Compose

sudo curl -L https://github.com/docker/compose/releases/download/{{site.compose_version}}/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

替换{{site.compose_version}}为最新的版本号

  1. 赋执行权限

sudo chmod +x /usr/local/bin/docker-compose
  1. 测试是否安装成功

docker-compose --version

WebApi 项目

创建项目

  1. 参考微软示例Create a Web API 创建一个基于 net core 2.1的WebApi项目,命名为Todo.Api. 参照示例添加 model 和 database context。

  2. 在 ConfigureServices 里注册 database context.

services.AddDbContext<TodoContext>(options =>options.UseSqlServer(Configuration["ConnectionString"]));
  1. 参考微软示例Work with SQL Server LocalDB 添加 Seed 类并在Program.cs里面添加 seed initializer等。

只需要运行Add-Migration命令生成迁移。无需执行Update-Database命令,因为程序运行起来时候会通过context.Database.Migrate()来执行迁移。

编写Dockfile

FROM microsoft/dotnet:2.1-aspnetcore-runtimeWORKDIR /appEXPOSE 80/tcpENTRYPOINT ["dotnet", "Todo.Api.dll"]

Web MVC 项目

创建项目

  1. 创建一个基于 net core 2.1的Web MVC项目,命名为webMVC.

  2. 添加 Service 去调用 WebApi 开放的接口。

编写Dockfile

FROM microsoft/dotnet:2.1-aspnetcore-runtimeWORKDIR /appEXPOSE 80/tcpENTRYPOINT ["dotnet", "WebMVC.dll"]

编写 docker-compose.yml文件

image: 指定镜像或构建生成镜像的名字
build:构建生成镜像。context 指令指定 Dockerfile 所在文件夹的路径,dockerfile 指令指定 Dockerfile 文件名
environment:设置环境变量
ports:暴露端口信息。使用宿主端口:容器端口 (HOST:CONTAINER) 格式
volumes:数据卷所挂载路径设置。可以设置宿主机路径 (HOST:CONTAINER)
container_name:指定容器名称。默认将会使用 项目名称_服务名称_序号 这样的格式
depends_on:解决容器的依赖、启动先后的问题

详细请参考 Compose file version 3 reference

运行项目

  1. 在docker-compose.yml文件通目录下执行docker-compose build构建项目中的服务容器.

docker-compose build
  1. 通过 docker-compose up 创建,关联并启动服务.

docker-compose up

-d 在后台运行服务容器。
--scale SERVICE=NUM 创建服务的N个实例。

详细请参考 Compose (docker-compose) CLI reference

源代码

  • github

参考

  • compose gitHub

  • Quickstart: Compose and ASP.NET Core with SQL Server

  • Get Started Building Microservices with ASP.NET Core and Docker in Visual Studio Code

  • Docker Compose 项目

通过 Docker Compose 组合 ASP NET Core 和 SQL Server相关推荐

  1. 在Docker中运行asp.net core 跨平台应用程序

    概述 Docker已经热了有一两年了,而且我相信这不是一个昙花一现的技术,而是一个将深远影响我们日后开发和部署.运营应用系统的一种创新(很多人将其作为devops的一种非常重要的基石).学习docke ...

  2. Docker Consul Fabio ASP.NET Core 2.0 微服务跨平台实践

    相关博文: Ubuntu 简单安装 Docker Mac OS.Ubuntu 安装及使用 Consul Consul 服务注册与服务发现 Fabio 安装和简单使用 阅读目录: Docker 运行 C ...

  3. 【原创】【推荐】《ASP.NET 3.5+SQL Server网站模块化开发全程实录》出版记

    进过半年多的努力,<ASP.NET 3.5+SQL Server网站模块化开发全程实录>一书终于得以由清华大学出版社顺利出版. 第一次出版此类图书,不免其中会有诸多纰漏,还望广大读者不吝指 ...

  4. 基于Windows 2008 R2 Core的SQL Server 2008 R2 Cluster部署(Step by Step)

    1. 简介 基于Core系统安装SQL Server有几个好处 Core没有图形化界面,尤其是没有Explorer进程使得系统更稳定,同时也减少了被黑风险 Core只有关键性的进程,避免开启过多程序导 ...

  5. 使用Docker支持创建ASP.NET Core应用程序

    目录 背景 Docker包含什么? 我们为什么需要它? 使用Docker支持创建ASP.NET核心应用程序 什么是Dockerfile? 从Dockerfile生成Docker镜像 容纳现有的多层应用 ...

  6. 基于VS2017的Docker Support体检ASP.NET Core站点的Docker部署

    最近在学习如何用 Docker 部署生产环境中的 ASP.NET Core 站点,作为一个 Docer 新手,从何处下手更容易入门呢?一开始就手写 Docker 配置文件(Docfile, docke ...

  7. 在docker中运行ASP.NET Core Web API应用程序

    本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...

  8. 使用Linux docker容器中的集成安全性对SQL Server的.Net Core客户端进行身份验证

    目录 面对问题 逐步发现解决方案 先决条件 我们的演示应用 在容器中准备kerberos身份验证 KDC消费所需的包 创建一个合适的krb5.conf文件 生成keytab文件 Docker化演示应用 ...

  9. 基于事件驱动架构构建微服务第5部分:容器化(Web Api Core 和 SQL Server Linux)

    原文链接:https://logcorner.com/building-microservices-through-event-driven-architecture-part5-dockerizat ...

最新文章

  1. 宝宝都能看懂的机器学习世界
  2. 如何设计一个深度学习项目
  3. 我所理解的MVCMVPMVVM
  4. ​NVIDIA针对数据不充分数据集进行生成改进,大幅提高CIFAR-10数据生成
  5. SOFA 源码分析 — 扩展机制
  6. python 搜索功能,使用Python使用网站的搜索功能
  7. 【汇编语言】【ARM扩展资料】数据表示
  8. 非计算机专业计算机教学考试,论非计算机专业的计算机教学与等级考试
  9. 关于引用mshtml的问题
  10. HCIA-Cloud Computing华为云计算IA认证笔记
  11. 在visio中不借助公式编辑器在字母上方打波浪线
  12. 最长公共子序列(LCS)的C++实现
  13. 查准率/查全率/F1指标
  14. java 结束程序_如何优雅地停止Java进程
  15. 掘安杯原题复现---Web签到题
  16. 丅rust是什么意思_Rust入坑指南:亡羊补牢
  17. (译)java NIO 示例代码
  18. 【面试 分布式锁详细解析】续命 自旋锁 看门狗 重入锁,加锁 续命 解锁 核心源码,lua脚本解析,具体代码和lua脚本如何实现
  19. Spring Bean 是什么?
  20. 数据增广真有那么神奇吗?

热门文章

  1. 编辑器领域正发生变革?从面试看 Visual Studio Code 的崛起
  2. 攻城不易守城更难,汇付天下该如何守住打下来的“江山”?
  3. vue-cli 3.0配置webpack目录别名alias
  4. [转载]JDBC/Spring/MyBatis性能比较
  5. CCNP课堂练习四:frame-relay traffic-shaping(帧中继流量×××)
  6. 芒果TV会员,月卡最低9.9元,年卡最低128元!
  7. 如何实现二次抛异常时保存第一次异常的详细信息?
  8. ML.NET Cookbook:(17)如何在分类数据上训练模型?
  9. .NET 搭建简单的通知服务
  10. .NET Core with 微服务 - 什么是微服务