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

玩转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 时,你会频繁地需要停止、启动和重启容器。以下是这些操作的详细说明:

  1. 停止容器 (docker stop):

    • 用法:docker stop <container_name_or_id>
    • 作用:停止指定的容器。Docker 会发送一个 SIGTERM 信号给容器,然后等待一定时间(默认为10秒)让容器进行清理工作。如果容器在这段时间内没有停止,Docker 会发送一个 SIGKILL 信号强制终止容器。
  2. 启动容器 (docker start):

    • 用法:docker start <container_name_or_id>
    • 作用:启动之前停止的容器。这个命令会重新启动已经存在的容器,不会创建新的容器实例。
  3. 重启容器 (docker restart):

    • 用法:docker restart <container_name_or_id>
    • 作用:重启指定的容器。这个命令会先停止容器,然后再启动它。

这些命令可以帮助你有效地管理 Docker 容器的生命周期,让你能够灵活地控制容器的运行状态。

3.暂停/恢复

当你使用 Docker 时,你可能会需要暂停和恢复容器的运行。以下是 docker pausedocker unpause 命令的详细说明:

  1. 暂停容器 (docker pause):

    • 用法:docker pause <container_name_or_id>
    • 作用:暂停指定的容器。这个命令会暂停容器内所有的进程,使其停止运行。暂停后,容器内的所有进程都会被挂起,直到使用 docker unpause 命令来恢复它们的运行。
  2. 恢复容器 (docker unpause):

    • 用法:docker unpause <container_name_or_id>
    • 作用:恢复之前暂停的容器。这个命令会使被暂停的容器内的所有进程恢复运行。

这些命令可以帮助你在需要时暂停和恢复容器的运行,让你能够更灵活地控制容器的状态。

4.删除

docker rm 命令用于删除一个或多个已经停止的容器。以下是该命令的详细说明:

  • 用法:docker rm <container_name_or_id>
  • 作用:删除指定的容器。如果要删除多个容器,可以在命令中列出它们的名称或 ID。
  • 示例:docker rm my_containerdocker rm container1 container2
  • 注意:要删除正在运行的容器,需要先停止它们,然后再使用 docker rm 命令删除。

这个命令可以帮助你清理不再需要的容器,释放系统资源。在使用之前,请确保你真的不再需要这些容器,因为删除后将无法恢复。

docker rm是删除容器,而docker rmi是删除镜像。

二、生命周期

