好的,我为你准备一个完整的 docker-compose.yml 文件,同时部署 Redis、MySQL 和 TDengine,并满足你的所有要求。
📄 完整 docker-compose.yml 文件
yaml
version: '3.8'
services:
# ============ MySQL LTS 8.4 ============
mysql:
image: mysql:lts
container_name: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root # root 密码,请修改
MYSQL_DATABASE: soybean # 自动创建的数据库
MYSQL_USER: appuser # 额外创建的用户
MYSQL_PASSWORD: appuser123 # 额外用户的密码
TZ: Asia/Shanghai
ports:
- "3306:3306" # 主机端口:容器端口
volumes:
- ./mysql/data:/var/lib/mysql # 数据持久化
- ./mysql/conf/my.cnf:/etc/mysql/my.cnf # 自定义配置文件(可选)
- ./mysql/init:/docker-entrypoint-initdb.d # 初始化脚本目录
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --default-time-zone=+8:00
networks:
- app-network
# ============ Redis 7.4 ============
redis:
image: redis:7.4
container_name: redis
restart: always
ports:
- "6379:6379"
volumes:
- ./redis/data:/data # 数据持久化
- ./redis/conf/redis.conf:/usr/local/etc/redis/redis.conf # 配置文件
- ./redis/logs:/var/log/redis # 日志目录
command: redis-server /usr/local/etc/redis/redis.conf --requirepass redis123456 --appendonly yes
environment:
TZ: Asia/Shanghai
networks:
- app-network
# ============ TDengine 3.3.6.13 ============
tdengine:
image: tdengine:3.3.6.13
container_name: tdengine
restart: always
ports:
- "6030:6030" # RESTful 接口
- "6041:6041" # WebSocket 接口
- "6060:6060"
- "6030-6040:6030-6040/udp" # UDP 端口范围
volumes:
- ./tdengine/data:/var/lib/taos # 数据持久化
- ./tdengine/logs:/var/log/taos # 日志目录
- ./tdengine/conf:/etc/taos # 配置文件目录
environment:
TAOS_FQDN: tdengine # 节点名称
networks:
- app-network
networks:
app-network:
driver: bridge
📁 目录结构
在运行前,建议创建好对应的目录结构,方便数据持久化和配置文件管理:
bash
mkdir -p mysql/data mysql/conf mysql/init
mkdir -p redis/data redis/conf redis/logs
mkdir -p tdengine/data tdengine/logs tdengine/conf
最终的目录结构应该是这样的:
.
├── docker-compose.yml
├── mysql/
│ ├── data/
│ ├── conf/
│ └── init/
├── redis/
│ ├── data/
│ ├── conf/
│ └── logs/
└── tdengine/
├── data/
├── logs/
└── conf/
🔧 Redis 配置文件(可选)
如果你想更精细地控制 Redis,可以创建 redis/conf/redis.conf 文件:
bash
tee redis/conf/redis.conf <<-'EOF'
# Redis 配置文件
port 6379
requirepass redis123456
appendonly yes
appendfilename "appendonly.aof"
save 900 1
save 300 10
save 60 10000
maxmemory 512mb
maxmemory-policy allkeys-lru
timeout 300
tcp-keepalive 60
databases 16
EOF
🚀 启动服务
-
启动所有服务:
bashdocker-compose up -d -
查看运行状态:
bashdocker-compose ps -
查看日志:
bash# 查看所有服务日志 docker-compose logs -f # 查看特定服务日志 docker-compose logs -f mysql docker-compose logs -f redis docker-compose logs -f tdengine -
停止服务:
bashdocker-compose down
🔑 连接信息汇总
| 服务 | 端口 | 用户名 | 密码 | 连接命令示例 |
|---|---|---|---|---|
| MySQL | 3306 | root | root123456 | mysql -h 127.0.0.1 -P 3306 -u root -p |
| appuser | appuser123 | 应用连接用这个更安全 | ||
| Redis | 6379 | (无) | redis123456 | redis-cli -h 127.0.0.1 -p 6379 -a redis123456 |
| TDengine | 6030 (RESTful) | root | taosdata (默认) | RESTful API: http://127.0.0.1:6041/rest/sql |
🧪 测试连接
测试 MySQL:
bash
docker exec -it mysql mysql -uroot -proot123456 -e "SHOW DATABASES;"
测试 Redis:
bash
docker exec -it redis redis-cli -a redis123456 ping
# 应该返回 PONG
测试 TDengine:
bash
docker exec -it tdengine taos -s "SHOW DATABASES;"
或者通过 RESTful API 测试:
bash
curl -X POST http://127.0.0.1:6041/rest/sql \
-H "Content-Type: application/json" \
-d '{"sql":"SHOW DATABASES;"}'
⚙️ 修改密码
如果需要修改密码:
MySQL:
bash
docker exec -it mysql mysql -uroot -proot123456
# 在 MySQL 命令行中执行:
ALTER USER 'root'@'%' IDENTIFIED BY '新密码';
FLUSH PRIVILEGES;
Redis:
bash
docker exec -it redis redis-cli -a redis123456
# 在 Redis 命令行中执行:
CONFIG SET requirepass 新密码
CONFIG REWRITE
TDengine (默认密码是 taosdata):
bash
docker exec -it tdengine taos
# 在 TDengine 命令行中执行:
ALTER USER root PASS '新密码';
📌 注意事项
-
开机自启 :
restart: always保证了容器崩溃后会自动重启,但宿主机关机重启后,需要 Docker 服务自动启动。确保 Docker 服务已设置开机自启:bashsudo systemctl enable docker -
数据备份 :所有数据都保存在当前目录的子文件夹中(
./mysql/data/、./redis/data/、./tdengine/data/),建议定期备份这些目录。 -
性能调优 :生产环境建议根据机器配置调整 MySQL 的
my.cnf和 Redis 的内存限制。
需要我帮你调整某个服务的配置吗?比如修改端口、密码或增加额外的环境变量?