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进行集群部署。
领取专属 10元无门槛券
私享最新 技术干货