[SpringBoot] Docker compose 部署 Redis 避坑

Posted by xiuyuantech on 2025-09-20

Docker 和 Docker Compose 是 容器化 相关的工具,Docker Compose 是 Docker 的一个补充工具,用于管理 多容器应用。
可以简单理解:
Docker → 运行 单个容器(比如 docker run 命令)。
Docker Compose → 运行 多个容器(比如 docker-compose up 命令)。

Docker Compose 介绍

Docker Compose 通过 docker-compose.yml 文件可以定义多个容器的配置,并可以一键启动或管理多个容器。

  • 使用场景

    微服务架构:如 Web 服务 + 数据库 + Redis,Compose 可以一键启动所有容器。
    开发环境:团队成员可以通过 docker-compose up 快速启动完整的开发环境。
    自动化部署:用于本地测试、CI/CD 管道(如 GitHub Actions、Jenkins)。

  • 下载地址

    github地址官网地址

部署示例

运行一个 缓存服务(Redis6.2)+ 数据库(MySQL8.0) 的环境,可以使用 docker-compose.yml 轻松管理多个容器。

  • 编写 docker-compose.yml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    version: "3.4"

    name: demo-system

    services:
    mysql:
    container_name: demo-mysql
    image: mysql:8
    restart: unless-stopped
    tty: true
    ports:
    - "3306:3306"
    environment:
    MYSQL_DATABASE: ${MYSQL_DATABASE:-demo}
    MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-demo}
    TZ: Asia/Shanghai
    # 设置字符集和校对集
    MYSQL_CHARACTER_SET_SERVER: utf8mb4
    MYSQL_COLLATION_SERVER: utf8mb4_unicode_ci
    volumes:
    - /home/docker/mysql8/data:/var/lib/mysql/
    - /home/docker/mysql8/conf:/etc/mysql/conf.d
    - /home/docker/mysql8/logs:/var/log/mysql
    - /home/docker/quartz.sql:/docker-entrypoint-initdb.d/quartz.sql:ro

    redis:
    container_name: demo-redis
    image: redis:6-alpine
    restart: unless-stopped
    ports:
    - "6379:6379"
    environment:
    - TZ=Asia/Shanghai
    volumes:
    - /home/docker/redis6/data:/data
    - /home/docker/redis6/conf:/usr/local/etc/redis
    - /home/docker/redis6/conf/users.acl:/etc/redis/users.acl
    command:
    - redis-server /usr/local/etc/redis/redis.conf

    容器目录/docker-entrypoint-initdb.d用来加载初始化脚本。 如果redis.conf 中 logfile 配置的路径报错Can’t open the log file: No such file or directory 或者 Permission denied,可能是没有创建目录或者没有权限,最好将logfile路径配置到data目录下并检查目录是否创建以及是否有权限。
    在使用Docker部署Redis时,确实有一些限制和最佳实践需要考虑,特别是关于配置文件中的某些参数,如daemonize参数。在传统的 Linux 系统中,Redis 的 daemonize 选项用于指定 Redis 是否应该在后台运行。在 Docker 容器中,通常不推荐使用 daemonize yes,因为 Docker 容器设计之初就是为了运行单个进程。如果你在 Docker 容器中设置 daemonize yes,那么 Redis 将尝试在后台运行,这可能会导致一些问题,比如容器无法正确退出或者在容器重启时出现问题。
    注意Docker部署Redis时推荐使用daemonize no,生产环境没有使用docker部署而是直接部署的推荐使用 daemonize yes。

  • 相关文章
    CSDN避坑指南 脚本之家避坑指南 知乎避坑指南 acl详解

  • 启动服务

    1
    docker compose --env-file docker.env -f docker-compose.yml up -d

    --env-file:可以指定docker环境变量文件,-f:可以指定yml文件,多个文件可以追加 -f a.yml -f b.yml 。

总结与对比

在使用Docker部署服务是一般都要配置数据目录、日志目录、配置文件等,很多文档和文章都是使用默认配置埋下很多坑要踩。由于网上相关文章较少,因此记录下此问题让大家少踩坑快速解决问题。

对比项 Docker Docker Compose
管理单个容器 ✅ 适合 ❌ 不适合
管理多个容器 ❌ 不适合 ✅ 适合
适用于微服务架构 ❌ 较难管理 ✅ 适合
配置方式 命令行参数 docker-compose.yml 文件
适用场景 运行单个应用 运行多个服务(如 Web + 数据库)