Docker 安装 Redis 7.0.10

一、拉取镜像

docker pull redis:7.0.10

二、启动

2.1、修改配置文件

官网下载一个 redis.conf 文件,按如下修改:

1、允许 redis 远程连接,开启表示绑定本机IP,所以必须注释掉

2、开启 redis 验证,开启表示远程连接 redis 需要密码

3、daemonize no

    daemonize yes 表示后台运行 redis,因为该配置和 docker run 中 -d 参数冲突,会导致容器一直启动失败,所以要设置为 no,默认也是 no

4、appendonly yes

     开启 redis 持久化,默认 no,可打开

2.2、宿主机创建目录

mkdir -p /home/redis
  • 放置配置文件

2.3、启动

docker run -d \
--name redis \
--restart=always \
-p 6379:6379 \
--privileged=true \
-v /home/redis/redis.conf:/etc/redis/redis.conf \
-v /home/redis/data:/data \
redis:7.0.10 redis-server /etc/redis/redis.conf
  • -d:以守护进程模式在后台运行容器。
  • --name redis:为容器指定名称为 redis,方便后续管理。
  • --restart=always:它表示无论容器因为何种原因退出(包括正常退出和异常退出),Docker 守护进程都会自动重启该容器。比如当服务器重启、容器内部服务崩溃导致容器退出等情况发生时,容器都能自动重新启动,以提高容器内服务的可用性。
  • -p [宿主机端口]:[容器端口]
  • -p 6379:6379:将容器内暴露的 6379 端口,映射到主机的 6379 端口。
  • --privileged=true:扩大容器的权限解决挂载目录没有权限的问题。
  • -v /home/redis/redis.conf:/etc/redis/redis.conf:将宿主机 /home/redis/redis.conf 目录挂载到容器内的/etc/redis/redis.conf 目录。
  • -v /home/redis/data:/data:将宿主机 /home/redis/data 目录挂载到容器内的 /data 目录,该目录是 redis 存储数据的位置,这样可以防止容器删除后数据丢失。
  • redis-server /etc/redis/redis.conf:容器启动后执行的命令。以配置文件 redis.conf 启动 redis-server。

2.4、 测试

# 进入容器内部
docker exec -it redis bash
# 启动 redis 客户端,连接 127.0.0.1
redis-cli
# 登录
auth 123456
# 查询所有 key
keys *
# 设置键值
set key1 value1

 2.5、 客户端连接

找个客户端比如 Redis Insight,连接一下 redis 的虚拟机,可以看到我们在容器内创建的 key1:

