通过 Docker Compose 组合 ASP NET Core 和 SQL Server

本文模拟一个比较完整的项目,包括前端(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等。

640?wx_fmt=png

只需要运行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 开放的接口。

640?wx_fmt=png

640?wx_fmt=png

编写Dockfile

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

编写 docker-compose.yml文件

640?wx_fmt=png

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 项目


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320670.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【模拟】交换(jzoj 1518)

交换 jzoj 1518 题目大意&#xff1a; 有两个字符串&#xff08;只包含‘R’‘G’‘B’三个字符&#xff0c;且相邻的字符互不相同&#xff09;&#xff0c;现在要交换两个字符串中的一个数&#xff0c;使两个字符串内都各有3个连续且相同的字符&#xff0c;问有多少种换法 …

winserver的consul部署实践与.net core客户端使用(附demo源码)

前言随着微服务兴起&#xff0c;服务的管理显得极其重要。都知道微服务就是”拆“&#xff0c;把臃肿的单块应用&#xff0c;拆分成多个轻量级的服务&#xff0c;每个服务可以在短周期内重构、迭代、交付。随着微服务的数量增多&#xff0c;因量变引起了质量&#xff0c;带来新…

【模拟】【递归】解压字符串(jzoj 1519)

解压字符串 jzoj 1519 题目大意&#xff1a; 有一串压缩过的字符串&#xff0c;将有重复的压缩成了s(~~)的形式&#xff08;s是一位数&#xff0c;例子&#xff1a;123123123压缩成‘3&#xff08;123&#xff09;’&#xff09;&#xff0c;现在要你解压出来&#xff0c;然…

微软发布Azure Service Fabric Mesh公开预览版

Service Fabric现在在云端有了一个新亲戚——Azure Service Fabric Mesh&#xff0c;Azure的一个完全托管服务&#xff0c;开发人员现在可以基于此服务部署和运行容器化应用程序。在去年五月的Build 2018大会期间首次亮相后&#xff0c;现在开始进行公开预览。在Build 2018大会…

【DP】楼梯(jzoj 1520)

楼梯 jzoj 1520 题目大意&#xff1a; 有n个楼梯&#xff0c;跳跃高度初始值是1&#xff0c;当往后一层时&#xff0c;跳跃高度就2&#xff0c;当跳跃只能跳跃到当前能跳到楼梯&#xff0c;且跳跃之后&#xff0c;跳跃高度变回1&#xff0c;问跳到第n层最少花几步 样例输入…

.NET Core TDD前传: 编写易于测试的代码 -- 缝

有时候不是我们不想做单元测试, 而是这代码写的实在是没法测试....举个例子, 如果一辆汽车在产出后没完成测试, 那么没人敢去驾驶它. 代码也是一样的, 如果项目未能进行该做的测试, 那么客户就不敢去使用它, 即使使用了也会遇到“车祸”. 为什么要测试/测试的好处它可以尽早发现…

【数位DP】好数(jzoj 1521)

好数 jzoj 1521 题目大意&#xff1a; 定义好数为转换为二进制后&#xff0c;有至少三个连续的位相同的数&#xff0c;现在要求一个范围内的好数个数 样例输入 0 16样例输出 5数据范围限制 0 < Low < UP < 2147483647 提示 提示&#xff1a; 对于50%测试&…

【招聘(北京)】东方国信 工业互联网

从工业领域的业务出发&#xff0c;结合现有的物联网、大数据、云计算等技术进行体系化建设。自主研发的智能检测传感器、自主开发的部署在生产单位的专家系统、自主设计通讯交互协议、自主开发的工业物联网通讯框架、自主开发的分布式存储中间件、自主研发的机理模型&#xff0…

Ocelot-基于.NET Core的开源网关实现

写在前面API网关是系统内部服务暴露在外部的一个访问入口&#xff0c;类似于代理服务器&#xff0c;就像一个公司的门卫承担着寻址、限制进入、安全检查、位置引导等工作&#xff0c;我们可以形象的用下图来表示&#xff1a; 外部设备需要访问内部系统服务时必须要通过我们的AP…

Blazor 0.5.0 升级及新特性介绍

前言喜大普奔&#xff0c; Blazor 0.5.0 在我刷了好几遍 Github &#xff08;表示功不可没&#xff09;以后&#xff0c;终于在 2018年7月25日发布了&#xff01;[Blazor 0.5.0 Announce] (https://blogs.msdn.microsoft.com/webdev/2018/07/25/blazor-0-5-0-experimental-rele…

NuStore使用说明

简介.net core 部署有两种方式&#xff0c;一种是独立式部署&#xff08;SCD&#xff09;&#xff0c;另一种是框架依赖式部署&#xff08;FDD&#xff09;。以SCD方式生成发布包时&#xff0c;dotnet会将所有依赖打包到一个文件夹内&#xff0c;并为应用程序生成可执行文件。以…

HttpClientFactory与Steeltoe结合来完成服务发现

前言上一篇说了一下用HttpClientFactory实现了简单的熔断降级。这篇就来简单说说用HttpClientFactory来实现服务发现。由于标题已经好明显的说了Steeltoe因此这里会要求有Spring Clound的相关环境&#xff0c;本文也默认各位对这里有些许了解&#xff0c;所以不会涉及搭建过程的…

业务流程、长周期服务和微服务

在近期于伦敦Skills Matter举行的DDD eXchange 2018会议上&#xff0c;Martin Schimak认为在最近几年间&#xff0c;领域事件引发了越来越多的讨论&#xff0c;但是我们对命令也应如此&#xff0c;在这次会议上他讨论了微服务领域的事件、命令以及长周期的服务&#xff0c;以及…

.NET Core TDD 前传: 编写易于测试的代码 -- 构建对象

该系列第1篇: 讲述了如何创造"缝". "缝"(seam)是需要知道的概念.本文是第2篇, 介绍的是如何避免在构建对象时写出不易测试的代码. 本文的概念性内容大部分都来自Misko Hevery的这篇博客文章.构建还是用上文里汽车的例子.通常情况下, 我们是先去建造汽车, …

构建可扩展的有状态服务

原文链接&#xff1a;http://highscalability.com/blog/2015/10/12/making-the-case-for-building-scalable-stateful-services-in-t.html在很长一段时间内&#xff0c;分布式系统都采用无状态服务作为分布式系统扩展的最佳实践。它可以通过简单的循环负载均衡来提供扩展能力。…

树莓派3B+,我要跑.NET CORE

前面的话我也不知道为什么&#xff0c;看到.net core觉得很爽&#xff0c;可以真正的跨平台&#xff0c;个人觉得很喜欢&#xff0c;所以就准备拿树莓派来验证我的想法。在我写这篇文章的时候&#xff0c;刚好在树莓派上装好了core2.1&#xff0c;先上结果。一、基础准备从板子…

【DP】【高精】WZK打雪仗(jzoj 1997)

WZK打雪仗 jzoj 1997 题目大意&#xff1a; 在一个环上有n*2个点&#xff0c;问有多少种连法可以用n条线连接成n对点 输入样例 5输出样例 42解释&#xff1a; 一种可行的方案如下&#xff1a; 数据范围 对于30%数据&#xff1a; n<30。 对于100%数据&#xff1a; …

月旦评 之 DevOps招贤令2018

公元164-182年间&#xff0c;汝南平舆的许氏兄弟于每月初一品评人物&#xff0c;褒贬时政&#xff0c;被称为“月旦评”。所谓“子治世之能臣&#xff0c;乱世之奸雄也”这句许邵评价曹操的话也是来自于“月旦评”&#xff1b;时间一下子来到了2018年&#xff0c;LEANSOFT DevO…

函数式编程之-模式匹配(Pattern matching)

编者&#xff1a;C# 7.0也加入了模式匹配&#xff0c;来源于F#。模式匹配在F#是非常普遍的&#xff0c;用来对某个值进行分支匹配或流程控制。模式匹配的基本用法模式匹配通过match...with表达式来完成&#xff0c;一个完整的模式表达式长下面的样子&#xff1a;match [somethi…

Asp.Net Core SignalR 与微信小程序交互笔记

什么是Asp.Net Core SignalRAsp.Net Core SignalR 是微软开发的一套基于Asp.Net Core的与Web进行实时交互的类库&#xff0c;它使我们的应用能够实时的把数据推送给Web客户端。功能自动管理连接允许同时广播到所有客户端也可以广播到指定的组或者特定的客户端在Github上开源&am…