1. Docker 基础回顾:架构、镜像、容器与核心命令
在深入数据迁移与性能调优之前,必须夯实 Docker 基础。本章从架构、核心概念、安装配置到命令速览,为后续章节建立统一的技术语境。
1.1 Docker 整体架构
Docker 采用 C/S(客户端-服务端)架构,由 Docker Client、Docker Daemon、ContainerD、镜像仓库(Registry)四部分组成。用户通过 CLI 或 API 向 Daemon 下发指令,Daemon 再调用 containerd 管理容器生命周期。
架构要点: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 |
命令速记口诀:“拉镜像用 pull,跑容器用 run,看进程用 ps,查日志用 logs,进容器用 exec,删垃圾用 prune”。生产环境建议为
docker system prune -af 设置定时任务,定期清理未使用的镜像、容器和网络资源。
1.5 本章小结
- Docker 采用 C/S 架构,Client 通过 REST API 与 Daemon 通信,Daemon 调用 containerd 管理容器。
- 镜像是只读分层模板,容器是镜像的运行实例,拥有可写层和独立隔离环境。
- 安装推荐使用官方仓库,生产环境需配置日志限制和用户权限。
- 核心命令覆盖镜像管理、容器生命周期、日志调试、网络存储四大类,掌握这些即可应对日常运维。