Docker 是一个开源的应用容器引擎,基于 Go 语言开发 1。它允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中,从而实现“一次构建,到处运行”的目标。
1. Docker 的起源与发展
Docker 最初是基于 Linux 的 LXC(Linux Containers)技术开发的。
- Moby 项目:2013 年 Docker 项目开源,2017 年 Docker 公司将开源项目更名为 Moby。
- 版本划分:Docker 分为 Docker EE(企业版)和 Docker CE(社区版),其中社区版主要基于 Moby 项目构建。
2. Docker 的核心架构
Docker 采用 C/S(客户端/服务器)架构。
-
Docker Client:客户端,用户通过它发送
docker run、docker build等命令与 Docker 服务交互。 -
Docker Daemon:后台守护进程,由 Docker Server 和 Engine 组成,负责监听 API 请求并管理镜像、容器、网络和数据卷。
-
Docker Registry:镜像仓库,类似于代码仓库 Git。最知名的公共仓库是 Docker Hub 。
3. 三大核心概念
认识 Docker,必须理解其三个基本组成部分:
- 镜像 (Image) :类似于虚拟机的模板或 Java 中的“类”,是一个只读的文件系统,包含运行应用所需的代码、环境和配置文件。
- 容器 (Container) :镜像运行时的实体,类似于 Java 中的“对象”。容器可以被创建、启动、停止和删除,且相互之间是隔离的。
- 仓库 (Registry) :集中存放镜像文件的地方。用户可以通过
push将镜像上传到仓库,通过pull将镜像下载到本地。
4. 容器与虚拟机的区别
Docker 容器相较于传统虚拟机(VM)具有显著优势:
- 轻量级:容器不需要内置操作系统内核,而是共用宿主机的内核,因此启动速度极快。
- 高效利用资源:由于没有 OS 的开销,同一台机器上可以运行比虚拟机多得多的容器实例。
- 一致性:确保了应用在开发、测试和生产环境中的运行环境完全一致。
5. 为什么开发者都需要 Docker?
无论你使用的是哪种编程语言或技术栈,Docker 都能提供核心价值:
- 环境标准化(打包环境):Docker 将应用所需的底层操作系统组件、依赖库及应用代码完整打包 。这意味着你不再需要手动在生产服务器上配置复杂的底层环境 。
- 交付物统一化(简化流程):开发者交付的不再仅仅是代码,而是一个开箱即用的镜像 。
- 极速部署:容器共享宿主机内核,不需要像虚拟机那样加载整个操作系统,因此可以在秒级启动,极大地提高了生产力和服务器资源利用率 。
- 多环境一致性:确保应用从开发者的笔记本到测试环境,再到生产环境,运行表现完全一致 。