基于eShopOnContainers学习ASP.NET Core之使用作为容器运行的数据库服务器
前言
可以将数据库放在常规的服务器上、云上等地方, 但对于开发环境和测试环境而言可以将数据库作为容器运行,因为其没有任何的外部依赖,更加方便测试,直接通过种子数据初始化其中的数据更容易察觉测试中的问题
本文主要参考
官方示例使用作为容器运行的数据库服务器
当前docker-compose配置文件
其中
docker-compose.yml和docker-compose.override.yml用于示例程序的配置
docker-compose-build用于还原nuget和编译发布的配置
docker-compose-pod.yml和docker-compose-pod.override.yml用于生产环境的动静配置
所以作为容器运行的数据库服务器,主要配置在docker-compose.yml和docker-compose.override.yml中
mysql 作为包含微服务相关数据库的容器运行
修改原来的docker-compose.yml
version: '3.4'
services:
systeminfo.api:
image: ${DOCKER_REGISTRY-}systeminfoapi
build:
context: .
dockerfile: src/Services/SystemInfo/SystemInfo.Api/Dockerfile
depends_on:
- sqldata
sqldata:
image: mysql:8.0.26
docker-compose.override.yml文件为
version: '3.4'
services:
systeminfo.api:
environment:
- ConnectionString=${SYSTEMINFO_DB}
ports:
- 5001:80
- 5000:443
volumes:
- ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
- ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro
- D:/docker-logs/systeminfo:/app/logs/
sqldata:
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=zhao56
restart: always
.env环境变量配置
SYSTEMINFO_DB=server=sqldata;user=root;password=zhao56;database=zhao56
DOCKER_REGISTRY=zhao56
在 Web 应用程序启动时设定测试数据
官网的是程序启动的时候加载种子数据,但是这种的话个人感觉还是不太好,经查阅资料还是决定启动的时候根据配置来决定是否迁移如下
appsetting.json中添加
{
"AllowedHosts": "*",
//用于mysql指定版本
"DbVersion": "8.0.26",
//是否生成种子数据
"NeedMigrations": true,
"ConnectionStrings": {
"ConnectionString": "server=sqldata;user=root;password=root;database=zhao56"
}
}
注册DbContexts的服务的时候,读取配置是否通过迁移的dbcontext生成database及种子数据
public static void AddDbContexts(this IServiceCollection services)
{
if (Bootstrap.ConfigurationManager.NeedMigrations)
{
var builderDb = new DbContextOptionsBuilder<SystemInfoContext>();
builderDb.UseMySql(Bootstrap.ConfigurationManager.DbConnectionString, new MySqlServerVersion(new Version(Bootstrap.ConfigurationManager.DbVersion)));
using (var context = new MigrationSystemInfoContext(builderDb.Options))
{
context.Database.Migrate();
}
}
services.AddDbContext<SystemInfoContext>(
options => options.UseMySql(Bootstrap.ConfigurationManager.DbConnectionString, new MySqlServerVersion(new Version(Bootstrap.ConfigurationManager.DbVersion))));
}
最后上结果
本文来自博客园,作者:zhao56,转载请注明原文链接:https://www.cnblogs.com/zhao56/p/15108590.html