Docker 从入门到精通:原理、实战与生产运维全攻略
第九章Docker 原理深入从会用到真正懂docker基础自己的docker前面我们一直在讲怎么使用 Docker。现在开始讲Docker 为什么能做到这些如果你想成为 Docker 高手这一章必须理解。1. Docker 的整体架构先看 Docker 内部结构id3qz3rd 用户 | | docker 命令 | ↓ Docker Client | | Docker API | ↓ Docker Daemon | ---------------- | | ↓ ↓ containerd 镜像管理 | ↓ runc | ↓ Linux Kernel | ↓ Container我们逐个解释。2. Docker Client你平时输入docker run nginx这个docker就是客户端。它负责例如你输入docker ps实际上不是 docker 自己管理容器。它只是告诉 Docker 服务给我列一下容器。3. Docker Daemon核心Docker Daemon中文Docker 守护进程。它是真正干活的人。负责创建容器删除容器下载镜像管理网络管理 VolumeLinux 查看systemctl status docker看到dockerd就是它。4. containerd现在 Docker 不直接管理容器运行。中间有containerd它负责镜像管理容器生命周期结构Docker ↓ containerd ↓ runc ↓ Linux5. runc 是什么runc真正创建容器的程序。它根据 OCI 标准创建NamespaceCgroups文件系统最后产生Linux 进程。所以Docker 容器本质不是 Docker 创建的。而是Docker ↓ containerd ↓ runc ↓ Linux进程6. Docker 为什么能隔离容器核心Linux 内核技术。两个最重要NamespaceCgroups7. Namespace命名空间作用隔离视图。让一个进程看到的是自己的世界。例如普通 Linux执行ps aux看到PID 1 nginx PID 2 mysql PID 3 bash但是容器里面ps aux可能PID 1 nginx为什么因为Namespace 隔离了进程空间。8. Namespace 有哪些Linux 有多个 NamespacePID Namespace隔离进程。容器认为自己是 PID 1。例如宿主PID 5000 nginx容器PID 1 nginx实际上同一个进程。Network Namespace隔离网络。每个容器拥有独立网卡IP路由例如容器eth0 172.18.0.2Mount Namespace隔离文件系统。容器看到/bin /etc /usr但是和宿主不同。UTS Namespace隔离主机名。容器hostname输出mysql-containerUser Namespace隔离用户。例如容器 root不一定等于宿主 root。9. Cgroups资源限制Namespace解决“你看到什么”。Cgroups解决“你能用多少资源”。例如限制docker run \ --memory512m \ --cpus1 \ nginx背后就是 Cgroups。没有 Cgroups一个容器可能吃光CPU 内存 磁盘导致服务器崩溃。10. UnionFS 镜像分层原理这是 Docker 镜像核心。之前说镜像像千层蛋糕。为什么因为Union File System。例如DockerfileFROM ubuntu RUN apt install nginx COPY index.html /生成三层Layer 3 index.html ------------ Layer 2 nginx ------------ Layer 1 ubuntu启动容器增加一层Container Layer (可写) -------------- Layer 3 -------------- Layer 2 -------------- Layer 1重点镜像只读。容器增加可写层。11. 为什么删除容器数据消失因为数据在Container Writable Layer删除这一层消失。Volume为什么保存因为它在外部Container | Volume | Host Disk12. Docker 为什么启动快虚拟机启动BIOS ↓ 启动内核 ↓ 启动系统 ↓ 启动程序需要几十秒。Docker启动进程 ↓ 隔离环境 ↓ 运行几秒。因为没有启动完整操作系统。13. Docker 镜像为什么下载快原因三个1. 分层例如Ubuntu已经下载。Python镜像复用。2. 缓存Docker 保存Layer下一次不用重新下载。3. 并行下载多个 layer同时下载。14. 容器和普通进程区别很多人问Docker 容器是不是虚拟机不是。实际上普通程序 nginx ↓ Linux进程 Docker: nginx ↓ Linux进程 Namespace Cgroups Filesystem15. Docker 安全边界注意容器不是绝对安全。为什么因为共享Linux Kernel。如果Kernel 有漏洞可能突破。所以生产环境需要更新内核最小权限非 root 用户镜像扫描网络隔离16. Docker 和 Kubernetes 的关系很多人混淆。Docker负责运行容器。例如一台服务器 运行10个容器Docker 很舒服。但是100台服务器10000个容器。怎么办需要Kubernetes。关系Kubernetes 管理 ↓ Docker / containerd 运行 ↓ Containers17. Docker 到底解决了什么总结以前开发环境 Python版本不同 依赖不同 服务器不同 部署失败Docker程序 环境 依赖 ↓ 镜像 ↓ 哪里都能运行18. 高手必须掌握的 Docker 排错思路生产出问题不要乱试。按层排查第一层容器有没有运行docker ps第二层日志docker logs第三层进入容器docker exec -it第四层网络docker network inspect第五层资源docker stats第六层镜像docker inspect19. 到这里你的 Docker 知识体系现在基础 docker run docker ps ↓ 核心 Image Container Volume Network ↓ 开发 Dockerfile Compose ↓ 生产 部署 日志 优化 ↓ 原理 Namespace Cgroups containerd runc UnionFS第十章Docker 高级实战工程师级现在你已经不是 Docker 小白了。前面你掌握了Docker基础 ↓ 镜像 ↓ 容器 ↓ Volume ↓ Network ↓ Dockerfile ↓ Compose ↓ 底层原理这一章开始进入企业真实环境。目标能写生产级 Dockerfile能优化镜像能部署、维护、排查线上 Docker 服务。一、Docker 镜像优化企业必做很多新人写 DockerfileFROM ubuntu RUN apt update RUN apt install python COPY . CMD python app.py能运行。但是生产不合格。问题1. 镜像巨大Ubuntu70MB安装各种工具可能1GB2. 攻击面增加软件越多漏洞越多。3. 下载慢部署速度慢。生产目标小 快 安全二、选择合适基础镜像普通FROM ubuntu大小几百 MB。slim例如FROM python:3.12-slim特点删除很多无用工具。推荐生产常用。alpine例如FROM python:3.12-alpine非常小。但是有兼容问题。例如某些 Python 库需要 gcc。经验场景选择生产Pythonpython-slimJavatemurin-jreNodenode-slim极致优化alpine三、多阶段构建重点这是企业最常用技术。问题Java 项目。编译需要JDK Maven 源码 依赖但是运行只需要JRE jar包错误FROM maven COPY . RUN mvn package CMD java -jar app.jar结果镜像包含Maven源码编译工具巨大。多阶段# 第一阶段编译 FROM maven:3.9 AS build WORKDIR /app COPY . . RUN mvn package # 第二阶段运行 FROM eclipse-temurin:17-jre WORKDIR /app COPY --frombuild /app/target/app.jar . CMD [java,-jar,app.jar]结构阶段1 Maven 源码 ↓ app.jar 阶段2 JRE app.jar结果可能1GB ↓ 200MB四、Dockerfile 最佳实践1. 固定版本不要FROM python因为未来版本变化。推荐FROM python:3.12.5-slim2. 不使用 root默认容器root。风险攻击后权限过高。推荐FROM nginx RUN adduser app USER app3. 不安装无用工具不要RUN apt install vim生产不需要。4. 清理缓存例如错误RUN apt update RUN apt install nginx留下缓存。正确RUN apt update \ apt install -y nginx \ rm -rf /var/lib/apt/lists/*五、Docker 镜像安全扫描企业不会直接使用镜像。流程镜像 ↓ 扫描漏洞 ↓ 上线常见工具Trivy例如扫描trivy image nginx发现CVE漏洞为什么因为基础镜像可能包含漏洞软件。六、私有镜像仓库公司不会把所有镜像放 Docker Hub。通常自己搭私有 Registry。结构开发电脑 docker build ↓ 公司Registry ↓ 服务器pull例如镜像nginx变registry.company.com/shop/backend:v1七、Docker Registry 工作流程开发构建docker build -t backend:v1 .登录docker login打标签docker tag backend:v1 \ registry.com/backend:v1上传docker push registry.com/backend:v1服务器docker pull registry.com/backend:v1八、Harbor企业常用Harbor很多公司使用。它比普通 Registry 强提供用户管理权限控制镜像扫描审计Web界面结构开发 | docker push ↓ Harbor | docker pull ↓ 生产服务器九、Docker CI/CD 自动化真实公司不会每天手动docker build docker push而是自动。流程开发提交代码 ↓ Git ↓ CI系统 ↓ 自动测试 ↓ docker build ↓ 镜像仓库 ↓ 服务器部署例如代码git push自动1. 拉代码 2. 构建镜像 3. 扫描 4. 上传 5. 更新服务器十、GitLab CI 示例文件.gitlab-ci.yml例如build: script: - docker build -t app:v1 . - docker push app:v1提交代码自动执行。十一、Jenkins Docker传统企业大量使用。流程Git ↓ Jenkins ↓ Docker Build ↓ Docker Push ↓ 服务器部署十二、Docker 生产监控线上不能只看docker ps需要监控。关注CPUCPU使用率内存Memory网络流量容器状态是否重启命令docker stats企业常用PrometheusGrafana组成Docker ↓ Prometheus ↓ Grafana ↓ 监控面板十三、Docker 日志管理默认json-file长期可能撑爆磁盘。查看docker info限制daemon.json{ log-driver:json-file, log-opts:{ max-size:100m, max-file:3 } }意思单个日志最多100MB。保留3个文件。十四、Docker 健康检查问题容器运行不代表服务正常。例如容器 alive 但是 Java死循环添加DockerfileHEALTHCHECK CMD curl http://localhost:8080Composehealthcheck: test: - CMD - curl - localhost:8080效果Docker知道服务健康状态。十五、自动恢复生产一定restart: always例如服务器重启服务器开机 ↓ Docker启动 ↓ 容器自动启动常见restart: unless-stopped意思除非人为停止。十六、Docker 网络生产设计不要所有服务一个网络。推荐分层公网网络 | ↓ Nginx 内部网络 | ↓ Backend 数据库网络 | ↓ MySQL例如networks: frontend: backend: database:隔离。十七、Docker 数据备份策略数据库不能只靠 Volume。生产至少每日备份例如凌晨3点 mysqldump ↓ 备份文件异地备份例如服务器↓对象存储。十八、Docker 常见线上事故事故1磁盘爆满原因日志。解决docker system prune事故2容器不停重启查看docker ps然后docker logs事故3数据库数据丢失原因没有 Volume。事故4服务访问不了检查顺序docker psdocker logsdocker network inspect端口docker port十九、Docker 运维黄金流程上线代码提交 ↓ CI构建 ↓ Docker镜像 ↓ 漏洞扫描 ↓ 推送仓库 ↓ 服务器拉取 ↓ Compose更新 ↓ 监控观察二十、现在你的 Docker 能力等级大概初级会docker run docker ps docker pull中级会Dockerfile Volume Network Compose高级会镜像优化 安全 CI/CD 私有仓库 监控 生产部署你现在已经进入高级 Docker 使用者。

