玩转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 进行容器化应用开发和部署的重要工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/226254.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ribbon使用

Ribbon &#xff1a;处理客户端负载均衡和容错的解决方案 配置Ribbon的负载均衡 Rule接口&#xff1a; 定义客户端负载均衡的规则 RandomRule :随机选择RoundRobinRuleZoneAvoidanceRule 配置ribbon的负载均衡策略 在配置文件中配置 user-center:ribbon:NFLoadBalancerRul…

视频号小店运营思路详解!

我是电商珠珠 视频号小店的热度在今年下半年开始逐步升高&#xff0c;这就如同20年的抖音小店一样。 对于商家来说&#xff0c;新平台寓意着新的机会。不少人想要入驻&#xff0c;但是却不知道怎么做。 其实&#xff0c;视频号小店的运营方式和抖音小店相差无几&#xff0c;…

bug 记录

ks-jenkins 出现内存不足错误 起初想在jenkins 中进行配置 发现找不到自动删除历史构建选项&#xff0c;看了kubesphere 文档也没找到选择git 仓库时配置历史构建保留时间&#xff0c;但是不选择git 仓库时是有的。 最终在jenkins 下系统管理下 工具中编写命令脚本进行手动删…

如何通俗易懂的理解Redis分布式锁

一、前言 首先我们先考虑以下这个问题&#xff1a; 在多线程并发的情况下&#xff0c;我们如何保证一个代码块在同一时间只能由一个线程访问呢&#xff1f; 答案&#xff1a;通常来说&#xff0c;我们可以用锁来保证。比如java的synchronized用法以及ReentrantLock等等。这样…

Python:解决with打开文件错误UnicodeDecodeError

简介&#xff1a;在使用with打开部分编码不是utf-8和gbk时&#xff0c;可能出现报错UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xff in position 0: illegal multibyte sequence. UnicodeDecodeError 是一个很常见的错误&#xff0c;它通常在你试图解码一个特定编…

三阶魔方七步解法-最后还原顶层顶角(不是顶棱)

主要区别&#xff0c;最后一步是 顶层十字棱角已经还原&#xff0c;四个顶角的位置正确&#xff0c;但四个顶角的颜色没有对应。 因为现在基本都是6步还原法&#xff08;找什么小鱼&#xff0c;眼睛&#xff09;&#xff0c;是先还原顶层使颜色一致&#xff0c;最后还原顶棱。但…

云原生之深入解析使用Telepresence轻松在本地调试和开发Kubernetes应用程序

一、 准备 telepresence 下载&#xff1a;https://www.telepresence.io/docs/latest/install/kubectl 下载&#xff1a;https://kubernetes.io/docs/tasks/tools/ 二、版本检测 $telepresence version Client: v2.5.3 (api v3) Root Daemon: not running User Daemon: not r…

leetcode面试经典二分系列刷题心得

闲来无事巩固算法基础&#xff0c;发现自己的二分几乎从来没系统刷过题&#xff0c;基础很是薄弱。 二分法不愧称为新人杀手&#xff0c;刷起来很是吃力&#xff0c;感觉明明学了几套二分模板&#xff0c;但是却不知道如何去运用&#xff0c;很多读者在初次尝试刷二分题时候&a…

陆[6],函数hommat2didentity/HomMat2dRotate/HomMat2dScale/HomMat2dTranslate/

函数hommat2didentity 函数功能 生成一个初始矩阵[1,0,0,0,1,0] C形式 LIntExport void HomMat2dIdentity( HTuple* HomMat2DIdentity);//参数1:输出初始矩阵 C#形式 public static void HomMat2dIdentity( out HTuple homMat2DIdentity); 函数HomMat2dRotate 函数功能…

