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

Docker 学习笔记:镜像分发、容器运行与资源限制

Docker 学习笔记镜像分发、容器运行与资源限制本笔记续接上一部分涵盖镜像命名与分发、容器的核心操作、底层技术cgroup/namespace以及 CPU/内存资源限制。所有案例代码均经验证直接可用。8. 镜像命名与分发最佳实践8.1 为镜像命名镜像全称由三部分组成Registry地址/命名空间/仓库名:标签例如text054b8ac70e8010d90f2ac00ef29e6580.mirror.swr.myhuaweicloud.com/library/nginx:latest若未指定 tag默认使用latest。注意latest仅是一个普通标签不代表最新稳定版只是约定俗成。8.2 版本标签方案以myimage为例假设发布 v1.9.1bashdocker tag myimage:v1.9.1 myimage:1 docker tag myimage:v1.9.1 myimage:1.9 docker tag myimage:v1.9.1 myimage:1.9.1 docker tag myimage:v1.9.1 myimage:latest后续发布 v1.9.2、v2.0.0 时重新打标签让1、1.9、latest始终指向该分支最新版本。8.3 使用公共仓库 Docker Hubbash# 登录 docker login -u yourname # 重命名镜像 docker tag httpd yourname/httpd:v1 # 上传 docker push yourname/httpd:v18.4 使用华为云镜像仓库 SWRbash# 获取临时登录指令在华为云控制台复制 docker login -u cn-east-3xxx -p xxx swr.cn-east-3.myhuaweicloud.com # 打标签 docker tag httpd:centos swr.cn-east-3.myhuaweicloud.com/gaoqiaodong/centos_httpd:v1 # 推送 docker push swr.cn-east-3.myhuaweicloud.com/gaoqiaodong/centos_httpd:v18.5 搭建私有仓库 Registrybash# 一键启动 docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry --name registry registry:2 # 打标签并推送 docker tag httpd localhost:5000/httpd:v1 docker push localhost:5000/httpd:v1 # 拉取 docker pull localhost:5000/httpd:v18.6 企业级仓库 Harbor 简明部署bash# 下载离线包 wget https://github.com/goharbor/harbor/releases/download/v2.9.1/harbor-offline-installer-v2.9.1.tgz tar -xvf harbor-offline-installer-v2.9.1.tgz mkdir /opt/harbor mv harbor/* /opt/harbor/ cd /opt/harbor docker load -i harbor.v2.9.1.tar.gz # 配置 harbor.yml cp harbor.yml.tmpl harbor.yml vim harbor.yml # 修改 hostname注释 https设置初始密码 # 安装 ./prepare ./install.sh上传镜像到 Harborbash# 配置非安全仓库若无 HTTPS vim /etc/docker/daemon.json # 添加 insecure-registries: [192.168.108.30] systemctl restart docker # 登录并推送 docker login 192.168.108.30 -u images_admin -p Cloud12$ docker tag nginx:latest 192.168.108.30/cloud/nginx:latest docker push 192.168.108.30/cloud/nginx:latest8.7 镜像的导出与导入bash# 导出为 tar docker save httpd -o httpd.tar # 从 tar 导入 docker load -i httpd.tar注意docker export导出的是容器文件系统丢失元数据docker save导出的是完整镜像含分层和标签两者不可混用。9. 容器核心操作9.1 运行容器docker run docker create docker startbash# 创建但不启动 docker create ubuntu # 启动已创建的容器 docker start 容器ID # 直接运行执行完后退出 docker run ubuntu pwd让容器保持运行bash# 前台执行死循环占用终端 docker run ubuntu /bin/bash -c while true; do sleep 1; done # 后台运行 docker run -d ubuntu /bin/bash -c while true; do sleep 1; done # 运行服务类容器如 httpd docker run -d -p 80:80 httpd9.2 进入容器的两种方式docker attach直接连接容器的主进程终端。bashdocker attach 容器ID # 使用 Ctrlp Ctrlq 安全退出docker exec在容器中启动新进程推荐。bashdocker exec -it 容器ID bashdocker logs -f查看容器主进程输出不进入容器。9.3 容器按用途分类服务类容器以-d后台运行如 web server、数据库。工具类容器以-it交互运行用完即删如busybox wget。9.4 容器的启停与重启bashdocker stop 容器 # 发送 SIGTERM docker kill 容器 # 发送 SIGKILL docker start 容器 # 重新启动 docker restart 容器 # 先 stop 再 start自动重启策略bashdocker run -d --restartalways httpd # 可选值no默认, on-failure[:次数], always, unless-stopped重要只有容器内主进程意外退出时--restart才生效docker stop主动停止不会触发自动重启。9.5 暂停与删除bashdocker pause 容器 # 暂停进程不占用 CPU docker unpause 容器 # 删除容器 docker rm 容器ID # 批量删除已退出容器 docker rm -f $(docker ps -aq -f statusexited)9.6 容器状态转换图docker create→Createddocker start→Running主进程退出 →Exiteddocker runcreatestart10. 容器底层技术cgroup 与 namespace容器通过cgroup实现资源限额通过namespace实现资源隔离。10.1 namespace 一览namespace隔离内容UTS主机名和域名IPC信号量、消息队列、共享内存PID进程 ID 编号Network网络设备、IP、端口User用户和组Mount文件系统挂载点简单验证bash# UTS 隔离 docker run --hostname mycontainer busybox hostname # User 隔离 docker run -it ubuntu useradd test # 宿主上并不会有 test 用户10.2 cgroup 实战观察bash# 启动一个带有 cpu-share 的容器 docker run -it --cpu-shares 512 ubuntu-with-stress -c 1 -v # 查看其 cpu.shares 值 cat /sys/fs/cgroup/cpu/docker/容器长ID/cpu.shares # 输出 51211. 限制容器的内存与 CPU11.1 内存限额使用 stress 镜像生成压力测试dockerfileFROM ubuntu RUN apt-get -y update apt-get -y install stress ENTRYPOINT [/usr/bin/stress]bashdocker build -t ubuntu-with-stress .限制内存bash# 限制最大物理内存 200M最大内存swap 300M docker run -it -m 200M --memory-swap300M ubuntu-with-stress --vm 1 --vm-bytes 280M -v若--vm-bytes超过 300M容器会 OOM 退出。参数说明-m/--memory物理内存上限--memory-swap物理内存swap 上限等于-m不使用 swap未设置默认为-m的两倍-1swap 不受限11.2 CPU 限额基于份额的调度通过-c/--cpu-shares设置相对权重默认 1024。bash# 容器 A权重 1024 docker run --name container_A -it -c 1024 ubuntu-with-stress --cpu 4 -v # 容器 B权重 512 docker run --name container_B -it -c 512 ubuntu-with-stress --cpu 4 -v当 CPU 资源争抢时A 获得的时间片约为 B 的两倍。若 A 空闲B 可使用全部 CPU。重点--cpu-shares只在 CPU 竞争时生效。12. 知识点速查表12.1 镜像命名与推送流程速查步骤命令示例登录仓库docker login -u user registry_url打标签docker tag local_image user/repo:tag推送到公共仓库docker push user/repo:tag启动本地 Registrydocker run -d -p 5000:5000 -v /data:/var/lib/registry registry:2导出镜像docker save -o file.tar image:tag导入镜像docker load -i file.tar12.2 容器生命周期命令速查命令功能docker run -d --name web nginx后台运行并命名docker exec -it web bash进入容器执行命令docker logs -f web查看日志并持续输出docker stop web停止容器docker start web启动已存在的容器docker restart web重启容器docker rm -f web强制删除运行中的容器docker run --restartalways无论因何退出均自动重启12.3 资源限制参数速查参数含义示例-m/--memory物理内存限制-m 200M--memory-swap物理内存swap 总限制--memory-swap 300M-c/--cpu-sharesCPU 份额权重-c 512--cpus限制使用的 CPU 核数--cpus1.5--cpuset-cpus绑定到指定 CPU 核心--cpuset-cpus0-112.4 cgroup 相关映射资源cgroup 路径示例CPU 份额/sys/fs/cgroup/cpu/docker/id/cpu.shares内存限制/sys/fs/cgroup/memory/docker/id/memory.limit_in_bytes块设备 IO/sys/fs/cgroup/blkio/docker/id/...12.5 namespace 隔离验证示例bash# PID 隔离 docker run -d --name test busybox sleep 3600 ps aux | grep sleep # 在宿主上看到的 PID 不同于容器内的 PID 1 # 网络隔离 docker run --network none busybox ip a # 仅 lo 接口CPU 份额 |/sys/fs/cgroup/cpu/docker/id/cpu.shares|| 内存限制 |/sys/fs/cgroup/memory/docker/id/memory.limit_in_bytes|| 块设备 IO |/sys/fs/cgroup/blkio/docker/id/...|12.5 namespace 隔离验证示例bash# PID 隔离 docker run -d --name test busybox sleep 3600 ps aux | grep sleep # 在宿主上看到的 PID 不同于容器内的 PID 1 # 网络隔离 docker run --network none busybox ip a # 仅 lo 接口本章笔记到此结束下一部分将深入 Docker 网络、存储、日志监控与多容器编排。

