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

虚拟化范式跃迁中的生命周期隐喻与命令哲学——解构Docker容器从抽象实体到可控资源的数字化生存法则

本篇摘要

本篇将介绍容器定义、特性及与镜像关系,阐述容器轻量、一致、灵活、安全等优势,详解容器五大生命周期状态及转换命令,涵盖创建、运行、停止等操作,还介绍异常处理、暂停机制及相关命令用法。

在这里插入图片描述

欢迎拜访: 点击进入博主主页

本篇主题: Docker容器之5大生命周期状态+22个核心命令的实战密码全方位解析

制作日期: 2025.09.22

隶属专栏: 点击进入所属Docker专栏

一.认识容器

在这里插入图片描述

  1. 容器定义:容器是镜像的运行实体,镜像是静态只读文件,容器带有运行时所需的可写文件层,且容器内进程处于运行状态,容器有初建、运行、停止、暂停和删除五种状态。
  2. 容器特性:容器本质是主机上运行的一个进程,但有自己独立的命名空间隔离和资源限制,在容器内部看不到主机上的进程、环境变量、网络等信息,此为与直接运行在主机上进程的本质区别。
  3. 容器与镜像关系:容器基于镜像创建,是可运行实例,单独存在,一个镜像可创建多个容器。运行容器化环境时,会在容器内部创建文件系统读写副本,添加容器层,该层允许修改镜像副本。

可以把镜像理解成一个模版,而容器就是实例化出来的对象(某种意义上可以这么理解):

在这里插入图片描述

因此,就是容器基于镜像工作起来,而又自带了镜像的能力(如打包功能),还自带它的资源隔离以及资源抑制特性。

二.为什么需要容器

  1. 比虚拟机更轻
  • 不装完整系统,共享主机内核,省资源、启动快(秒级)、性能高。
  1. 环境一致
  • 把应用和依赖打包成“集装箱”,到哪都能跑,杜绝“我这儿行你那儿不行”。
  1. 灵活高效
  • 一键部署、快速扩缩容(业务忙就加容器,闲就减),搬家(迁移)也方便。
  1. 安全隔离
  • 每个容器独立运行,一个炸了不影响其他,更安全稳定。

三.容器的生命周期

容器的生命周期状态

  1. created:初始创建状态,容器已创建但未运行。
  2. running:运行状态,容器正在执行任务。
  3. stopped:停止状态,容器已停止运行。
  4. paused:暂停状态,容器进程被暂停。
  5. deleted:删除状态,容器已被删除。

容器状态转换命令

在这里插入图片描述

  • docker create:创建容器,使其进入初始创建状态。
  • docker run:创建并立即运行容器,进入运行状态。
  • docker start:将已停止的容器转为运行状态。
  • docker stop:停止正在运行的容器,使其进入停止状态。
  • docker kill:强制杀死容器进程,使其进入停止状态(可能导致数据丢失,非必要不建议使用)。
  • docker restart:重启容器,先停止再启动,使其进入运行状态。
  • docker pause:暂停容器内的所有进程,使其进入暂停状态。
  • docker unpause:取消暂停,使容器内的进程恢复运行,回到运行状态。
  • docker rm:删除容器,使其进入删除状态。

容器异常终止与处理

  • 非计划终止:容器进程意外终止后,需决定是否重启。选择“yes”则执行 start 命令恢复运行;选择“no”则保持停止状态。
  • 容器 OOM(内存不足)
    • 当容器内应用耗尽分配的内存时,触发 OOM 事件(如内存占用过大)。若容器由宿主机操作系统直接管理(非 Docker Daemon),宿主机将关闭该容器。
    • 使用 --oom-kill-disable 参数可禁用 OOM-Killer,但需配合 -m 设置内存上限,否则容器可能耗尽主机内存。
    • 若仅使用 --oom-kill-disable 未设置 -m,容器会尽可能占用主机内存,直至被系统强制终止。

容器异常退出

  • 容器内所有进程依赖 Init 进程运行,若子进程异常退出,Init 进程也会退出,导致容器关闭。Docker Daemon 会尝试重启设置了 --restart 参数的容器,否则保持停止状态(如代码问题)。

容器暂停

  • 使用 docker pause 时,Docker 会剥夺容器的 CPU 资源,使其进程无法被内核调度,进入“冻结”状态,但内存、网络等资源仍保留。

