当前位置: 首页 > news >正文

小白快速上手 Docker 02 | Docker 容器生命周期

容器生命周期

下图显示了容器生命周期的简化状态。
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • Created
  • Running
  • Paused
  • Stopped
  • Deleted

现在让我们逐一讨论容器生命周期的每个状态:

创建状态(Created)

这是容器生命周期的第一个状态,在这个阶段,容器被创建但尚未启动。

通过运行docker create命令,我们可以在指定的镜像上创建一个薄的可写层,并准备运行主进程(由 CMD 和/或 ENTRYPOINT 定义)。需要注意的是,在创建状态下,容器已经存在,但并没有开始执行。

例如,以下命令使用nginx:alpine镜像创建一个名为app1的容器:

docker create --name app1 nginx:alpine

如果创建成功,终端会打印出新容器的ID。

运行状态(Running)

顾名思义,运行状态表示容器正在主动运行。在这个阶段,主进程已经开始执行。对于已经创建或停止的容器,我们可以使用docker start命令来启动它。

例如,要启动之前创建的app1容器,我们可以运行:

docker start app1

如果你不想先创建再启动容器,可以直接使用docker run命令,这样可以同时完成这两个步骤。以下命令将在后台创建并启动一个名为app2的容器:

docker run -d --name app2 nginx:alpine

暂停状态(Paused)

在某些情况下,我们可能需要暂停正在运行的容器。可以使用docker pause命令来暂停指定容器中所有的进程。

暂停时,容器的状态保持完整,包括磁盘和内存的内容。

需要注意的是,暂停的容器并不知道自己已经被暂停。

要暂停app1,可以运行:

docker pause app1

要恢复暂停的容器,我们可以使用docker unpause命令:

docker unpause app1

停止状态(Stopped)

停止状态表示容器不再主动运行其主进程。在该状态下,容器的磁盘部分会保留下来,但内存部分会被清除。这是暂停状态和停止状态之间的主要区别。

容器可以通过四种主要方式停止:

  • 使用docker stop命令。
  • 使用docker kill命令。
  • 当主容器进程退出或完成时。
  • 遇到“内存不足异常”(OOME)时。

让我们分别讨论一下 这几种方式。

1. 使用docker stop命令

此命令非常简单:

docker stop app1

当执行此命令时,主容器进程会接收到一个 SIGTERM 信号,允许其安全地关闭。如果在默认的宽限期(通常为 10 秒)内进程没有结束,系统会强制发送一个 SIGKILL 信号,立即终止进程。

2. 使用docker kill命令

与docker stop不同,docker kill直接将SIGKILL信号发送到主容器进程:

docker kill app2

这意味着docker stop允许容器安全终止(在宽限期内),而则docker kill立即终止进程。docker kill还可以使用–signal或-s发送任何信号,而不仅仅是 SIGKILL。例如,发送 SIGINT 信号:

docker kill -s SIGINT app1
3. 当主进程退出/完成时

如果容器的主进程已退出或完成,则容器可以自动停止。

这可能是因为主进程遇到异常、中断,或者在某个时刻执行的任务完成(而不是像服务器那样无限循环)。例如:

docker run alpine echo "hi"

在此命令中,echo "hi"在 alpine 容器内执行,打印“hi”后立即退出,导致容器自动停止。

4. 当遇到“内存不足异常”(OOME)时

如果容器尝试使用超过系统可用内存的数量,可能会遇到内存不足异常(OOME)。在这种情况下,某些容器甚至 Docker 守护进程可能会被加载终止。为了避免这种情况,确保应用在拥有足够内存的主机上运行是非常重要的。可以通过以下命令限制容器的最大内存使用:

docker run -m 50m redis:alpine

通过这个命令,Redis容器的内存使用不会超过50MB,超出部分可能会导致OOME。

已删除状态(Deleted)

对于状态或停止状态的容器可以使用docker rm命令删除。这将导致与容器相关的所有数据被删除,包括进程、文件系统、卷和网络映射创建。例如,要删除已经停止的app1容器,可以运行:

docker rm app1

如果容器正在运行或暂停时尝试删除,会收到错误提示说明,容器需要先停止。如果您确定要强制删除正在运行的容器,可以使用:

docker rm -f app1

容器生命周期高级部分

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

相关文章:

小白快速上手 Docker 02 | Docker 容器生命周期

容器生命周期 下图显示了容器生命周期的简化状态。 CreatedRunningPausedStoppedDeleted 现在让我们逐一讨论容器生命周期的每个状态: 创建状态(Created) 这是容器生命周期的第一个状态,在这个阶段,容器被创建但…...

深刻理解Redis集群(下):Redis 哨兵(Sentinel)模式