相关文章:

Docker 学习笔记:镜像分发、容器运行与资源限制

Docker 学习笔记:镜像分发、容器运行与资源限制本笔记续接上一部分,涵盖镜像命名与分发、容器的核心操作、底层技术(cgroup/namespace)以及 CPU/内存资源限制。所有案例代码均经验证,直接可用。8. 镜像命名与分发最佳实…...

Cheat Engine 简单使用教程(新手版)

很多人第一次打开 Cheat Engine,都会被界面吓到。 其实真没那么复杂。 如果你只是想修改一下单机游戏里的金币、血量或者资源,掌握下面这几个步骤基本就够用了。 一、先打开游戏,再启动 Cheat Engine 这一点很多新人容易搞反。 正确顺序是…...

从零到一:在Windows Server上快速部署OpenLDAP服务与客户端连接实战

1. 为什么选择OpenLDAP? 如果你正在管理一个中小型企业的IT基础设施,用户账号管理可能会让你头疼。每次有新员工入职,都要在每台电脑上创建账号;员工离职时又要逐个删除权限。这种重复劳动不仅效率低下,还容易出错。Op…...

深度探索JD-GUI:Java字节码逆向工程与代码解析实战剖析

深度探索JD-GUI:Java字节码逆向工程与代码解析实战剖析 【免费下载链接】jd-gui A standalone Java Decompiler GUI 项目地址: https://gitcode.com/gh_mirrors/jd/jd-gui 在Java开发与逆向工程领域,Java反编译、字节码分析、代码逆向已成为开发者…...

