Docker compose 容器编排实战系列-一键部署redis

本文分为两个部署文件,一个是redis单节点模式,一个是redis集群的主从复制模式,关于Redis集群的主从复制模式的原理或细节请自行翻阅其他博文,本文只说如何使用docker compose 部署,并且给的部署yml文件可以直接使用。

Redis单节点模式的docker compose yml文件

我将yml 文件命名为redis_compose.yml,在home 目录下创建,命令如下

vim /home/redis_compose.yml  && cd /home

redis_compose.yml 文件内容:

version: '3.8'
services:
  redis:
    image: redis:latest
    container_name: my_redis  #容器名称
    command: redis-server --appendonly yes  #让redis数据库文件持久化
    restart: always
    ports:
      - "16379:6379" #对外暴露的端口
    volumes:
      - /home/redisdata/data:/data  # 持久化 Redis 数据
      - /home/redisdata/redis.conf:/usr/local/etc/redis/redis.conf  # 如果有自定义配置文件
    environment:
      - REDIS_DISABLE_COMMANDS=FLUSHDB,FLUSHALL
      - TZ=Asia/Shanghai

然后运行命令

docker compose -f redis_compose.yml up -d

得到如下结果表示容器创建成功

[root@testdockerenv dkcomposeyaml]# docker compose -f redis_compose.yml up -d
[+] Running 1/1
 ✔ Container my_redis  Started 

运行命令查看容器状态

docker compose -f redis_compose.yml ps

得到如下信息时,表示容器运行正常

NAME       IMAGE          COMMAND                                                SERVICE   CREATED              STATUS              PORTS
my_redis   redis:latest   "docker-entrypoint.sh redis-server --appendonly yes"   redis     About a minute ago   Up About a minute   0.0.0.0:16379->6379/tcp, :::16379->6379/tcp

redis_compose.yml字段的详细解释

  • image: 指定要使用的 Docker 镜像。这里使用的是最新的 Redis 官方镜像,如果你有别的需求,自行设置。
  • container_name: 指定容器的名称。如果你不指定,Docker 会自动生成一个名称。
  • command: 覆盖默认的容器启动命令。这里指定了 redis-server --appendonly yes,这意味着启动 Redis 服务器并开启 AOF 持久化。
  • restart: 定义容器重启策略。always 表示如果容器退出,总是重启容器。
  • ports: 定义容器端口映射。"16379:6379" 表示将容器的 6379 端口映射到宿主机的 16379 端口。
  • volumes: 定义数据卷挂载。这里挂载了两个卷:
  • /home/redisdata/data:/data: 将宿主机的 /home/redisdata/data 目录挂载到容器的 /data 目录,用于持久化 Redis 数据。宿主机的路径可以根据实际的情况进行更改
  • /home/redisdata/redis.conf:/usr/local/etc/redis/redis.conf: 如果你有自定义的 Redis 配置文件,它会将宿主机的 /home/redisdata/redis.conf 文件挂载到容器的配置文件路径。宿主机的配置文件可以根据实际的情况选择是否启用,不想使用注释掉即可。
  • environment: 定义环境变量。这里设置了两个变量:
  • REDIS_DISABLE_COMMANDS=FLUSHDB,FLUSHALL: 禁用 Redis 的 FLUSHDB 和 FLUSHALL 命令,防止数据被意外清空。
  • TZ=Asia/Shanghai: 设置容器时区为亚洲/上海时区

这个 Docker Compose 配置文件定义了一个 Redis 服务,它将 Redis 数据和配置文件持久化到宿主机的指定路径,并映射了宿主机的 16379 端口到容器的 6379 端口。同时,它还设置了时区并禁用了一些可能导致数据丢失的 Redis 命令。

Redis集群(主从复制)模式的docker compose yml文件

使用该compose文件,可以一键部署redis 主从复制集群,如果对配置有其他需求可以根据实际需求修改。

我将yml 文件命名为redis_cluster.yml,在home 目录下创建,命令如下

vim /home/redis_cluster.yml  && cd /home

redis_cluster.yml文件内容:

version: '3.8'
services:
  redis-master:
    image: redis:latest
    container_name: redis-master
    command: redis-server --appendonly yes
    ports:
      - "16379:6379"
    volumes:
      - /home/redisdata/redis-master:/data
    environment:
      - TZ=Asia/Shanghai  # 设置环境变量为上海时区

  redis-slave:
    image: redis:latest
    container_name: redis-slave
    command: redis-server --appendonly yes --slaveof redis-master 6379
    depends_on:
      - redis-master
    ports:
      - "16380:6379"
    volumes:
      - /home/redisdata/redis-slave:/data
    environment:
      - TZ=Asia/Shanghai  # 设置环境变量为上海时区

然后运行如下命令

docker compose -f redis_cluster.yml up -d

得到的结果如下,则表明容器运行成功