<think>好的,我现在需要帮助用户分析他们提供的Docker命令。用户给出的命令是: docker run --name=gmalldocker_redis -d -p 6379:6379 --restart=always redis:7.0.10 首先,我要分解这个命令的每个部分,理解每个参数的作用,并确保没有错误。用户可能想确认这个命令是否正确,或者需要解释每个选项的意义。 首先,命令的结构是docker run,这是创建并启动一个新容器的命令。接下来是--name=gmalldocker_redis,这里设置了容器的名称。名称中有下划线,这是允许的,但需要注意用户是否可能在其他地方使用同样的名称导致冲突。 然后是-d参数,表示以守护进程模式运行容器,即在后台运行。用户可能希望容器在后台持续运行,而不占用终端。 -p 6379:6379,这里进行端口映射,将主机的6379端口映射到容器的6379端口。Redis默认使用6379端口,所以这个映射是正确的。但需要确认主机上的6379端口是否已经被占用,否则会导致启动失败。 --restart=always,这个选项设置容器在退出时总是重启,除非明确停止。这对于需要高可用的服务很重要,确保Redis服务在意外停止后自动恢复。 最后的镜像部分是redis:7.0.10,指定了使用Redis7.0.10版本标签。需要确认这个标签是否存在,用户可能输入了错误的冒号(中文冒号?),但看起来是正常的英文冒号。 接下来,我需要检查用户可能的疑问点。例如,是否端口正确,是否有权限问题,或者重启策略是否合适。用户可能在之前的MySQL容器中遇到了问题,比如端口冲突,所以需要提醒检查端口6379是否可用。 另外,用户之前的MySQL容器有一个因为退出码1而停止的情况,可能是因为配置错误或端口冲突。所以在解释这个Redis命令时,可能需要提到如何避免类似的问题,比如检查端口,查看日志等。 可能用户还想知道这个命令运行后的预期结果,比如如何访问Redis,是否需要设置密码,或者数据持久化的问题。虽然命令中没有提到-v参数来挂载卷,但用户可能需要知道数据在容器停止后的处理方式,如果没有挂载卷,数据可能会丢失。 另外,--restart=always对于生产环境是常见的设置,但用户是否了解不同的重启策略?比如on-failure或者其他选项。可能需要简单解释一下。 总结需要解释的要点: 1. 命令各参数的作用:--name, -d, -p, --restart, 镜像版本。 2. 检查可能的错误点,比如端口冲突,镜像标签是否存在。 3. 数据持久化的建议,虽然命令中没有涉及,但用户可能需要知道。 4. 安全方面的考虑,比如默认没有密码,是否需要设置。 5. 验证容器是否运行成功的方法,比如docker ps,查看日志,测试连接。 6. 提及之前的MySQL容器问题,提醒用户注意类似问题。 现在需要将这些点组织成清晰的中文解释,确保用户理解每个部分,并知道如何验证和解决潜在问题。</think>针对你提供的 `docker run` 命令的详细解析: --- ### **命令解释** ```bash docker run --name=gmalldocker_redis -d -p 6379:6379 --restart=always redis:7.0.10 ``` 1. **`docker run`** 创建并启动一个新的容器。 2. **`--name=gmalldocker_redis`** - 指定容器名称为 `gmalldocker_redis`(避免使用特殊字符如中文或空格)。 - 若省略,Docker 会自动生成一个随机名称(如 `happy_panda`)。 3. **`-d`** - 以“守护进程模式”(后台运行)启动容器。 - 容器启动后不会占用当前终端。 4. **`-p 6379:6379`** - 端口映射格式:`主机端口:容器端口`。 - 此处将主机的 `6379` 端口映射到容器的 `6379` 端口(Redis 默认端口)。 - 确保主机端口 `6379` 未被其他服务占用,否则启动会失败。 5. **`--restart=always`** - 容器自动重启策略: - `always`:无论容器退出状态如何,始终重启(包括 Docker 服务重启后)。 - `no`(默认):不自动重启。 - `on-failure`:仅在非零退出码时重启。 - `unless-stopped`:除非手动停止,否则始终重启。 - **适用场景**:需保障 Redis 服务持续运行的生产环境。 6. **`redis:7.0.10`** - 使用官方 Redis 镜像的 `7.0.10` 版本(确保标签存在,若省略标签则默认使用 `latest`)。 - 镜像会自动从 Docker Hub 拉取(若本地不存在)。 --- ### **预期行为** - 容器会在后台启动,运行 Redis 7.0.10 服务。 - 主机可通过 `localhost:6379` 或 `主机IP:6379` 访问 Redis。 - 若容器意外退出(如崩溃、宿主机重启),Docker 会自动重新启动它。 --- ### **常见问题与注意事项** #### 1. **端口冲突** - **现象**:启动时报错 `Bind for 0.0.0.0:6379 failed: port is already allocated`。 - **解决**: - 检查主机端口占用: ```bash netstat -tuln | grep 6379 ``` - 修改主机端口(如 `-p 6380:6379`),或停止占用端口的进程。 #### 2. **数据持久化** - **风险**:默认情况下,Redis 容器数据存储在内存和容器内文件系统,容器删除后数据会丢失。 - **建议**:添加数据卷映射以持久化数据: ```bash docker run ... -v /宿主机的/redis/data:/data ... ``` - 需确保宿主机目录 `/宿主机的/redis/data` 存在且权限正确。 #### 3. **安全配置** - **默认无密码**:Redis 镜像默认未设置密码,直接暴露到公网有风险。 - **建议**:通过环境变量或配置文件设置密码: ```bash docker run ... -e REDIS_PASSWORD=your_password ... ``` 或自定义 Redis 配置文件并挂载到容器。 --- ### **操作验证** 1. **检查容器状态**: ```bash docker ps -a | grep gmalldocker_redis ``` - 若状态为 `Up`,则运行正常。 2. **查看容器日志**: ```bash docker logs gmalldocker_redis ``` - 关注是否有 `Ready to accept connections` 日志,表示 Redis 已就绪。 3. **测试 Redis 连接**: ```bash redis-cli -h 127.0.0.1 -p 6379 ``` - 执行 `PING`,若返回 `PONG` 则连接成功。 --- ### **扩展建议** - **监控**:配合 `redis-cli info` 或第三方工具(如 Prometheus)监控 Redis 性能。 - **备份**:定期备份持久化数据(RDB/AOF 文件)。 - **网络隔离**:若在公网环境,建议将 Redis 容器放入独立网络,仅允许信任的容器或 IP 访问。 -- 若遇到启动失败或其他问题,可提供具体错误信息进一步分析!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值