cPanel三连漏洞CVE-2026-29201/29202/29203深度解析:150万服务器面临全面接管危机

一、事件引言:2026年主机行业最大安全地震 2026年5月8日,全球市场份额第一的服务器管理面板cPanel & WHM 发布紧急安全公告,一次性披露三个高危安全漏洞(CVE-2026-29201/29202/29203)。这组被安全界称为"cPa…...

命令行与IM桥接工具:适配器模式实现统一消息通知

1. 项目概述与核心价值最近在折腾一个挺有意思的东西,一个叫tmwgsicp/im-cli-bridge的项目。光看这个名字,可能有点摸不着头脑,我来拆解一下。tmwgsicp大概率是作者的用户名或者组织名,im-cli-bridge才是核心。im是即时通讯&#…...

告别手动建模!用ArcGIS+SWMM+慧天平台,5步搞定城市内涝模拟(附实战数据)

城市内涝模拟实战:ArcGISSWMM慧天平台高效协同工作流 暴雨过后街道成河、地下车库变泳池的场景,已成为许多城市规划者和工程师的噩梦。传统的内涝模拟方法需要手动处理海量管网数据,不仅耗时费力,还容易在数据转换过程中丢失关键信…...

在多模型间切换时Taotoken路由策略带来的稳定性体验

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在多模型间切换时Taotoken路由策略带来的稳定性体验 在构建基于大模型的应用时,服务的稳定性是开发者关心的核心问题之…...

Intel RealSense D435深度数据采集全流程:从Viewer截图到.csv/.raw文件深度解析

Intel RealSense D435深度数据采集全流程:从Viewer截图到.csv/.raw文件深度解析 深度视觉技术正在重塑工业检测、机器人导航和三维重建等领域的工作流程。作为Intel RealSense系列中的明星产品,D435深度相机以其出色的性价比和易用性,成为开发…...

