玩转Docker(四):容器指令、生命周期、资源限制、容器化支持、常用命令
文章目录
- 一、容器指令
- 1.运行
- 2.启动/停止/重启
- 3.暂停/恢复
- 4.删除
- 二、生命周期
- 三、资源限制
- 1.内存限额
- 2.CPU限额
- 3.磁盘读写带宽限额
- 四、cgroup和namespace
- 五、常用命令
一、容器指令
1.运行
按用途容器大致可分为两类:服务类容器和工具类的容器。
- 服务类容器:
服务类容器以daemon的形式运行,对外提供服务,比如Web Server、数据库等。
通过 -d以后台方式启动这类容器是非常合适的。
如果要排查问题,可以通过exec -it进入容器。
创建并启动
docker run -d webserver-image
以交互方式启动一个已经创建了的容器
docker exec -it webserver-image /bin/bash
- 工具类容器:
工具类容器通常能给我们提供一个临时的工作环境,通常以run -it方式运行。执行exit退出终端,同时容器停止。
工具类容器多使用基础镜像,例如busybox、debian、ubuntu等。
创建并启动
docker run -it ubuntu /bin/bash
- restart参数:
docker run -d --restart=always webserver-image
--restart=always
意味着无论容器因何种原因退出(包括正常退出),都立即重启;该参数的形式还可以是 --restart=on-failure:3,意思是如果启动进程退出代码非0,则重启容器,最多重启3次
2.启动/停止/重启
当你使用 Docker 时,你会频繁地需要停止、启动和重启容器。以下是这些操作的详细说明:
-
停止容器 (
docker stop
):- 用法:
docker stop <container_name_or_id>
- 作用:停止指定的容器。Docker 会发送一个 SIGTERM 信号给容器,然后等待一定时间(默认为10秒)让容器进行清理工作。如果容器在这段时间内没有停止,Docker 会发送一个 SIGKILL 信号强制终止容器。
- 用法:
-
启动容器 (
docker start
):- 用法:
docker start <container_name_or_id>
- 作用:启动之前停止的容器。这个命令会重新启动已经存在的容器,不会创建新的容器实例。
- 用法:
-
重启容器 (
docker restart
):- 用法:
docker restart <container_name_or_id>
- 作用:重启指定的容器。这个命令会先停止容器,然后再启动它。
- 用法:
这些命令可以帮助你有效地管理 Docker 容器的生命周期,让你能够灵活地控制容器的运行状态。
3.暂停/恢复
当你使用 Docker 时,你可能会需要暂停和恢复容器的运行。以下是 docker pause
和 docker unpause
命令的详细说明:
-
暂停容器 (
docker pause
):- 用法:
docker pause <container_name_or_id>
- 作用:暂停指定的容器。这个命令会暂停容器内所有的进程,使其停止运行。暂停后,容器内的所有进程都会被挂起,直到使用
docker unpause
命令来恢复它们的运行。
- 用法:
-
恢复容器 (
docker unpause
):- 用法:
docker unpause <container_name_or_id>
- 作用:恢复之前暂停的容器。这个命令会使被暂停的容器内的所有进程恢复运行。
- 用法:
这些命令可以帮助你在需要时暂停和恢复容器的运行,让你能够更灵活地控制容器的状态。
4.删除
docker rm
命令用于删除一个或多个已经停止的容器。以下是该命令的详细说明:
- 用法:
docker rm <container_name_or_id>
- 作用:删除指定的容器。如果要删除多个容器,可以在命令中列出它们的名称或 ID。
- 示例:
docker rm my_container
或docker rm container1 container2
- 注意:要删除正在运行的容器,需要先停止它们,然后再使用
docker rm
命令删除。
这个命令可以帮助你清理不再需要的容器,释放系统资源。在使用之前,请确保你真的不再需要这些容器,因为删除后将无法恢复。
docker rm是删除容器,而docker rmi是删除镜像。
二、生命周期
Docker 容器的生命周期包括以下几种状态的切换:
-
创建(Created):当你使用
docker create
命令创建一个容器时,容器就处于创建状态。在这个阶段,容器已经被创建,但还没有被启动。 -
启动(Running):当你使用
docker start
命令启动一个已经创建的容器时,容器就会进入运行状态。在这个阶段,容器内的进程正在运行。 -
暂停(Paused):你可以使用
docker pause
命令来暂停一个正在运行的容器,使得容器内的所有进程都会被挂起。 -
恢复(Unpaused):使用
docker unpause
命令可以恢复一个被暂停的容器,使得容器内的进程继续运行。 -
停止(Stopped):当你使用
docker stop
命令停止一个运行中的容器时,容器会进入停止状态。在这个阶段,容器内的进程会被发送 SIGTERM 信号,然后等待一段时间后被强制终止。 -
删除(Deleted):使用
docker rm
命令可以删除一个已经停止的容器,释放其占用的系统资源。
这些状态之间的切换反映了容器在其生命周期中的不同阶段,理解这些状态的切换有助于更好地管理和维护 Docker 容器。
三、资源限制
1.内存限额
容器可使用的内存包括两部分:物理内存和swap。
-m或 --memory
:设置内存的使用限额,例如100MB,2GB。默认情况下值为-1,即无上限。
--memory-swap
:设置内存+swap的使用限额。默认情况下值为-1,即无上限。如果在启动容器时只指定 -m而不指定 --memory-swap,那么 --memory-swap默认为 -m的两倍。
--vm
:启动内存工作线程数量。
--vm-bytes
:每个线程分配多大内存
- 示例:
docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1--vm-bytes 280M
2.CPU限额
默认设置下,所有容器可以平等地使用host CPU资源并且没有限制。
Docker可以通过 -c或 --cpu-shares
设置容器使用CPU的权重。如果不指定,默认值为1024。
与内存限额不同,通过 -c设置的cpu share是一个相对的权重值。某个容器最终能分配到的CPU资源取决于它的cpu share占所有容器cpu share总和的比例。
- 示例:
containerA的cpu share 1024,是containerB的两倍。当两个容器都需要CPU资源时,containerA可以得到的CPU是containerB的两倍。
docker run --name "container_A" -c 1024 ubuntu docker run --name "container_B" -c 512 ubuntu
3.磁盘读写带宽限额
bps是byte per second,每秒读写的数据量。
iops是io per second,每秒IO的次数。
可通过以下参数控制容器的bps和iops:
● --device-read-bps:限制读某个设备的bps。
● --device-write-bps:限制写某个设备的bps。
● --device-read-iops:限制读某个设备的iops。
● --device-write-iops:限制写某个设备的iops。
- 示例:
限制容器对 /dev/sda 设备的写入带宽为 1MB/s。
docker run --device-write-bps=/dev/sda:1mb my_container
还可以通过设置 --blkio-weight
参数来改变容器block IO的优先级。
–blkio-weight与 --cpu-shares类似,设置的是相对权重值,默认为500。
在下面的例子中,containerA读写磁盘的带宽是containerB的两倍。
- 示例:
docker run -it --name container_A --blkio-weight 600 ubuntu docker run -it --name container_B --blkio-weight 300 ubuntu
四、cgroup和namespace
Docker 使用了 Linux 内核提供的两个重要特性来实现容器化:cgroup(Control Groups)和 namespace。以下是对它们的详细说明:
-
cgroup(控制组):
- cgroup 是 Linux 内核提供的一种机制,用于限制、账户和隔离一个或多个进程的资源使用。通过 cgroup,你可以限制容器对 CPU、内存、磁盘 I/O 等资源的使用。
- 在 Docker 中,cgroup 被用来限制容器的资源使用,例如限制 CPU 使用率、内存使用量、磁盘 I/O 带宽等。
- 通过 cgroup,Docker 可以确保容器在运行时不会过度占用宿主机的资源,从而实现资源的隔离和管理。
-
namespace(命名空间):
- namespace 是 Linux 内核提供的另一种机制,用于隔离系统资源,使得在一个命名空间中的进程看到的资源与其他命名空间中的进程是隔离的。
- 在 Docker 中,namespace 被用来隔离容器的进程空间、网络空间、文件系统空间等。每个容器都有自己独立的命名空间,使得它们看到的系统资源是隔离的。
- 通过 namespace,Docker 可以实现容器的隔离,使得每个容器都拥有自己独立的运行环境,互相之间不会产生影响。
综合起来,cgroup 和 namespace 是 Docker 实现容器化的重要基础,它们使得 Docker 能够实现资源的隔离、管理和容器的隔离运行。
五、常用命令
最后,总结一下docker容器的常用命令:
-
create:创建容器
- 用法:
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
- 说明:使用指定的镜像创建一个新的容器,但不启动它。
- 用法:
-
run:运行容器
- 用法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
- 说明:创建并启动一个新的容器,可以指定各种选项和参数。
- 用法:
-
pause:暂停容器
- 用法:
docker pause CONTAINER
- 说明:暂停指定的容器内所有的进程。
- 用法:
-
unpause:取消暂停继续运行容器
- 用法:
docker unpause CONTAINER
- 说明:取消暂停指定的容器,使得容器内的进程继续运行。
- 用法:
-
stop:发送SIGTERM停止容器
- 用法:
docker stop [OPTIONS] CONTAINER
- 说明:发送 SIGTERM 信号停止指定的容器,等待一定时间后再发送 SIGKILL 信号强制停止。
- 用法:
-
kill:发送SIGKILL快速停止容器
- 用法:
docker kill [OPTIONS] CONTAINER
- 说明:发送 SIGKILL 信号快速停止指定的容器。
- 用法:
-
start:启动容器
- 用法:
docker start [OPTIONS] CONTAINER
- 说明:启动之前停止的容器。
- 用法:
-
restart:重启容器
- 用法:
docker restart [OPTIONS] CONTAINER
- 说明:重启指定的容器。
- 用法:
-
attach:attach到容器启动进程的终端
- 用法:
docker attach [OPTIONS] CONTAINER
- 说明:attach 到正在运行的容器中的主进程的标准输入、输出和错误输出。
- 用法:
-
exec:在容器中启动新进程,通常使用"-it"参数
- 用法:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
- 说明:在运行的容器中执行新的命令。
- 用法:
-
logs:显示容器启动进程的控制台输出,用"-f"持续打印
- 用法:
docker logs [OPTIONS] CONTAINER
- 说明:获取容器的日志输出,使用
-f
选项可以持续地打印日志。
- 用法:
-
rm:从磁盘中删除容器
- 用法:
docker rm [OPTIONS] CONTAINER
- 说明:删除指定的容器,释放其占用的磁盘空间。
- 用法:
这些命令涵盖了 Docker 容器的创建、管理、运行和监控等方方面面,是使用 Docker 进行容器化应用开发和部署的重要工具。
相关文章:
玩转Docker(四):容器指令、生命周期、资源限制、容器化支持、常用命令
文章目录 一、容器指令1.运行2.启动/停止/重启3.暂停/恢复4.删除 二、生命周期三、资源限制1.内存限额2.CPU限额3.磁盘读写带宽限额 四、cgroup和namespace五、常用命令 一、容器指令 1.运行 按用途容器大致可分为两类:服务类容器和工具类的容器。 服务类容器&am…...

