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

docker学习(4)容器的生命周期与资源控制

🧩 1. 容器启动、暂停、重启、删除的本质区别

操作本质行为对进程影响对数据影响对镜像影响
start启动一个已创建的容器(重新运行容器中的主进程)创建新的进程保留容器层数据不变
pause暂停容器内所有进程(用 cgroup freezer 冻结)进程仍存在,只是挂起数据保留不变
unpause恢复暂停的容器进程继续执行保留不变
restart相当于 stop + start进程重启(旧进程被杀掉)挂载数据保留不变
stop发送 SIGTERM 再 SIGKILL,结束容器进程进程终止容器层仍在(未删除)不变
rm删除容器元数据和读写层所有进程结束容器层被删除(数据消失)镜像仍在

💭 举个例子:

你有一个容器 web1,挂载路径 /data

docker run -d -v /mydata:/data --name web1 nginx
操作结果
docker stop web1容器进程停止,/data 数据仍在
docker start web1容器重新启动,继续使用同一个 /data
docker rm web1容器被彻底删除,若没挂载卷,/data 数据也没了
docker restart web1容器短暂停止再启动,挂载不变,内存和进程都被重建

🧠 2. docker restart 对内存、进程、挂载数据的影响

当执行:

docker restart mycontainer

相当于:

docker stop mycontainer && docker start mycontainer

影响如下:

项目变化情况
内存状态全部清空(因为进程重启)
进程被终止并重新创建
挂载数据(volume/bind mount)不受影响(挂载关系保持)
容器层文件系统保留(除非删除容器)
网络连接重新分配 IP(如果动态分配)

📌 所以:

  • 你修改 .env 文件后 docker restart 无效,就是因为容器进程被重启,但容器层的数据(包括原始环境变量)没变。
  • 只有 docker-compose down 删除容器,再 up 重新创建,才会重新读取 .env 并生效。

💪 3. Docker 如何限制 CPU 和内存

Docker 使用 Linux 的 cgroups(控制组) 来实现资源限制。

限制 CPU
docker run --cpus=2 myapp

→ 最多使用 2 个 CPU 核。

或用更细的方式:

docker run --cpu-shares=512 myapp

→ 代表优先级,数值越大获得的 CPU 时间片越多。

限制内存
docker run -m 512m myapp

→ 限制容器最多使用 512MB 内存。

当超出内存限制时:

  • Linux 内核的 OOM Killer 会杀掉容器进程;
  • 容器状态变为 Exited (137)

⚠️ 4. 如果某个容器疯狂占用资源,会不会影响其他容器?

会,但可以被限制。

  • 如果没设置资源限制,容器本质上共用宿主机资源。
    → 一个容器吃光 CPU/内存,宿主机会卡死,其他容器也受影响。

  • 如果设置了 --cpus-m,Docker 会通过 cgroups 控制:

    • 超出限制的 CPU 需求被阻塞;
    • 内存达到上限会触发 OOM;
    • 这样就能保证“资源隔离”。

建议
为每个重要容器设置合理的资源限制,防止“噪音容器”(noisy neighbor)。


💡 5. Docker 解决的根本问题是什么?

Docker 解决的,不仅是“运行方便”,而是 环境一致性 + 快速部署 + 资源隔离

传统问题:

  • “我本地能跑,服务器跑不动”;
  • 每次部署要手动装环境;
  • 应用之间依赖冲突。

Docker 的核心思路是:

把应用和运行环境打包成一个独立、可移植的单元(容器),在任何地方都能以同样方式运行。

所以 Docker 解决的是:

  • 开发、测试、生产的环境一致性;
  • 部署自动化;
  • 多应用隔离与资源控制。

🧩 6. 容器技术对微服务和 CI/CD 的意义

微服务架构
  • 每个微服务打包成一个独立容器;
  • 快速启动、独立部署;
  • 不同语言/框架互不干扰;
  • 容器间通过网络通信,形成完整系统。
CI/CD(持续集成/持续部署)
  • 构建:代码提交后自动构建镜像;
  • 测试:用容器跑自动化测试;
  • 部署:在 Kubernetes 等平台自动拉取新镜像上线。

👉 容器 = 自动化流水线的“原子单元”。


💥 7. 宿主机系统更新或崩溃,会对容器造成什么影响?

情况对容器的影响
宿主机重启所有容器都会停止(进程消失),但镜像、卷都保留;重启 Docker 后可恢复。
宿主机系统更新可能更新 Docker 引擎或内核版本;若兼容性没问题,容器不会受影响。
宿主机崩溃或磁盘损坏所有容器进程中断;未持久化的数据丢失;卷中的数据若存在独立磁盘则可恢复。

总结一句话:

容器看似独立,实则寄生于宿主机。宿主机挂了,容器也跟着停;但只要卷和镜像在,容器可随时“再生”。


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

相关文章:

  • 网站建设开发网站案例项目费用电子商务网站建设读书笔记
  • 做推广用那个网站吗室内装修设计软件免费版下载破解版
  • 做网站必须学php吗wordpress改插件难吗
  • SAP MM采购订单推送OA分享
  • 如何线下宣传网站深圳网站建设那家好
  • 豆包谈追星
  • 手机网站开发公司哪家好惠州营销网站建设
  • 选择做华为网站的目的和意义博客登陆wordpress
  • 洛谷 P5718:找最小值 ← if + while
  • 网站美食建设图片素材故事式软文范例500字
  • 装饰网站建设的背景贵阳网页设计培训
  • Vue3 中的 watch 和 watchEffect:如何优雅地监听数据变化
  • 深度学习模型训练的一些常见指标
  • 购物网站建设情况汇报更合公司网站建设
  • 前端+AI:HTML5语义标签(一)
  • 微端边缘设备部署大模型简单笔记
  • wordpress的网站无法发布文章创造一个平台要多少钱
  • 搜索本地存储逻辑
  • 域名解析在线seo网站培训班
  • ASTM C1693-11蒸压加气混凝土检测
  • RAG(检索增强生成)详解:让大模型更“博学”更“靠谱”
  • 我有域名怎么建网站鱼滑怎么制作教程
  • 萧县做网站的公司商城app官方下载
  • 网站弹广告是什么样做的辽阳做网站
  • 德州市德城区城乡建设局网站电子商务网页设计与制作课后作业
  • 网站中的滑动栏怎么做的asp网站路径
  • 深圳专业网站建设公网站建设系统怎么样
  • Python基础语法与数据类型详解2
  • AFL++测试工具
  • php做网站的支付功能公司建设网站的报告