caffeine+redis实现多级缓存解决缓存雪崩

废话不多说直接上代码&#xff1a;1.依赖<dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId><version>2.9.3</version></dependency>这里版本java8所以用的2.9.32.配置类&#…...

凌扬微优势代理 LY3206S / LY3206L 多模式电机驱动芯片 SOP8 技术解析

在剃须刀、理发剪、毛球修剪器等便携式马达产品中&#xff0c;需要一款集成锂电池充电管理、电机驱动、多种档位模式&#xff08;1/2/3档&#xff09;以及使能控制的芯片&#xff0c;以简化电路设计并满足不同产品需求。LY3206是一款集成了锂电池充电管理模块、电机驱动模块、续…...

Harness层数据清洗自动化

Harness层数据清洗自动化:解放数据团队生产力的核心方案 开篇引子 上周我帮一家年GMV超20亿的电商客户排查数据故障,他们的数仓团队反馈连续3天的用户订单报表交易额比实际支付金额少了1200万,排查了3个小时才定位到根因:新接入的外卖业务系统的订单状态字段新增了枚举值6…...

别再乱点鼠标了!用netsh advfirewall命令搞定Windows防火墙,效率翻倍(附常用场景命令清单)

Windows防火墙命令行实战&#xff1a;netsh advfirewall高阶应用指南 每次看到同事在图形界面里一层层点击"控制面板→系统和安全→Windows Defender防火墙→高级设置"时&#xff0c;我都忍不住想递给他一个命令行窗口。作为IT运维老手&#xff0c;我早已习惯用netsh…...

如何在Windows上轻松安装APK文件:告别模拟器的完整指南

如何在Windows上轻松安装APK文件&#xff1a;告别模拟器的完整指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经想要在Windows电脑上直接运行Android应用…...

服装吊牌变量条码打印机:优质供应商选择策略解析

“选对服装吊牌变量条码打印机供应商&#xff0c;比单纯比价更重要的是匹配柔性生产需求——这是超六成服装从业者反馈的采购核心准则。”中小商家面临小批量吊牌外发成本高、出货慢的困境&#xff0c;大企业则受限于多SKU适配难、数据不同步的痛点&#xff0c;如何找到能覆盖全…...

Primr:开源AI研究代理,35分钟自动生成公司深度战略分析报告

1. 项目概述&#xff1a;Primr&#xff0c;一个将公司网站转化为深度战略分析的AI研究代理 如果你做过公司研究、市场分析或者投资尽调&#xff0c;你肯定知道那有多痛苦。打开浏览器&#xff0c;输入公司网址&#xff0c;在“关于我们”、“产品”、“新闻”和“博客”之间来…...

终极指南:在Windows上免模拟器安装安卓应用的创新方案

终极指南&#xff1a;在Windows上免模拟器安装安卓应用的创新方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer APK Installer 是一款专为Windows系统设计的安卓应用…...

静态前端项目实战:从营销页到现代化门户的架构与实现

1. 项目概述&#xff1a;一个纯粹的静态前端项目最近在GitHub上看到了一个名为“Vibe Code”的项目&#xff0c;它的README写得非常漂亮&#xff0c;充满了各种炫酷的特性介绍&#xff0c;比如支持Claude Code、OpenAI Codex等AI编程助手&#xff0c;还有深色/亮色主题切换、多…...

嵌入式调试进阶:JScope RTT模式移植与性能实测(对比HSS,速度提升千倍)

嵌入式调试革命&#xff1a;JScope RTT模式深度优化与高频数据采集实战 在电机控制、电源管理和高速信号处理等嵌入式应用场景中&#xff0c;开发人员经常需要实时监控关键变量的变化趋势。传统调试工具往往面临采样率低、数据延迟大等问题&#xff0c;而SEGGER JScope的RTT模式…...

别再让数码管显示拖垮你的51单片机!频率计项目中CPU时间分配的优化实战

51单片机频率计项目中的CPU时间优化艺术&#xff1a;从阻塞式刷新到状态机重构 当你在深夜调试51单片机频率计项目时&#xff0c;是否经历过这样的绝望时刻——测量数据明明准确&#xff0c;但数码管显示却闪烁不定&#xff1b;或者当输入信号频率升高时&#xff0c;整个系统突…...