Docker 容器的生命周期包括以下几种状态的切换:

  1. 创建(Created):当你使用 docker create 命令创建一个容器时,容器就处于创建状态。在这个阶段,容器已经被创建,但还没有被启动。

  2. 启动(Running):当你使用 docker start 命令启动一个已经创建的容器时,容器就会进入运行状态。在这个阶段,容器内的进程正在运行。

  3. 暂停(Paused):你可以使用 docker pause 命令来暂停一个正在运行的容器,使得容器内的所有进程都会被挂起。

  4. 恢复(Unpaused):使用 docker unpause 命令可以恢复一个被暂停的容器,使得容器内的进程继续运行。

  5. 停止(Stopped):当你使用 docker stop 命令停止一个运行中的容器时,容器会进入停止状态。在这个阶段,容器内的进程会被发送 SIGTERM 信号,然后等待一段时间后被强制终止。

  6. 删除(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。以下是对它们的详细说明:

  1. cgroup(控制组)

    • cgroup 是 Linux 内核提供的一种机制,用于限制、账户和隔离一个或多个进程的资源使用。通过 cgroup,你可以限制容器对 CPU、内存、磁盘 I/O 等资源的使用。
    • 在 Docker 中,cgroup 被用来限制容器的资源使用,例如限制 CPU 使用率、内存使用量、磁盘 I/O 带宽等。
    • 通过 cgroup,Docker 可以确保容器在运行时不会过度占用宿主机的资源,从而实现资源的隔离和管理。
  2. namespace(命名空间)

    • namespace 是 Linux 内核提供的另一种机制,用于隔离系统资源,使得在一个命名空间中的进程看到的资源与其他命名空间中的进程是隔离的。
    • 在 Docker 中,namespace 被用来隔离容器的进程空间、网络空间、文件系统空间等。每个容器都有自己独立的命名空间,使得它们看到的系统资源是隔离的。
    • 通过 namespace,Docker 可以实现容器的隔离,使得每个容器都拥有自己独立的运行环境,互相之间不会产生影响。

综合起来,cgroup 和 namespace 是 Docker 实现容器化的重要基础,它们使得 Docker 能够实现资源的隔离、管理和容器的隔离运行。

五、常用命令

最后,总结一下docker容器的常用命令:

  1. create:创建容器

    • 用法:docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
    • 说明:使用指定的镜像创建一个新的容器,但不启动它。
  2. run:运行容器

    • 用法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    • 说明:创建并启动一个新的容器,可以指定各种选项和参数。
  3. pause:暂停容器

    • 用法:docker pause CONTAINER
    • 说明:暂停指定的容器内所有的进程。
  4. unpause:取消暂停继续运行容器

    • 用法:docker unpause CONTAINER
    • 说明:取消暂停指定的容器,使得容器内的进程继续运行。
  5. stop:发送SIGTERM停止容器

    • 用法:docker stop [OPTIONS] CONTAINER
    • 说明:发送 SIGTERM 信号停止指定的容器,等待一定时间后再发送 SIGKILL 信号强制停止。
  6. kill:发送SIGKILL快速停止容器

    • 用法:docker kill [OPTIONS] CONTAINER
    • 说明:发送 SIGKILL 信号快速停止指定的容器。
  7. start:启动容器

    • 用法:docker start [OPTIONS] CONTAINER
    • 说明:启动之前停止的容器。
  8. restart:重启容器

    • 用法:docker restart [OPTIONS] CONTAINER
    • 说明:重启指定的容器。
  9. attach:attach到容器启动进程的终端

    • 用法:docker attach [OPTIONS] CONTAINER
    • 说明:attach 到正在运行的容器中的主进程的标准输入、输出和错误输出。
  10. exec:在容器中启动新进程,通常使用"-it"参数

    • 用法:docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
    • 说明:在运行的容器中执行新的命令。
  11. logs:显示容器启动进程的控制台输出,用"-f"持续打印

    • 用法:docker logs [OPTIONS] CONTAINER
    • 说明:获取容器的日志输出,使用 -f 选项可以持续地打印日志。
  12. rm:从磁盘中删除容器

    • 用法:docker rm [OPTIONS] CONTAINER
    • 说明:删除指定的容器,释放其占用的磁盘空间。

这些命令涵盖了 Docker 容器的创建、管理、运行和监控等方方面面,是使用 Docker 进行容器化应用开发和部署的重要工具。

相关文章:

玩转Docker(四):容器指令、生命周期、资源限制、容器化支持、常用命令

文章目录 一、容器指令1.运行2.启动/停止/重启3.暂停/恢复4.删除 二、生命周期三、资源限制1.内存限额2.CPU限额3.磁盘读写带宽限额 四、cgroup和namespace五、常用命令 一、容器指令 1.运行 按用途容器大致可分为两类&#xff1a;服务类容器和工具类的容器。 服务类容器&am…...

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

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

Qt/C++视频监控安卓版/多通道显示视频画面/录像存储/视频播放安卓版/ffmpeg安卓

一、前言 随着监控行业的发展&#xff0c;越来越多的用户场景是需要在手机上查看监控&#xff0c;而之前主要的监控系统都是在PC端&#xff0c;毕竟PC端屏幕大&#xff0c;能够看到的画面多&#xff0c;解码性能也强劲。早期的手机估计性能弱鸡&#xff0c;而现在的手机性能不…...

【docker】容器使用(Nginx 示例)

查看 Docker 客户端命令选项 docker上面这三张图都是 常用命令&#xff1a; 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 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…...

和鲸科技携手深圳数据交易所,“数据+数据开发者生态”赋能人工智能产业发展

信息化时代&#xff0c;数据驱动决策的重要性日益凸显。通过利用数据可以深入了解市场需求、客户行为、竞争态势等关键信息&#xff0c;从而制定更为有效的战略和决策。围绕推动数据要素产业发展&#xff0c;近日&#xff0c;深圳数据交易所&#xff08;以下简称“深数所”&…...

在MFC(Microsoft Foundation Classes)中 CreateThread函数

CreateThread是Windows API中用于创建新线程的函数。以下是对函数参数的详细解释&#xff1a; lpThreadAttributes&#xff08;可选&#xff09;&#xff1a;指向SECURITY_ATTRIBUTES结构的指针&#xff0c;用于指定线程的安全性。可以设置为NULL&#xff0c;表示使用默认安全…...

Ubuntu 常用命令之 ls 命令用法介绍

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

【解决】Windows 11检测提示电脑不支持 TPM 2.0(注意从DTPM改为PTT)

win11升级&#xff0c;tpm不兼容 写在最前面1. 打开电脑健康状况检查2. 开启tpm3. 微星主板AMD平台开启TPM2.0解决电脑健康状况检查显示可以安装win11&#xff0c;但是系统更新里显示无法更新 写在最前面 我想在台式电脑上用win11的专注模式&#xff0c;但win10不支持 1. 打…...

ChatGPT 也宕机了?如何预防 DDOS 攻击的发生

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

wireshark下载安装

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

如何退回chrome旧版ui界面?关闭Chrome浏览器新 UI 界面

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

指针进阶篇

指针的基本概念&#xff1a; 指针是一个变量&#xff0c;对应内存中唯一的一个地址指针在32位平台下的大小是4字节&#xff0c;在64位平台下是8字节指针是有类型的&#xff0c;指针类型决定该指针的步长&#xff0c;即走一步是多长指针运算&#xff1a;指针-指针表示的是两个指…...

C语言之单链表理解与应用

其实网上有好多关于单链表理解&#xff0c;其实知乎上有一篇写的很好&#xff0c;利用图形与代码结合&#xff0c;我觉得写的很好&#xff0c;大家也可以去查一下&#xff0c;每个人都有自己的想法与理解&#xff0c;这里主要看单链表概念&#xff0c;应用场景&#xff0c;举例…...

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日&#xff0c;Vue.js发布3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;海贼王&#xff09;耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址&#xff1a;https://github.com/vuejs/vue-next/release…...

LLM中的Prompt提示

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

【算法Hot100系列】最长回文子串

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

KaiwuDB × 国网山东综能 | 分布式储能云边端一体化项目建设

项目背景 济南韩家峪村首个高光伏渗透率台区示范项目因其所处地理位置拥有丰富的光照资源&#xff0c;该区域住户 80% 以上的屋顶都安装了光伏板。仅 2022 年全年&#xff0c;光伏发电总量达到了百万千瓦时。 大量分布式光伏并网&#xff0c;在输出清洁电力的同时&#xff0c…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

【Android】Android 开发 ADB 常用指令

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

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...