相关新闻

从会用 Docker 到会造 Docker:从零到企业级部署

从会用 Docker 到会造 Docker:从零到企业级部署

第六章:Dockerfile(从会用 Docker 到会造 Docker) docker基础 到这里,你已经掌握: Image 镜像↓ Container 容器↓ Volume 数据↓ Network 网络但是现在你还是主要在用别人做好的镜像: docker pull ngin…

2026/8/10 17:29:17 阅读更多 →
YOLOv8 AI自瞄:5分钟打造智能瞄准助手的终极指南

YOLOv8 AI自瞄:5分钟打造智能瞄准助手的终极指南

YOLOv8 AI自瞄:5分钟打造智能瞄准助手的终极指南 【免费下载链接】yolov8_aimbot Aim-bot based on AI for all FPS games 项目地址: https://gitcode.com/gh_mirrors/yo/yolov8_aimbot YOLOv8 AI自瞄是一款基于深度学习的智能瞄准辅助工具,专为F…

2026/8/10 17:29:17 阅读更多 →
Qiskit量子编程终极指南:从零开始掌握量子计算核心技能

Qiskit量子编程终极指南:从零开始掌握量子计算核心技能

Qiskit量子编程终极指南:从零开始掌握量子计算核心技能 【免费下载链接】qiskit Qiskit is an open-source SDK for working with quantum computers at the level of extended quantum circuits, operators, and primitives. 项目地址: https://gitcode.com/gh_m…

