docker 群中的软重启守护进程容器
Soft restart daemon containers in docker swarm
我们使用多个 PHP 工人。每个 PHP 工人都组织在一个容器中。为了扩展并行工作进程的数量,我们在 docker 群中处理它。
因此 PHP 运行 正在循环中等待新作业(从 Gearman 获取作业)。
如果接收到新作业,则会对其进行处理。在那之后,脚本正在等待下一个没有 quitting/leaving PHP 脚本的作业。
现在我们要更新我们的工人。在这种情况下,图像是相同的,但 PHP 脚本已更改。
所以我们必须离开 PHP 脚本,更新 PHP 脚本文件,然后重新启动 PHP 脚本。
如果我使用这个 docker 服务更新命令。 Docker 将立即停止容器。最坏的情况下,一个运行ning worker会在这个工作期间被取消。
docker service update --force PHP-worker
是否有可能重启 docker 容器软件?
软的意思是,给容器一个信号:“我必须重启,请取消所有 运行ning 进程。”容器有机会退出他的工作。
在我的例子中,在我 运行 循环中的下一个进程之前。我会检查这个取消标志。如果此取消标志设置,我将结束循环并结束 运行ning PHP 脚本。
环境:
- Debian: 10
- Docker: 19.03.12
- PHP: 7.4
同时,我们已经用SIGNALS解决了。
在 PHP 中,使用信号非常容易。在我们的例子中,这种结构帮助了我们。
//Terminate flag
$terminate = false;
//Register signals
pcntl_async_signals(true);
pcntl_signal(SIGTERM, function() use (&$terminate) {
echo"Get SIGTERM. End worker LOOP\n";
$terminate = true;
});
pcntl_signal(SIGHUP, function() use (&$terminate) {
echo"Get SIGHUP. End worker LOOP\n";
$terminate = true;
});
//loop
while($terminate === false){
//do next job
}
在开始下一个作业之前,检查是否设置了终止标志。
Docker 对优雅地停止容器有很好的支持。
为了定义等待时间,我们使用了标签“stop_grace_period”。
我们使用多个 PHP 工人。每个 PHP 工人都组织在一个容器中。为了扩展并行工作进程的数量,我们在 docker 群中处理它。
因此 PHP 运行 正在循环中等待新作业(从 Gearman 获取作业)。 如果接收到新作业,则会对其进行处理。在那之后,脚本正在等待下一个没有 quitting/leaving PHP 脚本的作业。
现在我们要更新我们的工人。在这种情况下,图像是相同的,但 PHP 脚本已更改。 所以我们必须离开 PHP 脚本,更新 PHP 脚本文件,然后重新启动 PHP 脚本。
如果我使用这个 docker 服务更新命令。 Docker 将立即停止容器。最坏的情况下,一个运行ning worker会在这个工作期间被取消。
docker service update --force PHP-worker
是否有可能重启 docker 容器软件? 软的意思是,给容器一个信号:“我必须重启,请取消所有 运行ning 进程。”容器有机会退出他的工作。
在我的例子中,在我 运行 循环中的下一个进程之前。我会检查这个取消标志。如果此取消标志设置,我将结束循环并结束 运行ning PHP 脚本。
环境:
- Debian: 10
- Docker: 19.03.12
- PHP: 7.4
同时,我们已经用SIGNALS解决了。
在 PHP 中,使用信号非常容易。在我们的例子中,这种结构帮助了我们。
//Terminate flag
$terminate = false;
//Register signals
pcntl_async_signals(true);
pcntl_signal(SIGTERM, function() use (&$terminate) {
echo"Get SIGTERM. End worker LOOP\n";
$terminate = true;
});
pcntl_signal(SIGHUP, function() use (&$terminate) {
echo"Get SIGHUP. End worker LOOP\n";
$terminate = true;
});
//loop
while($terminate === false){
//do next job
}
在开始下一个作业之前,检查是否设置了终止标志。
Docker 对优雅地停止容器有很好的支持。 为了定义等待时间,我们使用了标签“stop_grace_period”。