1. Docker 基础回顾:架构、镜像、容器与核心命令

在深入数据迁移与性能调优之前,必须夯实 Docker 基础。本章从架构、核心概念、安装配置到命令速览,为后续章节建立统一的技术语境。

1.1 Docker 整体架构

Docker 采用 C/S(客户端-服务端)架构,由 Docker Client、Docker Daemon、ContainerD、镜像仓库(Registry)四部分组成。用户通过 CLI 或 API 向 Daemon 下发指令,Daemon 再调用 containerd 管理容器生命周期。

Docker 整体架构图 Docker C/S 架构 Docker Client docker build / run / push Docker Daemon dockerd (REST API) containerd 容器运行时管理 Registry Docker Hub / 私有仓库 REST API gRPC push / pull 说明 Client 不直接管理容器 所有操作经 Daemon 转发
架构要点:Docker Client 不直接管理容器,所有指令通过 REST API 发送给 Daemon;Daemon 再通过 gRPC 调用 containerd 完成容器生命周期管理。镜像的拉取与推送则直接与 Registry 交互。

1.2 镜像与容器概念

概念 定义 类比 关键特征
镜像(Image) 只读模板,包含运行应用所需的文件系统、依赖、配置 ISO 安装盘 / 类模板 分层存储(UnionFS)、不可变、可复用
容器(Container) 镜像的运行实例,拥有独立的文件系统、网络、进程空间 虚拟机实例 可写层、生命周期短、隔离性(Namespace + Cgroups)
仓库(Registry) 存储和分发镜像的中心化服务 Git 远程仓库 支持标签(tag)、访问控制、镜像签名
镜像分层原理:Docker 镜像由多层只读层叠加而成,每层对应 Dockerfile 中的一条指令。容器启动时在镜像层之上挂载一个可写层(容器层)。这种设计使得多个容器可以共享底层镜像,节省磁盘空间并加速启动。

1.3 Docker 安装与配置

以下以 Ubuntu 22.04 LTS 为例,展示标准安装流程。生产环境建议使用官方仓库而非系统自带包。

# 1. 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc

# 2. 安装依赖
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release

# 3. 添加 Docker 官方 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
  sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 4. 设置稳定版仓库
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 5. 安装 Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 6. 启动并验证
sudo systemctl enable docker
sudo systemctl start docker
sudo docker run hello-world
生产配置建议:安装完成后务必执行 sudo usermod -aG docker $USER 将当前用户加入 docker 组(需重新登录生效),避免每次执行 docker 命令都加 sudo。同时建议配置 Docker Daemon 的日志驱动为 json-file 并限制日志大小,防止磁盘写满。

1.4 核心命令速览

以下表格按使用频率和功能分类,覆盖日常运维 90% 的操作场景。

分类 命令 说明 常用示例
镜像管理 docker images 列出本地镜像 docker images --format "table {{.Repository}}\t{{.Tag}}"
docker pull 从仓库拉取镜像 docker pull nginx:1.25-alpine
docker rmi 删除本地镜像 docker rmi $(docker images -q -f dangling=true)
容器生命周期 docker run 创建并启动容器 docker run -d --name web -p 80:80 nginx
docker ps 列出运行中的容器 docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"
docker stop/start/restart 停止/启动/重启容器 docker restart web
docker rm 删除容器 docker rm -f $(docker ps -aq)
日志与调试 docker logs 查看容器日志 docker logs --tail 100 -f web
docker exec 进入容器执行命令 docker exec -it web bash
docker inspect 查看容器/镜像详细信息 docker inspect web | jq '.[].Mounts'
网络与存储 docker network 管理容器网络 docker network create --driver bridge mynet
docker volume 管理数据卷 docker volume create data_vol
镜像分层与容器可写层 镜像分层与容器可写层 容器可写层(Writable Layer) 镜像层 3:应用代码与配置 镜像层 2:依赖库与运行时 镜像层 1:基础操作系统(Ubuntu / Alpine) 分层存储特性 • 镜像层只读,容器层可写 • 写时复制(Copy-on-Write) • 多个容器共享底层镜像 • 容器删除不影响镜像层 • 镜像层可被多个容器复用 • 数据持久化需挂载 Volume
命令速记口诀:“拉镜像用 pull,跑容器用 run,看进程用 ps,查日志用 logs,进容器用 exec,删垃圾用 prune”。生产环境建议为 docker system prune -af 设置定时任务,定期清理未使用的镜像、容器和网络资源。

1.5 本章小结

  • Docker 采用 C/S 架构,Client 通过 REST API 与 Daemon 通信,Daemon 调用 containerd 管理容器。
  • 镜像是只读分层模板,容器是镜像的运行实例,拥有可写层和独立隔离环境。
  • 安装推荐使用官方仓库,生产环境需配置日志限制和用户权限。
  • 核心命令覆盖镜像管理、容器生命周期、日志调试、网络存储四大类,掌握这些即可应对日常运维。