2026/8/10 17:29:17 阅读更多 →

最新新闻

QDomyos-Zwift 终极指南:智能健身设备与虚拟平台无缝桥接深度剖析

QDomyos-Zwift 终极指南:智能健身设备与虚拟平台无缝桥接深度剖析

QDomyos-Zwift 终极指南:智能健身设备与虚拟平台无缝桥接深度剖析 【免费下载链接】qdomyos-zwift Zwift bridge for smart treadmills and bike/cyclette 项目地址: https://gitcode.com/gh_mirrors/qd/qdomyos-zwift QDomyos-Zwift 是一款革命性的开源桥接…

2026/8/10 18:05:38 阅读更多 →
如何从零开始掌握soas:Android Material Design实战教程

如何从零开始掌握soas:Android Material Design实战教程

如何从零开始掌握soas:Android Material Design实战教程 【免费下载链接】soas Native Android "sample of all samples" for beginners and experienced, 14, with focus on lollipop and Material 项目地址: https://gitcode.com/gh_mirrors/so/soas …

2026/8/10 18:05:38 阅读更多 →
DevOps Interview Guide星标背后:为什么它是面试准备的必备资源

DevOps Interview Guide星标背后:为什么它是面试准备的必备资源

DevOps Interview Guide星标背后:为什么它是面试准备的必备资源 【免费下载链接】DevOps-Interview-Guide DevOps Interview Guide 项目地址: https://gitcode.com/GitHub_Trending/de/DevOps-Interview-Guide DevOps Interview Guide是一份2025-2026年真实…

