Skip to content

Docker 简介

什么是 Docker

Docker 是一个开源的容器化平台,允许开发者将应用程序及其所有依赖项打包到一个轻量级、可移植的容器中。这些容器可以在任何支持 Docker 的环境中一致地运行,从而解决了"在我机器上能运行"的经典问题。

Docker 由 Solomon Hykes 于 2013 年创建,最初作为 dotCloud 公司的内部项目,后来开源并迅速成为容器化技术的事实标准。

为什么需要 Docker

传统部署的痛点

在 Docker 出现之前,应用部署面临诸多困境:

  • 环境不一致:开发、测试、生产环境配置各异,"在我这里能跑"成为常见问题
  • 依赖冲突:同一服务器运行多个应用,不同版本的依赖互相干扰
  • 部署复杂:需要手动安装依赖、配置环境,步骤繁琐易出错
  • 资源浪费:虚拟机方式隔离性好但开销大,每个 VM 都需要完整的操作系统
  • 扩展困难:应用扩容需要重复复杂的部署过程

Docker 的解决方案

问题Docker 解决方式
环境不一致容器打包所有依赖,环境一致性保障
依赖冲突容器相互隔离,依赖各自独立
部署复杂镜像一次构建,随处部署
资源浪费容器共享内核,开销远小于虚拟机
扩展困难秒级启动,快速水平扩展

Docker 的核心价值

1. 构建(Build)

将应用程序和其运行环境一起打包成 Docker 镜像,包含代码、运行时、系统工具、系统库等一切所需内容。

2. 共享(Share)

通过 Docker Hub 或私有镜像仓库分享镜像。团队成员拉取同一镜像,确保运行环境完全一致。

3. 运行(Run)

在任何安装了 Docker 的机器上运行容器,无论是开发者笔记本、测试服务器还是云平台,行为完全一致。

Docker 的应用场景

微服务架构

将大型单体应用拆分为多个独立的微服务,每个服务运行在独立容器中,可以独立开发、部署和扩展。

持续集成/持续部署(CI/CD)

在 CI/CD 流水线中使用 Docker,确保构建和测试环境的一致性,加快交付速度。

开发环境统一

团队成员使用相同的 Docker 镜像搭建开发环境,新成员一条命令即可完成环境配置。

多版本共存

同一主机上同时运行 Node.js 14、16、18 等不同版本,互不干扰。

快速原型验证

快速启动各种数据库、中间件用于原型开发,不污染本机环境,用完即删。

Docker 与虚拟机的对比

虚拟机                          Docker 容器
┌─────────────────────┐         ┌─────────────────────┐
│   App A   │  App B  │         │   App A   │  App B  │
├───────────┼─────────┤         ├───────────┼─────────┤
│ Guest OS  │Guest OS │         │  Libs     │  Libs   │
├───────────┴─────────┤         ├───────────┴─────────┤
│     Hypervisor      │         │    Docker Engine     │
├─────────────────────┤         ├─────────────────────┤
│      Host OS        │         │      Host OS        │
├─────────────────────┤         ├─────────────────────┤
│     Hardware        │         │     Hardware        │
└─────────────────────┘         └─────────────────────┘
特性虚拟机Docker 容器
启动时间分钟级秒级甚至毫秒级
磁盘占用GB 级别MB 级别
内存占用较大(含完整 OS)较小(共享宿主 OS 内核)
隔离性强(硬件级隔离)较强(进程级隔离)
可移植性一般优秀
性能略低于物理机接近物理机

Docker 的版本

Docker Engine

Docker 的核心,分为:

  • Docker CE(Community Edition):社区版,免费使用,适合个人开发者和小团队
  • Docker EE(Enterprise Edition):企业版,提供商业支持和高级功能

Docker Desktop

包含 Docker Engine、Docker CLI、Docker Compose 等的桌面应用,适合 Windows 和 macOS 开发者使用。

总结

Docker 通过容器化技术彻底改变了软件的开发、交付和运行方式。它的核心思想是"一次构建,随处运行",使应用程序能够在任何环境中以相同的方式运行。

下一节将深入介绍 Docker 的核心概念,帮助你建立完整的知识体系。