第一节:认识 Docker:开启容器化技术的大门

25 阅读3分钟

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 rundocker build 等命令与 Docker 服务交互。

  • Docker Daemon:后台守护进程,由 Docker ServerEngine 组成,负责监听 API 请求并管理镜像、容器、网络和数据卷。

  • Docker Registry:镜像仓库,类似于代码仓库 Git。最知名的公共仓库是 Docker Hub

3. 三大核心概念

认识 Docker,必须理解其三个基本组成部分:

  • 镜像 (Image) :类似于虚拟机的模板或 Java 中的“类”,是一个只读的文件系统,包含运行应用所需的代码、环境和配置文件。
  • 容器 (Container) :镜像运行时的实体,类似于 Java 中的“对象”。容器可以被创建、启动、停止和删除,且相互之间是隔离的。
  • 仓库 (Registry) :集中存放镜像文件的地方。用户可以通过 push 将镜像上传到仓库,通过 pull 将镜像下载到本地。

4. 容器与虚拟机的区别

Docker 容器相较于传统虚拟机(VM)具有显著优势:

  • 轻量级:容器不需要内置操作系统内核,而是共用宿主机的内核,因此启动速度极快。
  • 高效利用资源:由于没有 OS 的开销,同一台机器上可以运行比虚拟机多得多的容器实例。
  • 一致性:确保了应用在开发、测试和生产环境中的运行环境完全一致。
  • Docker container vs Virtual Machine的图片

5. 为什么开发者都需要 Docker?

无论你使用的是哪种编程语言或技术栈,Docker 都能提供核心价值:

  • 环境标准化(打包环境):Docker 将应用所需的底层操作系统组件、依赖库及应用代码完整打包 。这意味着你不再需要手动在生产服务器上配置复杂的底层环境 。
  • 交付物统一化(简化流程):开发者交付的不再仅仅是代码,而是一个开箱即用的镜像 。
  • 极速部署:容器共享宿主机内核,不需要像虚拟机那样加载整个操作系统,因此可以在秒级启动,极大地提高了生产力和服务器资源利用率 。
  • 多环境一致性:确保应用从开发者的笔记本到测试环境,再到生产环境,运行表现完全一致 。