首页

docker容器的启动停止对.net core生命周期的支持

这篇文章主要来介绍docker容器的启动停止对.net core生命周期的支持。用docker部署.net core时,如何在启动,停止时执行注入的代码呢?无意中看asp.net core文档,看见生命周期IApplicationLifetime接口提供了我想要的事件,方法。开始动手来写,非常的简单。

注册方法
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的启动,停止有触发事件,与期望一致,这样可以优雅的启动,关闭服务。
from 爱施园
Posted by 森林 on 2018/02/02
Copyright ©2018 爱施园 粤ICP备14091834号