回归预测 | MATLAB实现CHOA-BiLSTM黑猩猩优化算法优化双向长短期记忆网络回归预测 (多指标,多图)
回归预测 | MATLAB实现CHOA-BiLSTM黑猩猩优化算法优化双向长短期记忆网络回归预测 (多指标,多图) 目录 回归预测 | MATLAB实现CHOA-BiLSTM黑猩猩优化算法优化双向长短期记忆网络回归预测 (多指标,多图)效果…...

Qt/C++视频监控安卓版/多通道显示视频画面/录像存储/视频播放安卓版/ffmpeg安卓
一、前言 随着监控行业的发展,越来越多的用户场景是需要在手机上查看监控,而之前主要的监控系统都是在PC端,毕竟PC端屏幕大,能够看到的画面多,解码性能也强劲。早期的手机估计性能弱鸡,而现在的手机性能不…...

【docker】容器使用(Nginx 示例)
查看 Docker 客户端命令选项 docker上面这三张图都是 常用命令: run 从映像创建并运行新容器exec 在运行的容器中执行命令ps 列出容器build 从Dockerfile构建映像pull 从注册表下载图像push 将图像上载到注册表…...

【QT】时间日期与定时器
目录 1.时间日期相关的类 2.日期时间数据与字符串之间的转换 2.1 时间、日期编辑器属性设置 2.2 日期时间数据的获取与转换为字符串 2.3 字符串转换为日期时间 3.QCaIendarWidget日历组件 3.1基本属性 3.2 公共函数 3.3 信号 4.实例程序演示时间日期与定时器的使用 …...

