docker compose一键运行所有的文件

好的,我为你准备一个完整的 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

🚀 启动服务

  1. 启动所有服务

    bash 复制代码
    docker-compose up -d
  2. 查看运行状态

    bash 复制代码
    docker-compose ps
  3. 查看日志

    bash 复制代码
    # 查看所有服务日志
    docker-compose logs -f
    
    # 查看特定服务日志
    docker-compose logs -f mysql
    docker-compose logs -f redis
    docker-compose logs -f tdengine
  4. 停止服务

    bash 复制代码
    docker-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 '新密码';

📌 注意事项

  1. 开机自启restart: always 保证了容器崩溃后会自动重启,但宿主机关机重启后,需要 Docker 服务自动启动。确保 Docker 服务已设置开机自启:

    bash 复制代码
    sudo systemctl enable docker
  2. 数据备份 :所有数据都保存在当前目录的子文件夹中(./mysql/data/./redis/data/./tdengine/data/),建议定期备份这些目录。

  3. 性能调优 :生产环境建议根据机器配置调整 MySQL 的 my.cnf 和 Redis 的内存限制。

需要我帮你调整某个服务的配置吗?比如修改端口、密码或增加额外的环境变量?