Docker 是一个开源的应用容器引擎,基于 Go 语言开发,遵循 Apache 2.0 协议。它能将应用及其依赖环境、配置文件等打包成一个标准化、可移植的容器镜像,实现应用在不同环境下的一致性运行,解决了“在我电脑上能跑,在服务器上不行”的环境差异问题。
一、核心概念
Docker 的核心围绕镜像、容器、仓库三大基础组件,以及用于编排多容器的 Docker Compose 展开。
镜像
是一个只读的静态模板,包含应用运行所需的完整文件系统、依赖库、环境变量和启动指令,采用分层存储结构,可复用、可通过 Dockerfile 构建。
容器
是镜像的运行实例,基于镜像创建,具备独立的进程空间、网络和文件系统,通过 Linux Namespace 实现资源隔离,Cgroups 限制 CPU、内存等资源占用,启动速度快、资源占用低,可随时启动、停止、删除。
仓库
用于集中存储和分发镜像,分为公共仓库(如 Docker Hub)和私有仓库(如 Harbor),支持镜像的上传、拉取和版本管理。
Docker Compose
是用于定义和运行多容器应用的工具,通过 YAML 文件配置多个容器的依赖、网络、数据卷等,实现一键启动、停止和管理多容器服务。
二、核心优势
环境一致性
容器打包了所有依赖,开发、测试、生产环境使用同一镜像,避免环境配置差异导致的问题。
轻量高效
共享宿主机操作系统内核,无需运行完整虚拟机系统,启动速度秒级,资源占用仅 MB 级,支持高密度部署。
可移植性强
容器镜像可在任何支持 Docker 的平台(Linux、Windows、macOS、云服务器)运行,实现“一次构建,处处运行”。
隔离性好
容器间相互隔离,进程、网络、文件系统互不干扰,避免应用间依赖冲突,提升安全性。
适配 DevOps
通过 Dockerfile 实现镜像构建标准化,可与 Jenkins、GitLab CI 等 CI/CD 工具集成,实现应用的自动化构建、测试、部署。
三、架构与组件
Docker 采用客户端-服务器(C/S)架构,核心组件包括:
Docker 守护进程(dockerd)
运行在宿主机后台,负责管理镜像、容器、网络、数据卷等核心操作,接收客户端指令并执行。
Docker 客户端(docker CLI)
用户与 Docker 交互的命令行工具,通过命令或 REST API 向守护进程发送操作请求。
Docker 引擎
整合守护进程、API 接口和客户端的核心运行环境,是 Docker 的基础支撑。
Docker Desktop
面向 Windows 和 macOS 开发者的桌面端工具,集成 Docker 引擎、Compose、Kubernetes 等,简化本地开发环境搭建。
四、应用场景
应用打包与分发
将应用及依赖打包为镜像,快速部署到不同环境,简化部署流程。
微服务部署
每个微服务封装为独立容器,实现服务解耦、独立扩展和运维,结合 Kubernetes 实现大规模容器编排。
CI/CD 流程集成
作为 CI/CD 流程的核心环节,实现应用构建、测试、发布的自动化,提升交付效率。
开发环境标准化
团队共享统一镜像,快速搭建一致的开发环境,减少环境配置耗时。
云原生应用支撑
作为云原生应用的基础载体,适配云平台的弹性伸缩、故障自愈等特性,助力云原生转型。
五、与虚拟机的区别
Docker 属于操作系统级虚拟化,共享宿主机内核,启动快、资源占用低,隔离性为进程级;虚拟机属于硬件级虚拟化,通过 Hypervisor 模拟硬件,运行完整操作系统,启动慢、资源占用高,隔离性更强,可运行不同操作系统。