本篇摘要

本文实操测试Docker容器全流程:涵盖基础操作(创建/启停/状态迁移)、交互模式(attach/detach前台后台差异)、文件拷贝(宿主与容器互传)、自动管理(重启/删除策略)、环境变量设置(-e与文件加载)、镜像导出导入(含元数据问题)、日志资源监控(docker logs/stats/top),结合图文详解各场景操作要点。

在这里插入图片描述

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

本篇主题: Docker之容器基础操作全方位解析

制作日期: 2025.09.25

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

一.容器实操测试

基本操作与状态迁移

基本操作:

运行对应镜像(本地不存在就去远端拉取):

在这里插入图片描述

启动实时日志监测:

在这里插入图片描述

在这里插入图片描述
下面接着创建对应的容器,先不让他跑,然后看下状态变化:

在这里插入图片描述

  • 可以看到从create 和 stop 状态不同,且都能被start变成运行状态。

下面测试下restart状态:

在这里插入图片描述

  • 它的状态是从stop再次变成运行状态。

测试下暂停状态:

在这里插入图片描述

状态迁移:

容器过滤与查询命令:

  1. 根据名称过滤得到容器编号

    • 命令:docker container ls -qf name=xxx
    • 作用:通过名称筛选,仅返回匹配容器的 ID。
  2. 根据状态过滤容器信息

    • 命令:docker container ls --filter status=running
    • 作用:只展示状态为 “running(运行中)” 的容器信息。
  3. 静默获取全部容器 ID

    • 命令:docker container ls -aq
    • 作用:返回所有容器(包括运行和停止)的 ID,输出简洁无额外信息。
  4. 过滤镜像名为 xxx 的容器信息

    • 命令:docker container ls --filter ancestor=xxx
    • 作用:依据镜像名称,筛选出使用该镜像的所有容器信息。
  5. 过滤镜像 ID 为 xxx 的容器信息

    • 命令:docker container ls --filter ancestor=xxx
    • 作用:按照镜像 ID,找出基于该镜像创建的容器信息。

命令参数解释:

  • -a:列出所有容器(含已停止和正在运行的)。
  • -q:仅返回容器的 ID,不显示其他详细信息。
  • -f:基于指定条件过滤容器,等价于 --filter 选项,用于精准筛选目标容器。

如下:

在这里插入图片描述

基于多命令组合执行:

下面以start所有停止容器为例(~下面的符号):

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

  • 可以发现所有stop的容器全部起来(除了被kill强制杀死的容器)。

容器交互模式

attach与detach模式

  1. attached 模式

    • 命令示例docker container run -p 80:80 nginx,将宿主机 80 端口映射到容器 80 端口。
    • 端口映射说明:第一个 80 是宿主机端口,第二个 80 是容器端口。
    • 特点:容器在前台运行,访问时实时打印日志;在 Linux 服务器按 Ctrl+C 可能误停服务;仅适用于容器和程序的调试阶段。
  2. detached 模式

    • 启动方式:在 docker container run -p 80:80 nginx 命令后加 -d--detach 选项。
    • 特点:容器在后台运行,启动时仅显示容器 ID,可继续输入其他命令;关闭窗口容器仍运行,停止或删除需用 shell 命令,减少误操作;比 attached 模式更推荐使用。

在这里插入图片描述

在这里插入图片描述

  • 默认attach启动,前台被占用。

下面试试退出后会怎么样?

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

  • 发现容器就跟着挂了。

下面用detach模式后台运行下(-d):

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

在这里插入图片描述

  • 发现恢复了,无论是否ctrl c后,后台detach模式的容器都不受影响。

下面测试下如果对应的网络断开,离线模式等情况会不会影响容器运行:

在这里插入图片描述

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

  • 仍在运行。

因此,总结下:

默认就是attach模式,也就是前台运行,如果前台受到影响,自然容器就挂了,而如果detach模式,放在后台运行,无论前台咋样,即使离线,只要服务器没挂,容器正常运行不受影响;如果测试环境就用attach,前台运行,而生生产环境就用detach模式,后台运行

interactive模式

  1. 用途:创建容器后,要在容器内获取信息或执行命令(如Ubuntu容器输Shell命令交互),需进交互模式。
  2. 创建运行容器并进交互模式:参数:-i 保持容器运行,常与 -t 一起用,搭配 -it 容器创建后自动进入,退出则关闭;-t 为容器分配伪输入终端,常和 -i 配合。

前台模式:

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

  • 前台都需要手动启动nginx命令来开启这个访问,而后台默认自动启动。

在这里插入图片描述

在这里插入图片描述

  • 发现正常启动。

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

  • 无论如何ctrl c 都无法关闭,就类似一个bash终端一样。

输入exit退出当前环境:

在这里插入图片描述

在这里插入图片描述

  • 成功退出。

测试后台模式:

在这里插入图片描述

在这里插入图片描述

  • 后台程序,只要不bash,默认自动启动nginx指令。

下面进行bash交互并退出:

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

  • 这里退出只是退出当前容器里的执行bash的这个环境,退出的是这个bash,也就是退了这个在容器中执行命令的这个环境,然后并没退出nginx容器这个环境。

总结下:

  • 前台运行容器,需要手动启动,而后台只要不启动bash后台就是自动启动nginx,然后前台以bash来运行接收exit退出容器的命令,如果无论是前台还是后台不是以bash运行,而是exec进入容器执行bash命令,此时exit就无法退出容器。

  • 也就是说exit是退出当前环境,而容器以bash运行(当前容器环境)和在容器中执行bash命令(exec对应的bash命令这个环境)不是同一个环境。

