Docker 是一款基于 Go 语言开发的开源容器化平台,核心是将应用及其依赖、配置打包为独立、可移植的容器,实现“一次构建,处处运行”,彻底解决跨环境运行不一致的痛点,是 DevOps、微服务、云原生的核心基础设施。
一、核心概念(铁三角)
1. 镜像(Image)
- 定义:只读模板,包含应用代码、运行时、库、环境变量、配置等所有运行所需内容。
- 特性:分层存储(UnionFS),每层只读,修改仅新增层,体积小、复用性强、构建快。
- 类比:相当于“软件安装包/只读光盘”或“食谱”。
2. 容器(Container)
- 定义:镜像的可运行实例,是隔离、轻量的独立运行环境。
- 特性:共享宿主机内核,拥有独立进程、网络、文件系统;运行时加可写层,删除容器数据消失。
- 类比:相当于“运行中的软件/虚拟机”或“按食谱做出的菜”。
3. 仓库(Repository/Registry)
- 定义:集中存储、分发镜像的服务。
- 分类:
- 公开:Docker Hub(最大公共仓库)、阿里云镜像库。
- 私有:企业自建(Harbor),保障安全与合规。
- 类比:相当于“应用商店/代码仓库”。
二、Docker 架构(C/S 模式)
采用**客户端 - 服务器(C/S)**架构,组件协同完成容器全生命周期管理:
1. Docker Client(客户端)
- 用户交互入口(
docker命令行/API),发送build/run/pull等指令。
2. Docker Daemon(守护进程 dockerd)
- 后台服务,监听 API 请求,管理镜像、容器、网络、卷。
3. Docker Registry(仓库)
- 镜像存储分发中心(Docker Hub 等)。
4. Container Runtime(运行时)
- 底层执行引擎,默认
containerd+runC(OCI 标准),负责容器创建、运行。
三、底层核心技术(Linux)
Docker 依托 Linux 内核三大技术实现轻量隔离与资源管控:
1. Namespace(命名空间)
- 实现资源隔离:PID(进程)、NET(网络)、MNT(文件系统)、IPC、UTS、USER,让容器似独立 OS。
2. Cgroups(控制组)
- 限制/统计资源:CPU、内存、磁盘 I/O、带宽,防止资源争抢、保障稳定性。
3. UnionFS(联合文件系统)
- 分层存储:镜像多层只读,容器顶加可写层,修改不影响底层,共享层、体积小、启动快。
四、Docker vs 传统虚拟机(VM)
| 特性 | Docker 容器 | 虚拟机(VM) |
|---|---|---|
| 底层 | 共享宿主机 OS 内核 | 独立 Guest OS |
| 体积 | 轻量(MB 级) | 厚重(GB 级) |
| 启动 | 秒级 | 分钟级 |
| 性能 | 接近原生 | 有 Hypervisor 损耗 |
| 密度 | 单机数十/百个 | 单机数个 |
| 隔离性 | 进程级(弱) | 硬件级(强) |
| 移植性 | 极强(跨 Linux/Windows) | 弱(与 Hypervisor 绑定) |
五、核心优势
- 环境一致:开发→测试→生产完全一致,根除“在我电脑能跑”问题。
- 极致轻量:秒级启动、资源占用低,硬件利用率大幅提升。
- 跨平台移植:本地、物理机、虚拟机、各类云平台无缝运行。
- 高效 CI/CD:快速构建、测试、部署,适配敏捷与 DevOps 流程。
- 微服务支撑:服务独立容器化,独立扩缩、升级、维护,耦合度低。
- 版本与复用:镜像版本化,基础镜像(Nginx/MySQL)高度复用。
六、主流应用场景
- 开发环境标准化:团队共用镜像,一键搭建环境,无配置差异。
- 持续集成/持续部署(CI/CD):Jenkins/GitLab CI 流水线自动构建、测试、部署。
- 微服务架构:单体拆分为多容器微服务,独立迭代、弹性扩缩。
- 混合/多云部署:应用跨云迁移、统一管理,无厂商锁定。
- 快速环境复制:测试、预发、沙箱环境秒级复制、销毁。
- 遗留应用迁移:老旧应用容器化,平滑上云、降低改造难度。
- 大数据/AI:统一算法、依赖环境,跨机器可复现训练结果。
七、常用核心命令
# 镜像操作
docker pull nginx # 拉取镜像
docker images # 查看本地镜像
docker build -t app . # Dockerfile 构建镜像
docker rmi nginx # 删除镜像
# 容器操作
docker run -d -p 80:80 nginx # 后台运行并映射端口
docker ps # 查看运行容器
docker exec -it 容器ID bash # 进入容器
docker stop/start 容器ID # 停止/启动
docker rm 容器ID # 删除容器
# 仓库
docker push 用户名/镜像名 # 推送镜像到仓库
docker login # 登录仓库
八、Docker 生态
- Docker Compose:单文件(YAML)定义多容器应用,一键启动/停止。
- Docker Swarm:Docker 原生容器集群管理(轻量)。
- Kubernetes (K8s):主流容器编排,大规模容器集群调度、高可用、弹性扩缩。
- Harbor:企业级私有镜像仓库,安全、权限、漏洞扫描。
九、总结
Docker 以容器化重构软件交付,核心价值是标准化、一致性、轻量、可移植,打通开发 - 测试 - 部署全流程,是现代 IT 架构(微服务、云原生、DevOps)的基石。掌握 Docker 已成为研发、测试、运维的必备技能。