背景 现在对3个节点的sentinel进行配置。sentinel的配置文件在redis的安装目录中已经存在,只需要复制到指定的位置即可。 sentinel是独立进程,有对应的脚本来执行。 基于之前的redis 一主二从的架构,我们继续启动3个sentinel进程。 哨兵模式的…...

STM32重启源深度解析

文章目录 STM32重启源深度解析一、STM32重启概述二、硬件层面的重启源1、电源异常电压不稳定:电源供电不足: 2、复位电路故障复位引脚异常:复位电路设计不合理: 3、外部干扰电磁干扰:静电干扰: 三、软件层面…...

windows配置C++编译环境和VScode C++配置(保姆级教程)

1.安装MinGW-w64 MinGW-w64是一个开源的编译器套件,适用于Windows平台,支持32位和64位应用程序的开发。它包含了GCC编译器、GDB调试器以及其他必要的工具,是C开发者在Windows环境下进行开发的重要工具。 我找到了一个下载比较快的链接&#…...

【微信小程序前端开发】入门Day03 —— 页面导航、事件、生命周期、WXS 脚本及自定义组件

1. 页面导航 导航方式 声明式导航&#xff1a;使用<navigator>组件实现页面跳转。 <!-- 导航到tabBar页面 --> <navigator url"/pages/message/message" open-type"switchTab">导航到消息页面</navigator><!-- 导航到非tabBar页…...

【51单片机】点亮LED之经典流水灯

开发环境 开发板&#xff1a;普中51-单核-A2单片机&#xff1a;STC89C52RC&#xff08;双列直插40引脚 DIP40&#xff09;Keil uVision5 v9.61 最新版破解方法自行百度&#xff0c;相关文档和视频资料很多&#xff0c;我自己将这一操作记录下来当做博客发布&#xff0c;CSDN以…...

深度学习数据增强的常用方法

以下是在深度学习中经常使用的图像增强的方法 目录 前言 1、加噪声 2、调整亮度 3、cutout 4、旋转 5、对比度增强 6、仿射变化扩充图像 7、HSV数据增强 8、错切变化扩充图像 9、平移扩充图像&#xff0c;根图像移动的像素距离可自行调整&#xff0c;具体方法如下注释所示 10、…...

影院管理新篇章:小徐的Spring Boot应用

第三章 系统分析 整个系统的功能模块主要是对各个项目元素组合、分解和更换做出对应的单元&#xff0c;最后在根据各个系统模块来做出一个简单的原则&#xff0c;系统的整体设计是根据用户的需求来进行设计的。为了更好的服务于用户要从小徐影城管理系统的设计与实现方面上做出…...

【H2O2|全栈】关于CSS(9)CSS3扩充了哪些新鲜的东西?(二)

目录 CSS3入门 前言 准备工作 伪元素补充 :before :after 文本溢出属性 转换效果 预告和回顾 后话 CSS3入门 前言 本系列博客主要介绍CSS相关的知识点。 这一期主要介绍以下几个CSS3的知识点&#xff1a; 伪元素补充文本溢出属性转换 没有基础的朋友&#xff…...

java中Files和File对象详情和区别比较

Files 和 File 是 Java 中用于文件处理的两个不同类&#xff0c;分别属于 java.nio.file 和 java.io 包&#xff0c;它们的设计思路和用途有所不同。以下是它们的详细区别&#xff1a; 1. File 对象 File 是 Java 中最早用于处理文件和目录的类&#xff0c;它来自 java.io 包&…...

Unity3D PostLateUpdate为何突然占用大量时间详解

在Unity3D中&#xff0c;直接名为PostLateUpdate的函数并不是Unity标准API中的一部分。然而&#xff0c;这个术语可能指的是在LateUpdate之后执行的某些自定义逻辑或Unity内部机制中的某种后续处理。当提到PostLateUpdate或LateUpdate突然占用大量时间时&#xff0c;我们需要考…...

如何快速熟悉项目

背景 最近新入职&#xff0c;对项目很不熟悉&#xff0c;也不能全部依赖别人&#xff08;别人也不会全心全意去帮你&#xff09;&#xff0c;你大部分还是只能靠自己。材料就是&#xff1a;文档&#xff0c;代码&#xff0c;开发环境。 但是文档&#xff0c;代码&#xff0c;都…...

Spring Boot实现新闻个性化推荐

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…...

优化后的版本

docker_operations.sh #!/bin/bash# all definition NETWORK_NAME"net-1" VOLUME_MOUNT"-v /home/norten/Public/tools:/mnt" # 容器内部挂载到主机的路径 SCRIPT_ROUTE"/mnt" # container_run_medium.sh所在的路径 IMAGE_NAME"ubuntu&quo…...

