docker容器的启动停止对.net core生命周期的支持
这篇文章主要来介绍docker容器的启动停止对.net core生命周期的支持。用docker部署.net core时,如何在启动,停止时执行注入的代码呢?无意中看asp.net core文档,看见生命周期IApplicationLifetime接口提供了我想要的事件,方法。开始动手来写,非常的简单。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplicationLifetime appLifetime)
启动
asyons:
2018-02-05 22:52:58,223 [6] INFO - 服务启动成功......
注册方法
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplicationLifetime appLifetime)
{
appLifetime.ApplicationStarted.Register(OnStarted);
appLifetime.ApplicationStopping.Register(OnStopping);
appLifetime.ApplicationStopped.Register(OnStopped);
Console.CancelKeyPress += (sender, eventArgs) =>
{
appLifetime.StopApplication();
// Don't terminate the process immediately, wait for the Main thread to exit gracefully.
eventArgs.Cancel = true;
};
}
下面的属性Logger.Instance.Proxy可以忽略,这个对log4net的一个简单的包装
启动
private void OnStarted()
{
Logger.Instance.Proxy.Info("服务启动成功......");
}
正在停止
private void OnStopping()
{
Logger.Instance.Proxy.Info("服务正在停止......");
}
停止
private void OnStopped()
{
Logger.Instance.Proxy.Info("服务停止。");
}
我们只要在目前现有的Startup文件中添加上面的代码即可,然后使用docker-compose部署到linux上看看效果,添加下面代码
asyons:
image: asyons:latest
build: ./asyons
restart: always
container_name: asyons
volumes:
- /docker/asyons/wwwroot:/publish/wwwroot
- /docker/asyons/conf/appsettings.json:/publish/appsettings.json
- /docker/asyons/logs:/publish/logs
links:
- mysql:mysql
command: dotnet asyons.com.dll
然后分别测试启动,停止服务docker-compose up -d/docker-compose stop,cat /docker/asyons/logs/info2018-02-05.txt
2018-02-05 22:52:58,223 [6] INFO - 服务启动成功......
2018-02-05 22:55:00,396 [2] INFO - 服务正在停止......
2018-02-05 22:55:00,415 [7] INFO - 服务停止。
docker的启动,停止有触发事件,与期望一致,这样可以优雅的启动,关闭服务。
Posted by 何敏 on 2018/2/2 22:31:06