GitHub Enterprise MCP服务器:企业级代码管理的AI智能助手

1. 项目概述&#xff1a;当GitHub Enterprise遇上MCP&#xff0c;企业级代码管理的“智能副驾”最近在折腾企业内部的开发工具链&#xff0c;发现一个痛点&#xff1a;我们团队重度依赖GitHub Enterprise Server&#xff08;GHES&#xff09;进行代码托管和协作&#xff0c;但日…...

Jira、ONES、ClickUp 对比:哪款研发管理软件更适合中国研发团队?

快速迭代的互联网和软件行业&#xff0c;研发团队的效率管理工具几乎决定了产品交付的速度与质量。研发管理软件不仅是“任务分派”的工具&#xff0c;更是团队 需求管理、版本迭代、缺陷跟踪、研发效能度量 的基础设施。 目前市面上主流的研发管理软件众多&#xff0c;不同工…...

OpenClaw集成xAI Grok模型:一键配置与API兼容性解析

1. 项目概述&#xff1a;为OpenClaw解锁xAI Grok模型支持 如果你和我一样&#xff0c;既是OpenClaw的忠实用户&#xff0c;又对xAI推出的Grok系列模型&#xff08;特别是Grok 4.1&#xff09;的强大推理能力垂涎已久&#xff0c;那么之前肯定也卡在了同一个地方&#xff1a;Ope…...

2026年十大主流需求管理工具深度测评:哪款更适合你的研发团队?

在软件研发日益复杂化、团队协作边界不断拓展的今天&#xff0c;需求管理不仅是产品经理的基本功&#xff0c;更是整个产品生命周期管理的“神经中枢”。你是否经历过这些问题&#xff1a;版本上线后&#xff0c;发现遗漏了某个关键需求&#xff1f;需求记录散落在 Excel、微信…...

AI智能体集成Telegram:双模式MCP服务器原理与实战部署

1. 项目概述 如果你正在为你的AI助手&#xff08;比如Claude、Cursor的Composer&#xff0c;或者其他支持MCP协议的智能体&#xff09;寻找一个功能强大、接入灵活的Telegram集成方案&#xff0c;那么你很可能已经厌倦了那些功能单一、配置复杂的传统机器人框架。今天要聊的这…...

Illustrator脚本革命:7个必备工具彻底改变你的设计工作流

Illustrator脚本革命&#xff1a;7个必备工具彻底改变你的设计工作流 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 你是否还在Adobe Illustrator中重复着枯燥的手工操作&#xff…...

如何免费获取Book118文档?这个Java工具让你轻松下载完整PDF

如何免费获取Book118文档&#xff1f;这个Java工具让你轻松下载完整PDF 【免费下载链接】book118-downloader 基于java的book118文档下载器 项目地址: https://gitcode.com/gh_mirrors/bo/book118-downloader 你是否曾经在Book118网站上找到了一份急需的学习资料&#x…...

基于插件化架构的OBS实时音乐信息集成系统技术解析

基于插件化架构的OBS实时音乐信息集成系统技术解析 【免费下载链接】tuna Song information plugin for obs-studio 项目地址: https://gitcode.com/gh_mirrors/tuna1/tuna Tuna是一款面向OBS Studio的高性能插件化实时音乐信息集成系统&#xff0c;采用模块化架构设计&…...

加拿大无人机产业:从感知到执行的自主化跃迁与BVLOS破局

1. 加拿大无人机产业的现状与挑战提起无人机&#xff0c;很多人脑海里首先蹦出来的可能是大疆&#xff0c;那个在全球消费级和部分商用市场占据绝对主导地位的中国品牌。这确实是一个不争的事实&#xff0c;也是加拿大本土无人机产业必须直面的现实。我接触过不少加拿大的初创公…...

告别混乱!用Cadence Allegro SPB17.4从DXF文件创建PCB封装的完整清洁流程

告别混乱&#xff01;用Cadence Allegro SPB17.4从DXF文件创建PCB封装的完整清洁流程 在PCB设计领域&#xff0c;从机械图纸&#xff08;DXF&#xff09;快速创建精确的封装是工程师常面临的挑战。许多设计师都经历过这样的困扰&#xff1a;导入DXF后&#xff0c;封装在3D预览中…...