【Linux系统编程】第二十七弹---文件描述符与重定向:fd奥秘、dup2应用与Shell重定向实战

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、文件描述符fd 1.1、0 & 1 & 2 1.2、文件描述符的分配规则 2、重定向 3、使用 dup2 系统调用 3.1、> 输出…...

开放式耳机哪个品牌好?好用且高性价比的开放式蓝牙耳机推荐

相信很多经常运动的朋友都不是很喜欢佩戴入耳式耳机&#xff0c;因为入耳式耳机真的有很多缺点。 安全方面&#xff1a;在安全上就很容易存在隐患&#xff0c;戴上后难以听到周围环境声音&#xff0c;像汽车鸣笛、行人呼喊等&#xff0c;容易在运动中发生意外。 健康方面&…...

区间合并——模板题

题目描述 给定 n 个区间 [li, ri]&#xff0c;要求合并所有有交集的区间。注意如果在端点处相交&#xff0c;也算有交集。 输出合并完成后的区间个数。 例如&#xff1a;[1, 3] 和 [2, 6] 可以合并为一个区间 [1, 6]。 输入格式 第一行包含整数 n 。 接下来 n 行&#xff0c…...

Microsoft Edge 五个好用的插件

&#x1f423;个人主页 可惜已不在 &#x1f424;这篇在这个专栏 插件_可惜已不在的博客-CSDN博客 &#x1f425;有用的话就留下一个三连吧&#x1f63c; 目录 Microsoft Edge 一.安装游览器 ​编辑 二.找到插件商店 1.打开游览器后&#xff0c;点击右上角的设置&#…...

解决 遇到JWT中claims中获取不到数据的问题

1.先介绍一下JWT的常规流程 用户进行登录将token储存到redis&#xff0c;然后进行其他需要验证的操作时进行验证&#xff0c;比如使用拦截器进行验证&#xff0c;那么id存储的到claims&#xff0c;因为可以在拦截器验证时将其存放到ThreadLocal中&#xff0c;这样通过ThreadLo…...

会议平台后端优化方案

会议平台后端优化方案 通过RTC的学习&#xff0c;我了解到了端对端技术&#xff0c;就想着做一个节省服务器资源的会议平台 之前做了这个项目&#xff0c;快手二面被问到卡着不知如何介绍&#xff0c;便有了这篇文章 分析当下机制 相对于传统视频平台&#xff08;SFU&#xff…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

篇章二 论坛系统——系统设计

目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...

Vue3 PC端 UI组件库我更推荐Naive UI

一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用&#xff0c;前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率&#xff0c;还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库&#xff08;Naive UI、Element …...

CSS 工具对比:UnoCSS vs Tailwind CSS,谁是你的菜?

在现代前端开发中&#xff0c;Utility-First (功能优先) CSS 框架已经成为主流。其中&#xff0c;Tailwind CSS 无疑是市场的领导者和标杆。然而&#xff0c;一个名为 UnoCSS 的新星正以其惊人的性能和极致的灵活性迅速崛起。 这篇文章将深入探讨这两款工具的核心理念、技术差…...

Qt的学习(二)

1. 创建Hello Word 两种方式&#xff0c;实现helloworld&#xff1a; 1.通过图形化的方式&#xff0c;在界面上创建出一个控件&#xff0c;显示helloworld 2.通过纯代码的方式&#xff0c;通过编写代码&#xff0c;在界面上创建控件&#xff0c; 显示hello world&#xff1b; …...

C++中vector类型的介绍和使用

文章目录 一、vector 类型的简介1.1 基本介绍1.2 常见用法示例1.3 常见成员函数简表 二、vector 数据的插入2.1 push_back() —— 在尾部插入一个元素2.2 emplace_back() —— 在尾部“就地”构造对象2.3 insert() —— 在任意位置插入一个或多个元素2.4 emplace() —— 在任意…...

MyBatis-Plus 常用条件构造方法

1.常用条件方法 方法 说明eq等于 ne不等于 <>gt大于 >ge大于等于 >lt小于 <le小于等于 <betweenBETWEEN 值1 AND 值2notBetweenNOT BETWEEN 值1 AND 值2likeLIKE %值%notLikeNOT LIKE %值%likeLeftLIKE %值likeRightLIKE 值%isNull字段 IS NULLisNotNull字段…...

C++ Saucer 编写Windows桌面应用

文章目录 一、背景二、Saucer 简介核心特性典型应用场景 三、生成自己的项目四、以Win32项目方式构建Win32项目禁用最大化按钮 五、总结 一、背景 使用Saucer框架&#xff0c;开发Windows桌面应用&#xff0c;把一个html页面作为GUI设计放到Saucer里&#xff0c;隐藏掉运行时弹…...