外观
2. Docker 简介
2.1 Docker 的发展历史
Docker 作为容器化技术的代表性工具,其发展历程深刻影响了现代软件部署和运维模式。
2.1.1 起源与早期发展
- 2010 年:Solomon Hykes 创立 dotCloud 公司,最初专注于 Platform as a Service (PaaS) 解决方案。
- 2013 年:Docker 项目正式发布,通过将 Linux 容器技术包装成易用的工具,降低了容器技术的使用门槛。
Docker 的诞生背景
在 Docker 出现之前,容器技术已经存在多年(如 Linux Containers - LXC),但使用复杂,需要深厚的系统知识。Docker 通过提供简单的命令行工具和镜像系统,实现了容器技术的普及化。
2.1.2 快速发展与生态建设
- 2014 年:Docker 开源项目快速发展,社区活跃度迅速提升。
- 2015 年:Docker 公司更名为 Docker Inc.,标志着容器技术的商业化进程加速。
- 2016-2018 年:Docker 与 Kubernetes 等编排工具共同推动了云原生生态的形成。
Docker 的核心价值
Docker 通过标准化容器格式和简化的操作流程,大大降低了应用打包、分发和部署的复杂度,被称为"容器化革命"的重要推手。
2.2 Docker 的核心概念
Docker 的核心在于三个基本概念:镜像(Images)、容器(Containers)和仓库(Registries)。这三个概念构成了 Docker 生态的基础,理解它们之间的关系是掌握 Docker 的关键。
2.2.1 镜像(Images)
Docker 镜像是容器化应用的核心,是一个只读的模板文件,包含了运行应用所需的所有组件。
镜像的组成要素:
- 应用代码:业务逻辑的源代码
- 运行时环境:如 JDK、Node.js、Python 等运行时
- 系统依赖:操作系统层面的库文件和工具
- 环境变量和配置文件:应用运行所需的配置信息
镜像的层次结构
Docker 镜像是分层的,每一层都是只读的。当需要修改时,会在现有镜像基础上创建新的层。这种设计既保证了镜像的可重用性,又提供了灵活的定制能力。
2.2.2 容器(Containers)
容器是镜像的运行实例,是 Docker 实际执行应用的地方。与虚拟机不同,容器共享宿主机的操作系统内核,但拥有独立的进程空间和文件系统。
容器的特性:
- 轻量化:启动速度快,资源占用少
- 隔离性:进程、文件系统、网络相互独立
- 可写层:在镜像只读层之上提供可写容器层,用于存储运行时数据
容器与镜像的关系
容器必须基于镜像创建,但容器运行过程中的修改不会影响原始镜像。如果需要保存修改,需要通过 docker commit 创建新的镜像。
2.2.3 仓库(Registries)
仓库是 Docker 镜像的存储和分发中心,类似于代码的 Git 仓库,但专门用于容器镜像。
仓库的类型:
- 公共仓库:如 Docker Hub,提供官方和社区镜像
- 私有仓库:企业内部搭建,用于存储 proprietary 镜像
- 镜像加速器:如国内的阿里云、腾讯云镜像加速服务
仓库使用建议
在国内使用 Docker 时,建议配置镜像加速器(如 registry.cn-hangzhou.aliyuncs.com),可以显著提升镜像拉取速度。
2.3 核心概念关系图
以下图表展示了 Docker 三个核心概念之间的关系和数据流:
图表说明:
- 蓝色节点 (Images):表示镜像,是静态的模板
- 紫色节点 (Containers):表示容器,是动态的运行实例
- 绿色节点 (Registries):表示仓库,是镜像的存储中心
主要关系:
- 构建关系:镜像通过
docker build从 Dockerfile 创建,或通过docker commit从容器提交 - 运行关系:容器必须基于镜像启动(
docker run) - 分发关系:镜像可以通过
docker push/pull在仓库和本地之间传输
重要提醒
容器是临时性的,停止容器后其中的数据会丢失。如需持久化数据,请使用数据卷(Volumes)或绑定挂载(Bind Mounts)。