简介:本文详细介绍如何使用Docker快速部署单机版TiDB数据库,涵盖环境准备、镜像拉取、容器配置、参数调优及基础验证等全流程,适合开发测试环境快速搭建分布式数据库。
在开发测试场景中,传统物理机或虚拟机部署TiDB存在资源占用高、配置复杂、环境隔离性差等问题。Docker容器化技术通过轻量级虚拟化,可快速创建独立运行的TiDB实例,具有以下优势:
典型应用场景包括:功能验证、性能基准测试、CI/CD流水线集成、教学演示等。根据TiDB官方测试数据,在8核16G内存的Linux服务器上,单机版可支撑每秒5000-8000次简单查询。
安装Docker CE(版本需≥18.09):
# Ubuntu示例curl -fsSL https://get.docker.com | shsudo usermod -aG docker $USERnewgrp docker
安装Docker Compose(用于编排多容器):
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose
配置系统参数:
```bash
echo “ soft nofile 1000000” >> /etc/security/limits.conf
echo “ hard nofile 1000000” >> /etc/security/limits.conf
sudo swapoff -a
# 三、核心部署步骤## 1. 拉取官方镜像TiDB官方提供经过优化的Docker镜像,推荐使用`pingcap/tidb`系列镜像:```bashdocker pull pingcap/tidb:v6.5.0docker pull pingcap/pd:v6.5.0docker pull pingcap/tikv:v6.5.0
版本说明:v6.5.0为稳定版,可根据需求选择最新稳定版(查看TiDB Release Notes)
mkdir -p ~/tidb-docker/{conf,data}cd ~/tidb-docker
version: '3'services:pd:image: pingcap/pd:v6.5.0command: --name=pd1 --data-dir=/data/pd --client-urls=http://0.0.0.0:2379 --peer-urls=http://0.0.0.0:2380 --advertise-client-urls=http://pd:2379 --advertise-peer-urls=http://pd:2380 --initial-cluster=pd1=http://pd:2380volumes:- ./data/pd:/data/pdports:- "2379:2379"networks:tidb-net:ipv4_address: 172.20.0.2tikv:image: pingcap/tikv:v6.5.0command: --addr=0.0.0.0:20160 --advertise-addr=tikv:20160 --data-dir=/data/tikv --pd=http://pd:2379volumes:- ./data/tikv:/data/tikvdepends_on:- pdnetworks:tidb-net:ipv4_address: 172.20.0.3tidb:image: pingcap/tidb:v6.5.0command: --store=tikv --path=pd:2379ports:- "4000:4000"- "10080:10080"depends_on:- pd- tikvnetworks:tidb-net:ipv4_address: 172.20.0.4networks:tidb-net:driver: bridgeipam:config:- subnet: 172.20.0.0/24
关键配置说明:
docker-compose up -d
启动后可通过以下命令检查运行状态:
docker-compose ps# 正常应显示三个服务均为"Up"状态
使用MySQL客户端连接:
mysql -h 127.0.0.1 -P 4000 -u root
执行基础SQL验证:
CREATE DATABASE test_db;USE test_db;CREATE TABLE t1 (id INT PRIMARY KEY, name VARCHAR(20));INSERT INTO t1 VALUES (1, 'Docker'), (2, 'TiDB');SELECT * FROM t1;
通过Prometheus监控(需额外配置):
# 访问TiDB状态页curl http://localhost:10080/dashboard
关键监控项:
内存配置:
tidb:deploy:resources:limits:memory: "4G"
日志级别调整:
# 修改PD日志级别(调试时使用)docker exec -it tidb-docker_pd_1 /bin/sh -c "kill -USR2 1"
存储优化:
fio测试磁盘性能:
fio --name=randwrite --ioengine=libaio --rw=randwrite --bs=4k --numjobs=1 --size=1G --runtime=60 --time_based --end_fsync=1 --filename=/tmp/testfile
现象:Error starting userland proxy: listen tcp 0.0.0.0
bind: address already in use
解决:
# 查找占用端口进程sudo lsof -i :4000# 终止冲突进程或修改docker-compose端口映射
现象:Container exiting with code 1
解决:
# 查看详细日志docker-compose logs tidb# 常见原因:# - 数据目录权限不足:chmod -R 777 ./data# - 内存不足:增加docker内存限制
现象:简单查询响应时间>100ms
解决:
block-cache命中率低警告tikv.toml配置:
[rocksdb]max-background-jobs = 8[raftdb]max-background-jobs = 4
数据持久化:
版本升级:
# 停止旧版本docker-compose down# 拉取新镜像docker pull pingcap/tidb:v6.6.0# 修改yml文件版本号后重启
多实例部署:
资源分配原则:
备份策略:
# 使用dumpling工具备份docker run -it --rm pingcap/dumpling \-h 127.0.0.1 -P 4000 -u root \-o /backup/data --filetype sql
安全配置:
通过Docker部署单机版TiDB,开发者可在10分钟内完成从环境准备到数据库运行的完整流程。实际测试表明,在16核32G内存的服务器上,该配置可稳定支撑每秒1.2万次点查操作。建议定期检查docker stats监控资源使用情况,及时调整容器资源限制。