NET Core+MySql+Nginx 容器化部署

1. 引言

上两节我们通过简单的demo学习了docker的基本操作。这一节我们来一个进阶学习,完成ASP.NET Core + MySql + Nginx的容器化部署。

本文是基于CentOS 7.4环境进行演示,示例项目可以访问Docker.NetCore.MySql进行下载。

2. Hello MySQL

同样我们还是以循序渐进的方式来展开。首先来基于Docker来试玩一下MySQL。

2.1. 创建MySql实例

下面我们直接在容器中连接到我们刚刚创建的mysql数据库:

2.2. 挂载数据卷

上面创建的mysql实例其数据都在容器内部存储,这样就暴露了一个问题,如果容器销毁,那么对应的数据库数据就会丢失。那如何持久化存储容器内数据呢?我们可以通过挂载数据卷的方式来解决这一问题。

上面是使用使用了命令创建了一个数据卷,当然我们也可以自行挂载某个目录作为数据卷。

3. 准备.NET Core+EFCore+MySql项目

为了演示方便,我准备了一个ASP.NET Core+EFCore+MySql的示例项目。其结构如下所示:

是基于.NET Core Mvc模板项目,其中定义了一个实体,并通过暴露WebApi接口。核心代码如下:

Product实体类:

DbContext类:

数据库初始化类:

该数据库初始化类会在项目启动时运行。详细代码可参考Docker.NetCore.MySql

4. 基于示例项目进行实操演练

4.1 安装Git并Clone示例项目

4.2. 构建镜像

细心的你会发现,项目中已经定义了Dockerfile,所以我们可以直接使用构建镜像。

4.3. 启动镜像并连接到指定数据库

docker提供了参数用于在容器之间建立连接。下面我们实例化创建的镜像并命名容器名为,并使用--link参数与我们文章开头建立的容器建立连接。

这里需要特别注意一下,这个参数就是告诉Docker容器需要使用容器,并将其别名命名为db,这样在这个容器中就可以使用db来作为提供mysql数据库服务的服务器。这也就是为什么我们.NET Core项目中连接字符串设置为的原因。

从上图可知,我们完成了.NET Core与MySql的连接。

5. ASP.NET Core + MySql + Nginx

结合上一篇文章.NET Core容器化之多容器应用部署@Docker-Compose,我们来使用docker-compose完成asp.net core + mysql + nginx的多容器部署。

5.1. 定义 docker-compose.yml

其中定义了三个服务:

db:使用mysql镜像,并挂载当前项目下的mysql文件夹来持久化存储。

web:基于当前项目构建的容器服务,依赖于db服务。

reverse-proxy:使用nginx定义反向代理服务,其中挂载了当前项目下的proxy.conf文件作为反向代理配置文件。其中proxy.conf的配置如下(注意proxy_pass指定的url为http://web:5000):

5.2. 启动Compose

在启动Compose之前,建议清空上面创建的容器。也可以使用清除所有容器。

上面的运行结果显示,我们已经成功完成了ASP.NET Core+MySql+Nginx的多容器应用部署。通过浏览器访问即可访问我们暴露的api。

5.3. 数据库验证

我们来验证一下数据库是否成功创建:

从上面的运行结果可知,我们成功将项目文件夹下的mysql文件夹挂载到容器内部进行数据持久化。

6. 最后

本文通过先介绍如何基于Docker实例化MySQL容器,再介绍如何通过挂载数据卷来持久化MySQL数据,以及如何使用--Link参数进行容器之间的连接,完成了.NET Core连接MySQL数据库。

最后,使用Docker-Compose综合ASP.NET Core+MySQL+Nginx完成了容器化部署。

下一节我们来介绍下如何使用Docker-Swarm进行集群部署。

本文来自企鹅号 - dotNET跨平台媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

Windows主机管理系统Websitepanel

Websitepanel是一个开源,免费的用于Windows2003或Windows2008平台的虚拟主机管理系统。支持集群 分布式架构 。 支持系统 Wind...

504100
来自专栏finleyMa

docker学习系列2 保存对容器的修改

注意: 经查,不推荐更改运行中的容器配置,容器本身是无状态的,当然也可以通过进入容器内部的方式进行更改: docker exec -it 这样的更改是无法持久...

2.3K10
来自专栏云计算

在Docker环境中开发Java 8 Spring Boot应用程序

本文我将向你展示如何在本地计算机上不安装Java 8环境的情况下使用Java 8来开发并运行一个简单的Spring Web应用程序。

1.1K70
来自专栏Coding01

使用 docker-compose 搭建 Laravel 环境 (三)

有了第二篇《使用 Docker 搭建简易的 Java Web 环境 (二)》,懂了如何通过单一镜像创建 Docker 环境,这篇主要学习如何使用「docker-...

25430
来自专栏NetCore

给Ocelot做一个Docker 镜像

写在前面 在微服务架构中,ApiGateway起到了承前启后,不仅可以根据客户端进行分类,也可以根据功能业务进行分类,而且对于服务调用服务也起到了很好的接口作用...

299100
来自专栏腾讯云TStack专栏

qemu-kvm中vcpu虚拟化到底是咋整的?

一句话总结 实例化一个vcpu就是在hostOS中创建了一个线程,线程里有个while循环,循环里不停的调用kvm_cpu_exec方法,kvm_cpu_e...

805100
来自专栏后端云

cpu-pining CPU绑定

既然我们的操作系统还有CPU特性都采用了NUMA架构,那么我们完全可以通过调整KVM对应的NUMA关系来达到KVM CPU这方面的优化。这里,我们一般是通过CP...

15940
来自专栏编程坑太多

『中级篇』docker之java容器运行外置springboot-jar(番外篇)(79)

18830
来自专栏散尽浮华

完整部署CentOS7.2+OpenStack+kvm 云平台环境(4)--用OZ工具制作openstack镜像

在部署openstack云平台环境的时候,需要上传镜像到glance。 首先下载iso镜像,这里下载了centos6.5镜像,放到/usr/local/src目...

45490
来自专栏前端侠2.0

IIS8.5 布署 WEB API的程序时,遇到的问题

##IIS7/8 HTTP Error 500.19 错误 0x80070021  IIS7.0/8.0的错误HTTP Error 500.19 - Inte...

40730

扫码关注云+社区

领取腾讯云代金券