计算机网络 internet应用 (水

ARPA net ---Internet 前身 发展史: ARPA net 第一个主干网..美国军方NSFnet 美国国家科学基金会NSFANSnet 美国全国 (internet 叫法开始出现) 第二代互联网(现在() IP地址 IP地址 最高管理机构 - InterNIC IPV4 32位 IPV6 128位 域名 起名 解析 domain name sys…

24款奔驰C260L升级C63包围 典型的花小钱办大事

今天店里来了一台24款奔驰C260L 一提车就过来升级 我们公司还有包上牌服务 车主说 升级完包围 帮忙安排一下 原车的包围 没有那么霸气 特别是后杠 光溜溜的 升级后 四出尾喉 尾翼 直接牌面就起来了 星骏汇小许Xjh15863

Android12-RK3588_s-开机动画

目录 一、实现自定义开机动画 步骤一&#xff1a;准备 bootanimation.zip 步骤二&#xff1a;将 bootanimation.zip 放到 /system/media/bootanimation.zip下 步骤三&#xff1a;重启即可 二、注意事项 2.1 bootanimation.zip 压缩 2.2 bootanimation.zip 存放 2.3 boo…

打印机设置发票收据打印

由于各种打印机型号不一样&#xff0c;设置方式打印效果出入也很大&#xff0c;存在打印不全问题&#xff0c;发票右侧小数点后面的数字打印不出来、位置靠上下左右登问题&#xff0c;比较通用的设置方式如下&#xff1a; 首先找到控制面板&#xff0c;找到设备和打印机 进入到…

Git使用无法拉取

错误提示&#xff1a; error setting certificate verify locations: CAfile: C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt CApath: none 问题原因&#xff1a; 这个问题是因为git配置里crt证书的路径不正确导致的 解决办法&#xff1a; 这个路径配置是在C:\Pro…

【C语言】printf()函数详解,手把手教你,保姆级!!!

目录 基本用法 printf()函数--占位符 占位符大全 printf()函数--限定宽度 printf()函数--正负--限定小数 printf()函数--输出部分字符串 总结 【C语言】printf()函数详解&#xff0c;手把手教你&#xff0c;保姆级&#xff01;&#xff01;&#xff01; 基本用法 printf()…

【HDFS】FsDatasetSpi#adjustCrcChannelPosition

FsDatasetSpi接口里定义adjustCrcChannelPosition方法。 应用场景在:append,block recovery等场景。 方法的作用是设置checksum 流(datanode上meta文件)的文件指针,来让最后一个checksum被覆写。 /*** Sets the file pointer of the checksum stream so that the last ch…

openoffice安装

安装openoffice 下载安装包 建议去官网下载&#xff0c;这里给出官网地址&#xff1a;https://www.openoffice.org/download/ 这里以linux为例&#xff0c;所以我下载的是unbantu的版本(deb) 解压安装包 tar -zxvf Apache_OpenOffice_4.1.13_Linux_x86-64_install-deb_zh-…

【Hive】【Hadoop】工作中常操作的笔记-随时添加

文章目录 1、Hive 复制一个表:2、字段级操作3、hdfs 文件统计 1、Hive 复制一个表: 直接Copy文件 create table new_table like table_name;hdfs dfs -get /apps/hive/warehouse/ods.db/table_nameload data local inpath /路径 into table new_table;修复表&#xff1a; m…

25.Java程序设计-基于SSM框架的微信小程序校园求职系统的设计与实现

1. 引言 1.1 背景 介绍校园求职系统的背景&#xff0c;说明为什么设计这个系统以及系统的重要性。 1.2 研究目的 阐述设计基于SSM框架的微信小程序校园求职系统的目标和意义。 2. 需求分析 2.1 行业背景 分析校园求职行业的特点和需求&#xff0c;以及目前市场上同类系统…

数据结构-链表习题(C++)

程序设计题: 单链表实验 1.从键盘输入若干大于0的整数&#xff0c;用这些整数构造一个单链表.当用户输入小于等于0的值时创建链表结束并在终端打印输出这个链表。 2.在链表中查找某结点&#xff0c;如果能找到输出这个结点是第几个结点&#xff0c;如果找不到&#xff0c;输出:…