通过 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 格式)来定义一组相关联的应用容器。然后使用使用单个命令,就可以根据配置中创建并启动所有服务。
安装
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}}为最新的版本号
赋执行权限
sudo chmod +x /usr/local/bin/docker-compose
测试是否安装成功
docker-compose --version
WebApi 项目
创建项目
参考微软示例Create a Web API 创建一个基于 net core 2.1的WebApi项目,命名为Todo.Api. 参照示例添加 model 和 database context。
在 ConfigureServices 里注册 database context.
services.AddDbContext<TodoContext>(options =>options.UseSqlServer(Configuration["ConnectionString"]));
参考微软示例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 项目
创建项目
创建一个基于 net core 2.1的Web MVC项目,命名为webMVC.
添加 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
运行项目
在docker-compose.yml文件通目录下执行
docker-compose build
构建项目中的服务容器.
docker-compose build
通过
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相关推荐
- 在Docker中运行asp.net core 跨平台应用程序
概述 Docker已经热了有一两年了,而且我相信这不是一个昙花一现的技术,而是一个将深远影响我们日后开发和部署.运营应用系统的一种创新(很多人将其作为devops的一种非常重要的基石).学习docke ...
- Docker Consul Fabio ASP.NET Core 2.0 微服务跨平台实践
相关博文: Ubuntu 简单安装 Docker Mac OS.Ubuntu 安装及使用 Consul Consul 服务注册与服务发现 Fabio 安装和简单使用 阅读目录: Docker 运行 C ...
- 【原创】【推荐】《ASP.NET 3.5+SQL Server网站模块化开发全程实录》出版记
进过半年多的努力,<ASP.NET 3.5+SQL Server网站模块化开发全程实录>一书终于得以由清华大学出版社顺利出版. 第一次出版此类图书,不免其中会有诸多纰漏,还望广大读者不吝指 ...
- 基于Windows 2008 R2 Core的SQL Server 2008 R2 Cluster部署(Step by Step)
1. 简介 基于Core系统安装SQL Server有几个好处 Core没有图形化界面,尤其是没有Explorer进程使得系统更稳定,同时也减少了被黑风险 Core只有关键性的进程,避免开启过多程序导 ...
- 使用Docker支持创建ASP.NET Core应用程序
目录 背景 Docker包含什么? 我们为什么需要它? 使用Docker支持创建ASP.NET核心应用程序 什么是Dockerfile? 从Dockerfile生成Docker镜像 容纳现有的多层应用 ...
- 基于VS2017的Docker Support体检ASP.NET Core站点的Docker部署
最近在学习如何用 Docker 部署生产环境中的 ASP.NET Core 站点,作为一个 Docer 新手,从何处下手更容易入门呢?一开始就手写 Docker 配置文件(Docfile, docke ...
- 在docker中运行ASP.NET Core Web API应用程序
本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...
- 使用Linux docker容器中的集成安全性对SQL Server的.Net Core客户端进行身份验证
目录 面对问题 逐步发现解决方案 先决条件 我们的演示应用 在容器中准备kerberos身份验证 KDC消费所需的包 创建一个合适的krb5.conf文件 生成keytab文件 Docker化演示应用 ...
- 基于事件驱动架构构建微服务第5部分:容器化(Web Api Core 和 SQL Server Linux)
原文链接:https://logcorner.com/building-microservices-through-event-driven-architecture-part5-dockerizat ...
最新文章
- 宝宝都能看懂的机器学习世界
- 如何设计一个深度学习项目
- 我所理解的MVCMVPMVVM
- ​NVIDIA针对数据不充分数据集进行生成改进,大幅提高CIFAR-10数据生成
- SOFA 源码分析 — 扩展机制
- python 搜索功能,使用Python使用网站的搜索功能
- 【汇编语言】【ARM扩展资料】数据表示
- 非计算机专业计算机教学考试,论非计算机专业的计算机教学与等级考试
- 关于引用mshtml的问题
- HCIA-Cloud Computing华为云计算IA认证笔记
- 在visio中不借助公式编辑器在字母上方打波浪线
- 最长公共子序列(LCS)的C++实现
- 查准率/查全率/F1指标
- java 结束程序_如何优雅地停止Java进程
- 掘安杯原题复现---Web签到题
- 丅rust是什么意思_Rust入坑指南:亡羊补牢
- (译)java NIO 示例代码
- 【面试 分布式锁详细解析】续命 自旋锁 看门狗 重入锁,加锁 续命 解锁 核心源码,lua脚本解析,具体代码和lua脚本如何实现
- Spring Bean 是什么?
- 数据增广真有那么神奇吗?
热门文章
- 编辑器领域正发生变革?从面试看 Visual Studio Code 的崛起
- 攻城不易守城更难,汇付天下该如何守住打下来的“江山”?
- vue-cli 3.0配置webpack目录别名alias
- [转载]JDBC/Spring/MyBatis性能比较
- CCNP课堂练习四:frame-relay traffic-shaping(帧中继流量×××)
- 芒果TV会员,月卡最低9.9元,年卡最低128元!
- 如何实现二次抛异常时保存第一次异常的详细信息?
- ML.NET Cookbook:(17)如何在分类数据上训练模型?
- .NET 搭建简单的通知服务
- .NET Core with 微服务 - 什么是微服务