二.宿主机与容器之间进行文件拷贝

拿test2做测试:

在这里插入图片描述
文件拷贝到宿主机:

在这里插入图片描述
进行vim修改:

在这里插入图片描述

拷贝回去(覆盖性拷贝):

在这里插入图片描述

在这里插入图片描述

进行重新访问:

在这里插入图片描述

在这里插入图片描述

  • 符合预期。

在这里插入图片描述

  • 不支持容器之间拷贝。

三. 容器的自动删除与自动重启

自动删除(run的时候带–rm)

在这里插入图片描述

  • 发现自动删除了,后台程序也是一样(注意是stop不是pause)。

自动重启:

  1. docker run --restart=no [容器名]:默认值,不自动重启容器。
  2. docker run --restart=on-failure:3 [容器名]:仅在容器退出状态非0时自动重启,可指定重启次数(此处为3次),超过次数则放弃重启。
  3. docker run --restart=always [容器名]:容器退出时总是自动重启。
  4. docker run --restart=unless-stopped [容器名]:容器退出时总是自动重启,但不考虑Docker守护进程启动时就已经停止的容器。
  5. 若容器启动时未设置--restart参数,可通过docker update --restart=always [容器名]命令更新重启策略。

这里默认就是no(查看容器信息):

在这里插入图片描述

下面拿always模式测试下(这里需要进入容器,执行容器内设置的退出指令):

在这里插入图片描述

但是如果在容器外部被宿主机被stop了呢?

在这里插入图片描述

  • 说明stop后不能被重启。

四.容器环境变量设置与容器信息查看及借助容器执行特殊任务

环境变量设置

  1. -e 参数(运行时设置)
    • 命令:docker run -e 变量名=值 镜像名
    • 特点:仅对当前运行容器有效,适合临时注入少量配置,如密码等敏感信息。
  2. –env-file 参数(运行时从文件加载)
    • 命令:docker run --env-file 文件路径 镜像名
    • 特点:从文件批量加载多个环境变量到当前运行容器,适合管理多个配置项。

测试下:

-e:

在这里插入图片描述

  • 符合预期。

--env-file :

按照文件给它输进去:

在这里插入图片描述

在这里插入图片描述

  • 符合预期。

容器详情信息查看

这里其实就是docker psdocker container inspect 容器名字 这两命令;
前者是后者的简单提取,后者是更详细的:

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

宿主机靠容器执行单行命令

我们可以直接借助 docker 的容器环境执行一些命令,比如容器中有某个命令而宿主机上没有这个时候借助容器可以完成某些任务。

假设宿主机没有ping与ifconfig这个命令(借助busybox):

在这里插入图片描述

  • 这里看到的都是容器的,以容器的视角执行的命令(一般测试容器命令的时候可以这样,测试的都是对外通用的命令)。

五.基于容器镜像导出于导入测试

把原nginx容器进行对主页文件修改:

在这里插入图片描述

tar文件导出:

在这里插入图片描述

跨不同服务器进行传输:

在这里插入图片描述

在这里插入图片描述

镜像生成容器:

在这里插入图片描述

  • 进行报错,这里之前说过,对应export导出的时候,会把对应的镜像的command env 等元数据信息丢失了,inspect看下,如下:

在这里插入图片描述

运行nginx的时候手动补充对应command:

在这里插入图片描述

下面解释下这个nginx的指令:

Nginx 启动命令,用来临时设置全局配置(不用改配置文件)。

最常用:

nginx -g "daemon off;"
  • 作用:让 Nginx 在前台运行(不进后台),Docker 必须加这个,不然容器会秒退!

  • 默认前台运行需要交互bash,或者可以加上这个指令,但是上面因为加了-d,仍旧让它后台运行而不是前台运行了。

六.容器日志与资源查看

容器日志

还是指令docker logs 来看:

在这里插入图片描述

在这里插入图片描述

  • 实时追踪最新前5条日志。

在这里插入图片描述

  • 把对应的日志文件,进行重定向到文件里,如输出,错误分别定位到不同文件,方便查看。

下面我们查看下每个容器对应的所有日志的文件:

在这里插入图片描述

  • 可以看到很多id的容器目录。

下面进去找对应的日志文件:

在这里插入图片描述

vim打开可以看到很多日志:

在这里插入图片描述

  • 这里当某个容器出现问题的时候,就可以然客户打包这个日志文件成压缩包发过来进行检查。

容器资源

docker stats 容器名 :实时查看容器状态(如cpu 网络IO等)

在这里插入图片描述

在这里插入图片描述

还可以使用 docker top 容器名 +aux参数来只看对应容器相关进程一些信息:

在这里插入图片描述

  • 可以看到对应信息:
  • 用户、进程ID、CPU和内存占用、虚拟内存等资源信息
  • 进程状态、启动时间、占用CPU时长、启动命令
  • 主要是Nginx主进程和工作进程在运行

总结下:

如果想查看容器的实时状态就用stats;如果要查看对应进程相关信息就用top+aux

七.本篇小结

本篇学到了Docker容器操作核心在于状态控制(如detach后台保活)、交互管理(attach前台调试)、文件交互(宿主容器拷贝)、自动化策略(重启/删除规则)、环境配置(临时/批量注入)、镜像迁移(导出导入注意元数据)及监控排查(日志/资源查看),掌握这些可高效管理容器全生命周期。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