Docker 入门学习|搞懂容器生态与基础原理
✨摘要:很多同学上手 Docker 就敲命令,结果越学越混乱。本篇笔记从容器生态全景入手,理清容器各个组件,再搞懂容器是什么、为什么要用容器,对比容器与虚拟机差异,拆解 Docker C/S 架构。适合运维、云计算初学者,看完建立容器全局认知,为后续镜像、容器实操打下理论基础。
前言
初学 Docker,不建议上来就死记命令。 如果连整个容器领域有哪些技术、组件分别干什么都分不清,敲再多实操命令,遇到问题依旧一头雾水。
今天整理教案前两章学习笔记,先鸟瞰容器整个生态,再搞懂容器的What / Why / How,把底层逻辑捋顺,再动手做实验,学习效率会高很多。
一、容器生态系统
容器技术继大数据、云计算之后,已经成为 IT 行业必备技能。Docker 的出现把容器真正推向大规模生产使用。
整个容器生态可以划分为容器核心技术、容器平台技术、容器支持技术三大板块。
🔧 容器核心技术:让容器在单机跑起来
核心技术解决的问题:在单台宿主机上,容器如何能够正常运行。
- OCI 开放容器规范 OCI 是由 Docker、Google、CoreOS 等厂商共同成立的组织,制定两套标准:运行时规范、镜像格式规范。 有了统一规范,不同厂商的容器镜像可以互相运行,保证镜像的可移植性。像 docker、podman、rkt、containerd 都遵循 OCI 规范。
- 容器 Runtime(运行时) Runtime 和 Linux 内核深度交互,给容器提供运行环境,类比 Java 里面的 JVM。
lxc:老牌 Linux 容器运行时,Docker 早期底层依赖它runc:Docker 自研,符合 OCI 标准,现在 Docker 默认 runtimerkt:CoreOS 出品,兼容 Docker 镜像
- 容器管理工具 Runtime 只负责底层运行,管理工具对外提供 CLI 交互,供人操作容器。
- lxc → lxd
- runc → docker engine(就是我们平时说的 Docker,包含后台 daemon 守护进程 + cli 命令行)
- rkt → rkt cli
- 容器定义工具 用来定义容器内容、属性,实现镜像保存、分享、重建。
docker image:Docker 的容器模板Dockerfile:文本脚本,自动化构建镜像ACI:rkt 使用的镜像格式
- Registries 镜像仓库 专门存放镜像的仓库,是镜像分发的载体。
- Docker Registry:可自建私有镜像仓库
- Docker Hub:全球最大的公共镜像仓库
- Quay.io:知名公共托管仓库
- 容器 OS 专门为容器场景裁剪的操作系统,体积小、启动速度快。 代表系统:CoreOS、atomic、ubuntu‑core。
☁️ 容器平台技术:实现多机器集群能力
核心技术只能搞定单台服务器;平台技术面向分布式集群,应对微服务大规模部署场景。
- 容器编排引擎 微服务架构下,成百上千个容器会动态创建、销毁、迁移。编排引擎负责集群调度、容器管理、服务发现。 主流产品:
- Docker Swarm:Docker 官方编排方案
- Kubernetes (K8s):谷歌开源,目前行业事实标准
- Mesos+Marathon:通用资源调度平台
- 容器管理平台 封装编排引擎底层细节,提供 WebUI、一键部署、应用目录,降低使用门槛。 代表:Rancher、ContainerShip
- 基于容器的 PaaS 面向开发人员,屏蔽底层基础设施,开发者只需要专注业务代码。 代表:Deis、Flynn、Dokku
🛠️ 容器支持技术:集群配套能力
属于生态的配套组件,保障容器集群稳定运行。
- 容器网络:解决容器之间、容器与外部网络连通隔离。方案:docker 原生 network、flannel、weave、calico
- 服务发现:容器 IP 会动态变化,服务发现让客户端能够找到服务;工具:etcd、consul、zookeeper
- 监控:采集容器 CPU、内存状态;docker 自带 ps/top/stats、sysdig、cAdvisor、Weave Scope
- 数据管理:解决容器跨主机迁移时持久化数据
- 日志管理 :收集容器运行日志,
docker logs、logspout - 安全:镜像漏洞扫描工具 Open SCAP
💻 实验实操小结(CentOS Stream8)
-
克隆虚拟机模板,配置静态 IP,配置阿里云 Docker YUM 源
-
安装 docker‑ce,设置开机自启
systemctl enable docker.service --now
-
配置镜像加速器(阿里云 / 华为云 SWR) 修改
/etc/docker/daemon.json写入镜像加速地址,重载配置重启 docker,执行docker info确认加速器配置生效。 -
第一个容器测试
docker run hello-world
执行逻辑:本地无镜像 → 远程仓库拉取镜像 → 创建并运行容器输出信息。
-
运行 httpd Web 容器
docker run -d -p 80:80 httpd
浏览器访问宿主机 IP,看到It works!即代表 Web 容器正常。
Docker C/S 分离实验
Docker 本身就是 C/S 架构:客户端只发指令,服务端真正管理容器与镜像。
- Server 服务端:192.168.108.30,修改 docker.service 开启 2375 远程监听端口
- Client 客户端:192.168.108.31,仅安装 docker‑ce‑cli 客户端,不部署完整 Docker 服务
客户端远程操作服务端示例:
docker -H 192.168.108.30 run hello-world
⚠️重点:镜像、容器全部保存在 Server 服务端,Client 仅仅发送控制命令。
二、容器 What Why How,读懂容器本质
📜容器发展简史
容器不是 Docker 发明的,它是 Linux 内核技术多年迭代的产物。
- 1979 chroot jail:最早实现进程根目录隔离
- FreeBSD Jail、Solaris Zones:完善操作系统级隔离
- cgroups:谷歌提出,实现进程 CPU / 内存资源限制,合并进 Linux 内核
- LXC:第一个完整 Linux 容器管理器,基于 namespace + cgroups
- 2013 Docker 诞生:优化用户体验,后期替换底层为 runc/libcontainer
- OCI 规范诞生,容器行业走向标准化
🤔 What:到底什么是容器?
容器是一种轻量级、可移植、自包含的软件打包技术 。 把应用程序 + 全部依赖库打包,一份包可以在开发电脑、测试服务器、物理机、公有云上面不加修改直接运行。
容器运行在宿主机的用户空间,本质上是一组被内核隔离的进程,共享宿主机 Linux 内核。
🆚容器 VS 虚拟机对比
很多初学者会把容器和虚拟机搞混,两者底层实现完全不一样。
表格
| 对比维度 | 虚拟机 | Docker 容器 |
|---|---|---|
| 内核 | 拥有独立完整内核,依赖 Hypervisor 虚拟化 | 共享宿主机 Host 内核 |
| 启动速度 | 分钟级 | 秒级甚至毫秒级启动 |
| 隔离级别 | 硬件级强隔离 | 进程级别隔离(Namespace + Cgroups) |
| 资源开销 | 开销大,每台虚拟机完整操作系统 | 开销极小,只是宿主机普通进程 |
| 单机可运行数量 | 几十台 | 单机支持上千容器 |
| 磁盘占用 | GB 级别 | MB 级别 |
| 镜像特点 | 完整操作系统镜像 | 分层只读镜像 |
| 适用场景 | 需要不同内核、强硬件隔离场景 | 微服务、DevOps、环境一致性交付 |
一句话理解差异:虚拟机是虚拟一整套硬件;容器只是隔离进程,复用宿主机内核。
❓ Why 为什么我们需要容器?
传统开发运维的巨大痛点: 现在业务系统大量微服务化,一套系统包含数据库、缓存、消息队列等众多组件。 同时部署环境五花八门:开发本机、QA 测试环境、私有机房、公有云。
于是形成一个恐怖矩阵:N个服务 × M套环境。经常出现 "本地电脑可以跑,线上环境就报错",环境差异问题消耗大量人力。
💡现实世界的启发:集装箱 过去各类货物运输,装卸转运成本极高;集装箱统一标准,不管里面装什么货物,卡车、火车、轮船都可以统一搬运。
Docker 借鉴集装箱的思想:把应用连同所有依赖打包成 "软件集装箱"。
- 👨💻开发者:Build Once,Run Anywhere。一次构建,到处运行。开发环境打包,测试、生产直接复用,消除环境差异。
- 👷运维:Configure Once,Run Anything。维护一套标准运行环境,各类业务容器直接运行,部署可复现。
🛠️ How:Docker 架构如何工作?
Docker 是典型的C/S 客户端‑服务端架构
- Docker Client(客户端) :我们敲的
docker命令,是交互入口,可以本地,也可以远程连接服务端。 - Docker Daemon(dockerd 守护进程):后台服务,真正干活。管理镜像、容器、网络、存储卷,接收 REST API 请求完成各类操作。
- Registry 镜像仓库:存放镜像,用于镜像分发,Docker Hub 为公共仓库,企业可以搭建私有仓库。
- Image 镜像 :只读模板,是创建容器的原材料。
- Container 容器:镜像运行后的实例,拥有可读写层。
docker run 完整流程
- 用户在客户端执行
docker run - Client 发送 API 请求给到 dockerd 守护进程
- daemon 检查本地是否存在需要的镜像
- 本地没有镜像,则去 Registry 拉取镜像保存本地
- 在只读镜像之上叠加可读写容器层,启动应用程序。
📌三大核心概念通俗记忆
- 镜像 (image):软件只读安装包(ISO)
- 容器 (container):镜像启动后的运行实例(开机运行的系统)
- 仓库 (registry):镜像下载存放平台(软件商店)
✨本章小结
通过前两章的学习,我们不再只停留在敲命令层面。
- 容器生态分为核心、平台、支持技术,清楚 OCI、runtime、编排引擎等组件各自定位;
- 容器本质不是虚拟机,是 Linux 内核 Namespace+Cgroups 实现的隔离进程,共享宿主机内核;
- Docker 采用 C/S 架构,分清客户端与守护进程职责,理解镜像、容器、仓库三者关系。
后续预告:下一章学习 Docker 镜像分层原理,Dockerfile 编写与镜像构建实操。