百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Docker停止容器使用stop、restart 还是 kill?

nanshan 2024-12-02 23:23 9 浏览 0 评论

  1. docker kill立即强制停止容器
  2. docker stop优雅地停止容器
  3. docker restart先优雅停止容器,再启动一个新的容器实例
  4. docker killdocker stop区别

Docker停止容器,是使用stop、kill还是restart?用户通过 docker stopdocker kill 命令主动停止容器。前者发送 SIGTERM 信号让容器优雅退出,后者发送 SIGKILL 信号强制立即退出。docker restart,命令包含了停止现有容器(类似于 docker stop)和重新启动新容器(类似于 docker start)这两个动作。今天来了解一下这三个命令。

使用以下命令可以创建一个后台运行的 Redis 容器,并将其公开到主机的 6379 端口,同时为容器赋予名称 redis

docker run -d -p 6379:6379 --name redis redis

在宿主机安装redis-cli命令行客户端工具。

1. docker kill立即强制停止容器

docker kill 命令用于立即强制停止一个或多个正在运行的 Docker 容器。当您执行 docker kill 时,Docker 会向容器发送一个 SIGKILL 信号,这是一种不可被捕获、阻塞或忽略的信号,导致容器内的主进程立即停止运行,不会给容器进程提供任何清理或保存状态的机会。因此,docker kill 是一种非常直接且不优雅的停止方式,适用于需要立即终止容器且不关心容器内部状态的情况。SIGKILL是什么,如果你使用过Linux命令kill -9 [pid],SIGKILL编号即为9。

使用示例:

首先,使用命令docker wait redis监听redis退出状态码。打开另一个终端运行如下命令:

?  ~  docker kill redis
redis


?  ~ docker wait redis
137

运行docker wait redis命令窗口,输出状态码137。状态码137通常表示进程接收到 SIGKILL 信号而被强制终止。这意味着名为 Redis 的容器是因为接收到 SIGKILL 信号而被强制终止的。


docker kill同时可以强制停止多个容器:

docker kill container1 container2 container3 ...

2. docker stop优雅地停止容器

docker stop 命令用于优雅地停止一个或多个正在运行的 Docker 容器。当您执行 docker stop 时,Docker 会向容器发送一个 SIGTERM 信号,这是进程的标准终止信号。容器内的主进程接收到 SIGTERM 后,通常会触发清理操作,如保存当前状态、关闭网络连接、释放资源等,并在完成这些操作后自行退出。默认情况下,Docker 会给容器预留10秒的时间来优雅地关闭。如果容器在这段时间内没有自行退出,Docker 会发送一个 SIGKILL 信号强制终止容器。希望容器在停止前有机会进行必要的清理和状态保存工作,尤其是当容器内运行的服务支持优雅关闭时。应使用docker stop

使用示例:

?  ~ docker stop redis
137

docker stop同时可以停止多个容器:

docker stop container1 container2 container3 ...

3. docker restart先优雅停止容器,再启动一个新的容器实例

docker restart 命令用于重启一个或多个已停止的 Docker 容器。执行此命令时,Docker 首先会发送 SIGTERM 信号,等待容器优雅地停止。一旦容器停止,Docker 立即启动一个新的容器实例,使用相同的配置和镜像。这意味着容器内的状态在重启过程中不会保留。需要重启容器以恢复服务或应用新的配置。

使用示例:

?  ~ docker restart redis
redis

docker restart同时可以重启多个容器:

docker restart container1 container2 container3

4. docker stop与docker kill区别

docker stop 会向容器发送一个SIGTERM,等待容器保存状态,优雅退出。

docker kill 会向容器发送一个SIGKILL。同Linux的kill -9


Redis使用docker stop的例子:

?  ~ docker start redis
redis
?  ~ redis-cli
127.0.0.1:6379> set hello abc
OK
127.0.0.1:6379> exit
?  ~ docker stop redis
redis
?  ~ docker start redis
redis
?  ~ redis-cli
127.0.0.1:6379> get hello
"abc"
127.0.0.1:6379> exit

第一步,首先,启动刚kill掉的redis容器,接着连接redis-cli,输入命令set hello abc,设置一个key为hello,value为abc。使用exit退出redis-cli

第二步,使用命令docker stop redis停止容器,接着使用命令docker start redis启动容器。

第三步,再次连接redis-cli,输入命令get hello,输出abc。最后使用exit断开redis-cli连接。

结果,在 Redis 中,我们有一个key为hello,值为abc。最后使用exit断开redis-cli连接。

Redis容器运行docker kill的例子:

?  ~ docker start redis
redis
?  ~ redis-cli
127.0.0.1:6379> set hello 123
OK
127.0.0.1:6379> get hello
"123"
127.0.0.1:6379> exit
?  ~ docker kill redis
redis
?  ~ docker start  redis
redis
?  ~ redis-cli
127.0.0.1:6379> get hello
"abc"
127.0.0.1:6379> exit

第一步,首先,启动 Redis 容器。连接redis-cli,输入命令get hello,输出key为hello的值为abc。接着输入命令set hello abc更改key为hello值value为123。使用exit退出redis-cli