四.Docker 容器常见命令

1.docker create 命令

功能:

  • 创建一个新的Docker容器,但不会立即启动该容器。你可以先配置好容器的各项参数,之后再根据需要手动启动它。

语法:

1. 基本用法:

  • 功能:创建容器但不启动
  • 命令格式docker create [选项] 镜像 [命令] [参数]
  • 别名docker container create(功能相同)

2. 核心参数:

交互与终端:

  • -i:交互模式(配合-t使用)
  • -t:分配终端(配合-i使用)
  • -p:端口映射(格式:主机端口:容器端口,如 -p 8080:80
  • -P:随机端口映射

容器标识:

  • --name:指定容器名称(如 --name my-container
  • -h:设置容器主机名

环境配置:

  • -e:设置环境变量(如 -e KEY=VALUE

资源限制:

  • -m:设置内存限制(如 -m 512m
  • --cpuset-cpus:绑定CPU核心(如 --cpuset-cpus="0-1"

网络配置:

  • --network:指定网络类型(如 --network bridge
  • --link:链接其他容器(旧方式,推荐用自定义网络)

存储配置:

  • -v:挂载卷(格式:主机路径:容器路径,如 -v /data:/app/data

生命周期:

  • --rm:退出时自动删除容器
  • --restart:设置重启策略(如 --restart always

这里用法大都和docker run相似就不过多演示。

演示:

首先create一个容器:

在这里插入图片描述

  • 发先容器没有启动,只是单一创好了。

在这里插入图片描述

在这里插入图片描述

  • 运行的时候发现端口有冲突,改了一下,访问到了效果。

2.docker logs

  1. 功能:查看容器日志。
  2. 语法docker logs [选项] 容器
  3. 别名docker container logs
  4. 关键参数
    • -f:跟踪日志输出。
    • --since:显示指定时间后日志。
    • -t:显示时间戳。
    • -n:显示最新N条日志。

演示:

在这里插入图片描述

  • 默认全显示完后退出。

在这里插入图片描述
在这里插入图片描述

  • 追踪显示,没有内容就卡住了,有日志输出就接着走。

在这里插入图片描述

  • 追踪某一年开始的日志。

在这里插入图片描述

  • 显示最新的5条日志。

在这里插入图片描述

  • 显示对应时间戳。

3.docker attach

  1. 功能:连接到正在运行中的容器。
  2. 语法:docker attach [OPTIONS] CONTAINER
  3. 别名:docker container attach
  4. 关键参数:--sig-proxy,默认true,设为false退出不影响容器,否则退出会导致容器退出。

演示:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 相当于接管了这个容器,一旦attach退出,容器也会跟着退出。

只需要加上--sig-proxy就可以解决了:

在这里插入图片描述
在这里插入图片描述

  • 符合预期。

4.docker exec

  1. 功能:在容器中执行命令。
  2. 语法
    docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
    
  3. 别名docker container exec
  4. 关键参数
    • -d:分离模式,在后台运行。
    • -i:即使没有附加也保持 STDIN 打开。
    • -t:分配一个伪终端。
    • -e:设置环境变量。
    • -u, --user:指定用户(格式为 <name|uid>[:<group|gid>])。
    • -w, --workdir:指定工作目录。

演示:

在这里插入图片描述
在这里插入图片描述

  • 启动容器后,在执行对应bash指令。

在这里插入图片描述

  • 修改环境变量。

在这里插入图片描述

  • 后台运行。

在这里插入图片描述

  • 指定用户才能在容器里面执行命令。

5.docker start

  1. 功能:启动停止的容器。
  2. 语法:docker start [OPTIONS] CONTAINER [CONTAINER...]
  3. 别名:docker container start
  4. 样例:docker start mynginx

6.docker stop

  1. 功能:停止运行中的容器(不管是交互还是后台运行)。
  2. 语法docker stop [OPTIONS] CONTAINER [CONTAINER...]
  3. 别名docker container stop
  4. 关键参数-s(发信号)(不常用)。

在这里插入图片描述

  • 可以是名字或者id,也可以是多个一起stop。

7.docker restart

  1. 功能:用于重启容器。
  2. 语法docker restart [OPTIONS] CONTAINER [CONTAINER...]
  3. 别名docker container restart
  4. 关键参数-s ,作用为发送信号 。

演示下:

在这里插入图片描述

在这里插入图片描述

  • 进行重启容器,然后再开一个进行追踪日志监督,可以发现优雅地退出,说明容器释放是主动的可以进行一些资源释放,以及一些数据不能被及时保存等(先停止后启动,故日志也会断开)。

在这里插入图片描述

  • 发现又在运行。

在这里插入图片描述

  • 如果用信号强制杀死,发现没有“优雅地退出”,也就是被动的,一些容器资源不能及时释放掉,以及一些数据不能被及时保存。

8.docker kill

  1. 功能:强制退出容器。
  2. 语法docker kill [OPTIONS] CONTAINER [CONTAINER...]
  3. 别名docker container kill
  4. 关键参数-s ,用于指定发送的信号。
  5. 注意: Docker stop 发送的是 SIGTERM 信号, docker kill 发送的是 SIGKILL 信号

这和对应的stop发送信号相似,只不过,stop是优雅的退出,可以保存 释放容器的一些资源,而kill比较暴力,直接干掉了。

9.docker top

  1. 功能:查看容器中运行的进程信息,支持 ps 命令参数。

  2. 语法docker top CONTAINER [ps OPTIONS]

  3. 别名docker container top

  4. 注意

  • 容器运行时不一定有 /bin/bash 终端来交互执行 top 命令。
  • 容器还不一定有 top 命令,可以使用 docker top 来实现查看 container 中正在运行的进程。
  • 可有一些搭配ps对应参数使用。

演示:

在这里插入图片描述

10.docker stats

  1. 功能:展示容器CPU、内存、网络I/O等资源使用情况
  2. 语法docker stats [OPTIONS] [CONTAINER...]
  3. 别名docker container stats
  4. 关键参数
    • --all,-a:显示所有容器(含未运行)
    • --format:指定返回模板(如table、json)
    • --no-stream:只显示当前状态,不实时更新
    • --no-trunc:不截断输出
  5. 返回信息
    • 容器ID和名称
    • CPU和内存使用百分比
    • 内存使用量和限制量
    • 网络收发数据量
    • 块设备读写数据量
    • 容器进程/线程数

演示下:

在这里插入图片描述

  • 默认是全监视,看到一个实时刷新页面。

在这里插入图片描述

  • 显示所有容器情况。

在这里插入图片描述

  • format以json串形式显示,不常用,一般都是table。

一般都是默认实时更新,如果不需要可以 --no-stream一下:

在这里插入图片描述

显示指定id容器相关资源占用情况(全id显示):

在这里插入图片描述

在这里插入图片描述

11.docker container inspect

  1. 功能:查看容器详细信息。
  2. 语法
docker container inspect [OPTIONS] CONTAINER [CONTAINER...]
  1. 关键参数
    • -f:指定返回值的模板文件,如 table、json。
    • -s:显示总的文件大小。
  2. 注意事项docker inspect 会自动检查是镜像还是容器然后显示相关信息。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
下面停止掉容器看看:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 出现了总文件大小以及停止状态也变了。

12.docker port

  1. 功能:
  • docker port命令的主要作用是展示指定Docker容器的端口映射详情。
  • 它能够帮助用户查找容器内部私有端口(PRIVATE_PORT)经过网络地址转换(NAT)后,对应到宿主机面向公众的网络端口(先要启动)。
  1. 语法:

在Shell环境下,其使用格式为:

docker port CONTAINER [PRIVATE_PORT[/PROTO]]

其中:

  • CONTAINER:这是必需参数,代表要查询端口映射的Docker容器的名称或者ID。
  • PRIVATE_PORT[/PROTO]:此为可选参数。PRIVATE_PORT指容器内部的私有端口号,PROTO(可选)用于指定协议类型,比如tcp或者udp 。若不提供该可选参数,会显示该容器所有端口的映射情况。
  1. 别名:

docker port命令存在一个别名,即 docker container port ,二者功能完全一致,你可以依据个人习惯选择使用。

在这里插入图片描述

  • 后面参数起到筛选作用。

13.docker cp

功能:

在容器和宿主机之间拷贝文件。

语法:

  • 从容器拷贝文件到宿主机:docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
  • 从宿主机拷贝文件到容器:docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

别名:

docker container cp

演示下:

容器文件拷贝到宿主机:

在这里插入图片描述

在这里插入图片描述
进行修改后拷贝回去:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 页面变了。

14. docker diff

功能:

  • 用于检查容器内文件结构的更改情况,能查看文件或目录的创建、删除、修改等变动。

语法:

  • 在 Shell 中执行命令的格式为:docker diff CONTAINER,其中 CONTAINER 是要检查的容器的名称或 ID。
  • 执行后,会列出一系列文件和目录的变更信息,比如新增的配置文件、修改过的日志文件等。 变更信息通常会有标识来表示是新增(A)、删除(D)还是修改(C)等操作。

演示:

在这里插入图片描述

  • 可以看到我们之前测试cp的时候修改的文件。

15.docker commit

  1. 功能:从容器创建一个新的镜像()。
  2. 语法docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
  3. 参数
    • -a:提交的镜像作者;
    • -c:使用Dockerfile指令来创建镜像,可修改启动指令;
    • -m:提交时的说明文字;
    • -p:在commit时,将容器暂停(提交完恢复)。

运行一个容器,然后把它还原成对应的镜像添加镜像列表里面:

在这里插入图片描述

下面测试下如果修改对应的容器,然后还原成的镜像,再运行是否发生变化:

进原容器文件新增:

在这里插入图片描述

还原这个容器为镜像:

在这里插入图片描述
在这里插入图片描述

  • 镜像再次运行文件,发现之前的文件还在。

在这里插入图片描述

  • 进行相关筛选,发现确实变了。

修改启动指令测试:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 符合预期。

总结下:

这里的commit就相当于把对应的容器根据里面的信息,配置,重新转化成对应的镜像,如容器自身内部有变化,生成的镜像边变化可用于制作镜像。

16.docker pausedocker unpause

  1. docker pause
    • 功能:暂停容器中所有进程。
    • 语法:docker pause CONTAINER [CONTAINER...]
    • 别名:docker container pause
    • 样例:docker pause mynginx
  2. docker unpause
    • 功能:恢复容器中所有进程。
    • 语法:docker unpause CONTAINER [CONTAINER...]
    • 别名:docker container unpause

启动nginx,然后再暂停:
在这里插入图片描述
在这里插入图片描述

  • 一直在转圈。

unpause下:

在这里插入图片描述

在这里插入图片描述

  • 恢复了。

17.docker rm

以下是关于 docker rm 命令的简单概括:

  1. 功能:删除停止的容器。
  2. 语法docker rm [OPTIONS] CONTAINER [CONTAINER...]
  3. 别名docker container rm
  4. 关键参数
    • -f:通过 SIGKILL 信号强制删除一个运行中的容器。

运行容器,停止后删除:

在这里插入图片描述

强制删除:

在这里插入图片描述

18.docker import与 export

docker export:

  1. 功能:将容器文件系统导出为tar文件
  2. 语法docker export [OPTIONS] CONTAINER
  3. 别名docker container export
  4. 关键参数
    • -o:指定输出文件。
  5. 作用场景:备份容器文件系统、迁移环境。

docker import:

  1. 功能:将tar文件导入为Docker镜像
  2. 语法docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
  3. 关键参数
    • -c:导入时执行Dockerfile指令。
    • -m:添加提交信息。
  4. 作用场景:基于容器创建镜像、定制基础镜像。

对比:

  • 流程:export(容器→tar) + import(tar→镜像) = 容器文件系统转镜像。
  • 差异:export只导容器文件,import生成含元数据的镜像。

将容器转化成tar文件:

在这里插入图片描述

进行导出为镜像,查看镜像信息:

在这里插入图片描述
在这里插入图片描述

  • 发现相关原数据信息都变成空了(而save和load就不会出现这个问题[镜像与镜像之间的转换])。

因此在还原镜像的时候还是更推荐save和load。

基于还原镜像的时候参数选项:

在这里插入图片描述

19.docker wait

  1. 命令docker wait
  2. 功能:阻塞运行直到容器停止,然后打印出其退出代码。
  3. 语法docker wait CONTAINER [CONTAINER...]
  4. 别名docker container wait

正在运行的容器如果被wait,然后终端就无法进行,直到这个容器挂掉出现退出码,之后在wait,就直接返回退出码了。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

20.docker rename

  1. 功能:重命名容器。
  2. 语法docker rename CONTAINER NEW_NAME
  3. 别名docker container rename

演示:

重命名容器名称:

在这里插入图片描述

在这里插入图片描述

21.docker container prune

  1. 功能:删除所有停止的容器。
  2. 语法docker container prune [OPTIONS]
  3. 关键参数
    • -f, --force:不提示是否进行确认。

在这里插入图片描述

22.docker update

  1. 功能

    • 用于更新已有容器的配置。
  2. 语法

    • Shell 命令格式:docker update [OPTIONS] CONTAINER [CONTAINER…]
  3. 别名

    • 也可使用 docker container update 来执行相同操作。
  4. 关键参数(部分常用)

    • --cpus:指定容器可使用的 CPU 数量。
    • --cpuset-cpus:指定容器要绑定使用哪些 CPU 核心。
    • --memory:设置容器的内存使用上限。
    • --memory-swap:设置容器的交换内存(swap)大小。
    • --cpu-period:指定容器对 CPU 资源进行重新分配的时间周期(相当于多长时间分配时间片)。
    • --cpu-quota:在 --cpu-period 指定的周期内,容器最多能占用 CPU 的时长(相当于时间片长度)。

在这里插入图片描述

  • 这里还是不允许,一般容器在未启动时候就需要分配好相关信息,或者结合挂载,利用cgroups进行限制等。

小结下

命令别名功能备注
docker createdocker container create创建容器
docker rundocker container run运行容器必须掌握
docker attachdocker container attach连接到正在运行中的容器
docker commitdocker container commit将镜像提交为容器必须掌握
docker cpdocker container cp在容器和宿主机之间拷贝必须掌握
docker diffdocker container diff检查容器里文件结构的更改
docker execdocker container exec在运行的容器中执行命令必须掌握
docker exportdocker container export将容器导出为tar
docker container inspect查看容器详细信息必须掌握
docker killdocker container kill杀死容器必须掌握
docker logsdocker container logs查看日志必须掌握
docker psdocker container ls, docker container list, docker container ps查看正在运行的进程必须掌握
docker pausedocker container pause暂停进程
docker portdocker container port查看容器的端口映射
docker container prune删除停止的容器
docker renamedocker container rename重命名容器
docker restartdocker container restart重启容器必须掌握
docker rmdocker container rm, docker container remove删除容器必须掌握
docker startdocker container start启动容器必须掌握
docker statsdocker container stats查看资源占用信息必须掌握
docker stopdocker container stop停止容器必须掌握
docker topdocker container top查看某个容器的资源占用必须掌握
docker unpausedocker container unpause继续运行容器
docker updatedocker container update更新容器配置
docker waitdocker container wait阻止一个或多个容器停止,然后大厨退出码

五.本篇小结

通过本篇掌握容器核心概念与生命周期管理,熟悉常用命令,能有效进行容器部署、维护与故障处理,保障应用稳定高效运行。

http://www.dtcms.com/a/394655.html

相关文章:

  • OpenLayers地图交互 -- 章节八:平移交互详解
  • AES+RSA 实现混合加密
  • 命名实体识别技术NER
  • 网络验证 一键加密 一键接入验证 加壳加密数盾加盾
  • JDBC组件
  • StandardScaler,MinMaxScaler等四个内置归一化函数学习
  • pandawiki 无法获取模型列表
  • openEuler2403安装宝塔面板
  • Altium Designer(AD) PCB铺铜
  • 解决Django长时间操作中的MySQL连接超时问题
  • 样本量估计原理与python代码实现
  • 0v0.pro 深度评测、 AI 助手篇、80+模型 free
  • ego(9)---ego-planner中的动力学仿真
  • 2025年9月第3周AI资讯
  • ETL详解:从核心流程到典型应用场景
  • SQL查询基础常用攻略
  • 数据结构二叉树(C语言)
  • Domain、BO、BIZ 三层的协作关系
  • 【从小白到精通之数据库篇】Mysql--连接与子查询
  • C++ 函数详解:从基础到高级应用
  • HTML打包的EXE程序无法关闭?
  • openEuler2403安装Ollama
  • 苍穹外卖项目实战(day11-1)-记录实战教程、问题的解决方法以及完整代码
  • 【Linux命令从入门到精通系列指南】mv 命令详解:文件与目录移动、重命名及安全操作的终极实战手册
  • 【C语言】深入解析阶乘求和算法:从代码实现到数学原理
  • 图形库的基础--svg
  • 令牌桶算法
  • FPGA开发环境配置
  • 特别分享:怎么用coze搭建智能体?
  • Linux 管道