蓝桥杯专题-真题版含答案-【古代赌局】【古堡算式】【微生物增殖】【密码发生器】
Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…...

和鲸科技携手深圳数据交易所,“数据+数据开发者生态”赋能人工智能产业发展
信息化时代,数据驱动决策的重要性日益凸显。通过利用数据可以深入了解市场需求、客户行为、竞争态势等关键信息,从而制定更为有效的战略和决策。围绕推动数据要素产业发展,近日,深圳数据交易所(以下简称“深数所”&…...
在MFC(Microsoft Foundation Classes)中 CreateThread函数
CreateThread是Windows API中用于创建新线程的函数。以下是对函数参数的详细解释: lpThreadAttributes(可选):指向SECURITY_ATTRIBUTES结构的指针,用于指定线程的安全性。可以设置为NULL,表示使用默认安全…...

Ubuntu 常用命令之 ls 命令用法介绍
Ubuntu ls 命令用法介绍 ls是Linux系统下的一个基本命令,用于列出目录中的文件和子目录。它有许多选项可以用来改变列出的内容和格式。 以下是一些基本的ls命令选项 -l:以长格式列出文件,包括文件类型、权限、链接数、所有者、组、大小、最…...

【解决】Windows 11检测提示电脑不支持 TPM 2.0(注意从DTPM改为PTT)
win11升级,tpm不兼容 写在最前面1. 打开电脑健康状况检查2. 开启tpm3. 微星主板AMD平台开启TPM2.0解决电脑健康状况检查显示可以安装win11,但是系统更新里显示无法更新 写在最前面 我想在台式电脑上用win11的专注模式,但win10不支持 1. 打…...

ChatGPT 也宕机了?如何预防 DDOS 攻击的发生
最近,开发人工智能聊天机器人的公司 OpenAI 遭受了一次规模较大的分布式拒绝服务(DDoS)攻击,导致其旗下的 ChatGPT 服务在短短 12 小时内遭遇了 4 次断网,众多用户遭受了连接失败的问题。 这次攻击事件引起了广泛的关…...

wireshark下载安装
下载 Wireshark Download 等待下载完成 安装 双击 下面的一定垚勾选上 下图的也一定要勾选上 修改为不重启,不需要重启也是正常的...

如何退回chrome旧版ui界面?关闭Chrome浏览器新 UI 界面
之前启用新UI的方式 Chrome 已经很久没有进行过大的样式修改,但近期在稳定分支中添加了新的 flags 实验性标志,带来了全新的设计与外观,启用方式如下: 在 Chrome 浏览器的搜索栏中输入并访问 chrome://flags 搜索“refresh 2023…...

指针进阶篇
指针的基本概念: 指针是一个变量,对应内存中唯一的一个地址指针在32位平台下的大小是4字节,在64位平台下是8字节指针是有类型的,指针类型决定该指针的步长,即走一步是多长指针运算:指针-指针表示的是两个指…...
C语言之单链表理解与应用
其实网上有好多关于单链表理解,其实知乎上有一篇写的很好,利用图形与代码结合,我觉得写的很好,大家也可以去查一下,每个人都有自己的想法与理解,这里主要看单链表概念,应用场景,举例…...

SpringBoot对PDF进行模板内容填充、电子签名合并
1. 依赖引入–这里只包含额外引入的包 原有项目包不含括在内 <!-- pdf编辑相关--> <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.3</version> </dependency><de…...

Vue3快速上手笔记
Vue3快速上手 1.Vue3简介 2020年9月18日,Vue.js发布3.0版本,代号:One Piece(海贼王)耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址:https://github.com/vuejs/vue-next/release…...

LLM中的Prompt提示
简介 在LLM中,prompt(提示)是一个预先设定的条件,它可以限制模型自由发散,而是围绕提示内容进行展开。输入中添加prompt,可以强制模型关注特定的信息,从而提高模型在特定任务上的表现。 结构 …...

【算法Hot100系列】最长回文子串
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

KaiwuDB × 国网山东综能 | 分布式储能云边端一体化项目建设
项目背景 济南韩家峪村首个高光伏渗透率台区示范项目因其所处地理位置拥有丰富的光照资源,该区域住户 80% 以上的屋顶都安装了光伏板。仅 2022 年全年,光伏发电总量达到了百万千瓦时。 大量分布式光伏并网,在输出清洁电力的同时,…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...

篇章二 论坛系统——系统设计
目录 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…...
【Ftrace 专栏】Ftrace 参考博文
ftrace、perf、bcc、bpftrace、ply、simple_perf的使用Ftrace 基本用法Linux 利用 ftrace 分析内核调用如何利用ftrace精确跟踪特定进程调度信息使用 ftrace 进行追踪延迟Linux-培训笔记-ftracehttps://www.kernel.org/doc/html/v4.18/trace/events.htmlhttps://blog.csdn.net/…...