2026/8/10 18:05:38 阅读更多 →
Godot XR Tools高级教程:实现攀爬、滑翔与世界抓取功能

Godot XR Tools高级教程:实现攀爬、滑翔与世界抓取功能

Godot XR Tools高级教程:实现攀爬、滑翔与世界抓取功能 【免费下载链接】godot-xr-tools Support scenes for AR and VR in Godot 项目地址: https://gitcode.com/gh_mirrors/go/godot-xr-tools Godot XR Tools是一款强大的开源工具集,专为Godot引…

2026/8/10 18:05:38 阅读更多 →
Adafruit_nRF52_Arduino硬件揭秘:nRF52832/840芯片特性与引脚配置

Adafruit_nRF52_Arduino硬件揭秘:nRF52832/840芯片特性与引脚配置

Adafruit_nRF52_Arduino硬件揭秘:nRF52832/840芯片特性与引脚配置 【免费下载链接】Adafruit_nRF52_Arduino Adafruit code for the Nordic nRF52 BLE SoC on Arduino 项目地址: https://gitcode.com/gh_mirrors/ad/Adafruit_nRF52_Arduino Adafruit_nRF52_A…

2026/8/10 18:05:38 阅读更多 →
无VR体验《半条命:Alyx》的终极指南:HLA-NoVR模组完整教程

无VR体验《半条命:Alyx》的终极指南:HLA-NoVR模组完整教程

无VR体验《半条命:Alyx》的终极指南:HLA-NoVR模组完整教程 【免费下载链接】HLA-NoVR NoVR mod for Half-Life: Alyx 项目地址: https://gitcode.com/gh_mirrors/hl/HLA-NoVR 还在为没有VR设备而无法体验《半条命:Alyx》这款VR独占大作…

2026/8/10 18:04:37 阅读更多 →

日新闻

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南 【免费下载链接】graphql-css A blazing fast CSS-in-GQL™ library. 项目地址: https://gitcode.com/gh_mirrors/gr/graphql-css GraphQL-CSS是一个基于GraphQL的CSS-in-GQL™库&#xff0…

2026/8/10 0:00:02 阅读更多 →
告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南 【免费下载链接】kiss-translator A simple, open source bilingual translation extension & Greasemonkey script (一个简约、开源的 双语对照翻译扩展 & 油猴脚本) 项目地址: https://gitcode.com/…

2026/8/10 0:00:02 阅读更多 →
BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案 【免费下载链接】BepInEx.ConfigurationManager Plugin configuration manager for BepInEx 项目地址: https://gitcode.com/gh_mirrors/be/BepInEx.ConfigurationManager 你是否曾经因为游戏插件的复杂…

2026/8/10 0:00:02 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/10 1:05:29 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/10 1:05:29 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/10 1:05:29 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/10 17:07:33 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/10 1:05:29 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/10 17:07:33 阅读更多 →