第二步,使用命令docker kill redis停止容器,接着使用命令docker start redis启动容器。

第三步,再次连接redis-cli,输入命令get hello,输出abc。最后使用exit断开redis-cli连接。

可以看出,我们已经变更过key为hello的值为123,但提高kill结束容器,没有等待Redis把数据持久化到磁盘就推退出了。值还是abc,为刚docker stop示例中的结果。

而使用docker stop停止的容器会优雅退出。 Redis 会把数据持久化到磁盘。

docker restartdocker stop效果一致。

在管理 Redis 这类需要数据持久化的容器时,推荐使用 docker stop 以确保数据的完整性。若需立即终止且不关心数据丢失,可使用 docker killdocker restart 适用于需要重启服务以应用新配置或恢复服务的情况,其效果与先执行 docker stopdocker start 相同。


忍不住要加个关注!不是我吹,但你会后悔没关注的!

相关推荐

0722-6.2.0-如何在RedHat7.2使用rpm安装CDH(无CM)

文档编写目的在前面的文档中,介绍了在有CM和无CM两种情况下使用rpm方式安装CDH5.10.0,本文档将介绍如何在无CM的情况下使用rpm方式安装CDH6.2.0,与之前安装C5进行对比。环境介绍:...

ARM64 平台基于 openEuler + iSula 环境部署 Kubernetes

为什么要在arm64平台上部署Kubernetes,而且还是鲲鹏920的架构。说来话长。。。此处省略5000字。介绍下系统信息;o架构:鲲鹏920(Kunpeng920)oOS:ope...

生产环境starrocks 3.1存算一体集群部署

集群规划FE:节点主要负责元数据管理、客户端连接管理、查询计划和查询调度。>3节点。BE:节点负责数据存储和SQL执行。>3节点。CN:无存储功能能的BE。环境准备CPU检查JDK...

在CentOS上添加swap虚拟内存并设置优先级

现如今很多云服务器都会自己配置好虚拟内存,当然也有很多没有配置虚拟内存的,虚拟内存可以让我们的低配服务器使用更多的内存,可以减少很多硬件成本,比如我们运行很多服务的时候,内存常常会满,当配置了虚拟内存...

国产深度(deepin)操作系统优化指南

1.升级内核随着deepin版本的更新,会自动升级系统内核,但是我们依旧可以通过命令行手动升级内核,以获取更好的性能和更多的硬件支持。具体操作:-添加PPAs使用以下命令添加PPAs:```...

postgresql-15.4 多节点主从(读写分离)

1、下载软件[root@TX-CN-PostgreSQL01-252software]#wgethttps://ftp.postgresql.org/pub/source/v15.4/postg...

Docker 容器 Java 服务内存与 GC 优化实施方案

一、设置Docker容器内存限制(生产环境建议)1.查看宿主机可用内存bashfree-h#示例输出(假设宿主机剩余16GB可用内存)#Mem:64G...

虚拟内存设置、解决linux内存不够问题

虚拟内存设置(解决linux内存不够情况)背景介绍  Memory指机器物理内存,读写速度低于CPU一个量级,但是高于磁盘不止一个量级。所以,程序和数据如果在内存的话,会有非常快的读写速度。但是,内存...

Elasticsearch性能调优(5):服务器配置选择

在选择elasticsearch服务器时,要尽可能地选择与当前业务量相匹配的服务器。如果服务器配置太低,则意味着需要更多的节点来满足需求,一个集群的节点太多时会增加集群管理的成本。如果服务器配置太高,...

Es如何落地

一、配置准备节点类型CPU内存硬盘网络机器数操作系统data节点16C64G2000G本地SSD所有es同一可用区3(ecs)Centos7master节点2C8G200G云SSD所有es同一可用区...

针对Linux内存管理知识学习总结

现在的服务器大部分都是运行在Linux上面的,所以,作为一个程序员有必要简单地了解一下系统是如何运行的。对于内存部分需要知道:地址映射内存管理的方式缺页异常先来看一些基本的知识,在进程看来,内存分为内...

MySQL进阶之性能优化

概述MySQL的性能优化,包括了服务器硬件优化、操作系统的优化、MySQL数据库配置优化、数据库表设计的优化、SQL语句优化等5个方面的优化。在进行优化之前,需要先掌握性能分析的思路和方法,找出问题,...

Linux Cgroups(Control Groups)原理

LinuxCgroups(ControlGroups)是内核提供的资源分配、限制和监控机制,通过层级化进程分组实现资源的精细化控制。以下从核心原理、操作示例和版本演进三方面详细分析:一、核心原理与...

linux 常用性能优化参数及理解

1.优化内核相关参数配置文件/etc/sysctl.conf配置方法直接将参数添加进文件每条一行.sysctl-a可以查看默认配置sysctl-p执行并检测是否有错误例如设置错了参数:[roo...

如何在 Linux 中使用 Sysctl 命令?

sysctl是一个用于配置和查询Linux内核参数的命令行工具。它通过与/proc/sys虚拟文件系统交互,允许用户在运行时动态修改内核参数。这些参数控制着系统的各种行为,包括网络设置、文件...

取消回复欢迎 发表评论: