1. Docker 基础概念:镜像、容器、仓库、Docker 架构与核心组件

Docker 是目前最主流的容器化平台,它将应用及其依赖打包在轻量级、可移植的容器中,实现“一次构建,随处运行”。理解 Docker 的四个核心概念——镜像、容器、仓库以及整体架构——是搭建后端部署环境、管理连接池水位的前提。

1.1 核心概念速览

概念 类比 定义 关键特征
镜像 (Image) 类 / 安装包 一个只读的、包含应用及其运行时依赖的模板文件 分层构建、不可变、可复用
容器 (Container) 对象 / 运行实例 镜像的可运行实例,拥有独立的文件系统、网络和进程空间 轻量、可写层、生命周期短暂
仓库 (Registry) 代码仓库 (Git) 集中存储和分发 Docker 镜像的服务 公有/私有、标签管理、版本控制
Docker 主机 操作系统 安装并运行 Docker 守护进程的物理机或虚拟机 管理镜像、容器、网络、存储卷
💡 连接池水位视角: 镜像定义了应用和连接池库(如 HikariCP)的版本;容器是连接池实际运行并消耗数据库连接的进程;仓库用于分发包含连接池配置的镜像版本。

1.2 Docker 架构与核心组件

Docker 采用 C/S (客户端-服务器) 架构。用户通过 Docker CLI 与后台守护进程通信,守护进程负责构建、运行和分发容器。

架构核心组件:
  • Docker Client (客户端):用户交互入口,执行 docker build、docker run 等命令。
  • Docker Daemon (守护进程):后台常驻进程,管理镜像、容器、网络、存储卷。
  • REST API:客户端与守护进程之间的通信接口。
  • containerd:容器运行时管理组件,负责容器生命周期(创建、启动、停止)。
  • runc:低层容器运行时,直接与 Linux 内核交互(cgroups、namespace)。
Docker 架构核心组件关系图 Docker C/S 架构与核心组件 Docker Client CLI / API 调用 REST API Docker Daemon 管理镜像/容器/网络 containerd runc Linux Kernel 组件职责 • Client: 用户命令入口 • Daemon: 核心管理引擎 • containerd: 容器生命周期 • runc: 内核接口封装

1.3 镜像分层与容器可写层

Docker 镜像由多个只读层叠加而成,每一层代表一个 Dockerfile 指令。容器启动时,在镜像层之上挂载一个可写层(容器层),所有运行时修改(如日志、临时文件)都写入该层。

⚠️ 连接池水位影响: 容器重启后,可写层数据默认丢失。连接池的实时状态(活跃连接数、等待队列)存储在容器内存中,重启即重置。生产环境应使用外部数据库或 Redis 持久化连接池指标。
镜像分层与容器可写层 镜像分层与容器可写层结构 容器可写层 (Writable) 镜像层 3: 应用代码 + 配置 镜像层 2: 依赖库 (JDK/Python) 镜像层 1: 基础操作系统 (Alpine) 关键特性 • 镜像层只读、共享 • 容器层临时、可写 • 写时复制 (CoW) 机制 • 容器删除后数据丢失

1.4 仓库 (Registry) 与镜像分发

仓库是 Docker 生态的“镜像市场”。开发人员将构建好的镜像推送到仓库,部署时从仓库拉取。常见的仓库包括:

  • Docker Hub:官方公有仓库,包含大量基础镜像(如 nginx、alpine)。
  • 私有仓库 (Harbor / Nexus):企业自建,用于存储内部应用镜像,支持安全扫描和访问控制。
  • 云厂商镜像服务:阿里云 ACR、AWS ECR、Azure ACR 等。
连接池水位部署流程:
  1. 开发阶段:在 Dockerfile 中配置连接池参数(maximumPoolSize、connectionTimeout)。
  2. 构建阶段:docker build -t myapp:1.0 . 生成镜像。
  3. 推送阶段:docker push myregistry.com/myapp:1.0 上传至仓库。
  4. 部署阶段:从仓库拉取镜像并启动容器,连接池自动初始化。

1.5 常用 Docker 命令速查

命令 作用 连接池场景示例
docker pull 从仓库拉取镜像 docker pull openjdk:17
docker run 创建并启动容器 docker run -e DB_URL=jdbc:mysql://... myapp
docker ps 查看运行中的容器 检查连接池所在容器是否存活
docker logs 查看容器日志 排查连接池初始化失败原因
docker exec 进入容器内部 docker exec -it myapp bash 查看连接池 JMX 指标
docker commit 将容器保存为新镜像 调试后固化连接池配置

1.6 本章小结