[+] Running 3/3
 ✔ Network dkcomposeyaml_default  Created                                                                                                                             0.1s 
 ✔ Container redis-master         Started                                                                                                                             0.0s 
 ✔ Container redis-slave          Started

我们使用以下命令确定容器的运行状态

docker compose -f redis_cluster.yml ps

得到的结果如下,则表明容器运行状态正常

NAME           IMAGE          COMMAND                                                                            SERVICE        CREATED         STATUS         PORTS
redis-master   redis:latest   "docker-entrypoint.sh redis-server --appendonly yes"                               redis-master   2 minutes ago   Up 2 minutes   0.0.0.0:16379->6379/tcp, :::16379->6379/tcp
redis-slave    redis:latest   "docker-entrypoint.sh redis-server --appendonly yes --slaveof redis-master 6379"   redis-slave    2 minutes ago   Up 2 minutes   0.0.0.0:16380->6379/tcp, :::16380->6379/tcp

redis_cluster.yml字段的详细解释

大部分KEY与单节点的KEY的内容是一样的,不同的地方有两处

command: redis-server --appendonly yes --slaveof redis-master 6379
这个命令的作用是:

  • redis-server: 这是启动 Redis 服务的命令。
  • --appendonly yes: 这个选项启用 Redis 的持久化功能,即 AOF(Append Only File)模式。在这种模式下,Redis 会将每个写操作追加到磁盘上的一个文件中,从而可以在发生故障时恢复数据。
  • --slaveof redis-master 6379: 这个选项将当前 Redis 实例配置为另一个 Redis 实例的从属(slave)。redis-master 是主(master)Redis 实例的名称,6379 是主实例上 Redis 服务的端口号。这意味着当前 Redis 实例将尝试连接到名为 redis-master 的容器在端口 6379 上运行的 Redis 服务,并成为其从属节点。从属节点会从主节点复制数据,从而实现主从复制(master-slave replication)。

depends_on:表示一个服务依赖于另一个服务,及A容器依赖于B容器,在本例中的值是redis-master,表示

  • 当前服务(在这个例子中是 redis-slave)依赖于名为 redis-master 的服务。在启动 redis-slave 服务之前,Docker Compose 将首先确保 redis-master 服务已经启动并且运行正常。
  • 这对于确保 Redis 从属(slave)服务在尝试连接到 Redis 主(master)服务时,主服务已经准备好接受连接是非常有用的。这样可以避免因主服务尚未启动而导致从服务启动失败的问题。
  • 需要注意的是,depends_on 仅确保服务的启动顺序,它不保证依赖的服务已经完全准备好接受连接。如果你需要确保一个服务完全启动并准备就绪,你可能需要使用其他机制,例如健康检查(health checks),来等待依赖服务完全可用。
  • 32
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的redis集群部署三主三从的docker-compose编排示例: ```yaml version: '3' services: redis-master-1: image: redis command: redis-server --port 6379 --cluster-enabled yes --cluster-config-file /data/nodes.conf --cluster-node-timeout 5000 --appendonly yes ports: - "6379:6379" volumes: - redis-master-data-1:/data networks: - redis-net redis-master-2: image: redis command: redis-server --port 6380 --cluster-enabled yes --cluster-config-file /data/nodes.conf --cluster-node-timeout 5000 --appendonly yes ports: - "6380:6380" volumes: - redis-master-data-2:/data networks: - redis-net redis-master-3: image: redis command: redis-server --port 6381 --cluster-enabled yes --cluster-config-file /data/nodes.conf --cluster-node-timeout 5000 --appendonly yes ports: - "6381:6381" volumes: - redis-master-data-3:/data networks: - redis-net redis-slave-1: image: redis command: redis-server --port 6382 --cluster-enabled yes --cluster-config-file /data/nodes.conf --cluster-node-timeout 5000 --slaveof redis-master-1 6379 --appendonly yes volumes: - redis-slave-data-1:/data networks: - redis-net redis-slave-2: image: redis command: redis-server --port 6383 --cluster-enabled yes --cluster-config-file /data/nodes.conf --cluster-node-timeout 5000 --slaveof redis-master-2 6380 --appendonly yes volumes: - redis-slave-data-2:/data networks: - redis-net redis-slave-3: image: redis command: redis-server --port 6384 --cluster-enabled yes --cluster-config-file /data/nodes.conf --cluster-node-timeout 5000 --slaveof redis-master-3 6381 --appendonly yes volumes: - redis-slave-data-3:/data networks: - redis-net volumes: redis-master-data-1: redis-master-data-2: redis-master-data-3: redis-slave-data-1: redis-slave-data-2: redis-slave-data-3: networks: redis-net: ``` 在这个docker-compose文件中,我们定义了6个redis实例,其中3个是主节点,3个是从节点,并且每个节点都会在本地暴露对应的端口。我们还定义了一个名为redis-net的网络,以便在容器之间进行通信。通过这个docker-compose文件,我们可以使用`docker-compose up`命令启动这个redis集群。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值