Docker实战十一之Redis部署

embedded/2024/9/23 22:41:03/

Docker实战十一之Redis部署

简介

前面我们介绍了如何使用Docker 安装软件的一些简单方法。但在生产环境中,我们往往有更高的要求,需要保证系统的高可靠性和稳定性,以及数据的持久化,比如:

我们使用Docker 安装 Redis 并运行一段时间后,被误删除了,我们怎么才能重新安装并恢复原始数据呢?下面介绍Docker 安装软件的高级方式。

我们先介绍 基本知识,后面在详细介绍如何 安装 Redis 。

一、数据管理

大家在生产环境使用Docker部署项目的时候,基本都需要进行数据持久化、或多个容器间进行数据共享,这个就需要容器的数据管理来进行操作。

1.1 Docker数据持久化

Docker数据持久化就是容器中的数据不会随着容器的结束而随之结束,在Docker中如果需要实现数据的持久化,前提把数据从Docker容器挂载到宿主主机上去。

1.2 容器中数据管理的方式

  • 数据卷(Data Volumes):容器内的数据直接映射到宿主主机环境
  • 数据卷容器(Data Volume Containers):使用特定容器维护数据卷

二、数据卷的介绍

数据卷是一个可供容器内部使用的特殊目录,它将宿主主机的操作系统目录直接映射进容器内,类似于Linux系统中的 mount 操作。

2.1 数据卷作用

容器的持久化、容器间继承 + 共享数据

2.2 卷的概念

本质就是目录或文件,存在于一个或多个容器中,由docker挂载到容器中,但不属于联合文件系统,因此能够绕过合文件系统提供一些用于持续存储或共享数据的特性。卷的目的就是实现数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时同时删除其挂载的数据卷。

2.3 数据卷的特点

  • 数据卷可以在容器之间实现共享和重用,容器间传递数据将变的高效方便
  • 对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作
  • 对数据卷的更新不会影响Docker镜像,解耦了应用和数据
  • 数据卷的生命令周期不受容器的影响,除非你卸载它。

三、Docker数据卷常见的作用

  • 数据持久化:比如Redis,数据目录要挂载到宿主主机或者别的地方,否则Redis容器删除你的数据也会随之删除。
  • 同步操作:比如我需要修改redis.conf的配置文件,不需要在进入容器内部,可以直接修改数据卷对应的文件就可以进行配置实时同步。
  • 容器间数据共享:多个容器之间需要数据共享的时候

四、操作数据卷

4.1 常用命令

docker volume 指令值

指令值:

  • create:创建一个volume
  • inspect:显示一个或多个volume的信息
  • ls :列出所有的volume
  • prune :删除未使用的volume
  • rm:删除一个或多个指定的volume

4.2 挂载数据卷

创建数据卷myvolume

docker volume create myvolume

运行nginx容器

  docker run --name nginxtest -v myvolume:/usr/share/nginx/html -p 8000:80 -d nginx

五、使用数据卷安装Redis

在用 docker run 命令的时候,使用 -v 标记来创建一个数据卷并挂载到容器里。在一次 run 中多次使用可以挂载多个数据卷。

下面创建一个 redis 容器,并加载一个数据卷到容器的 /etc/redis 目录。

docker run --name redis -p 6379:6379 --privileged=true  
-v /Users/a123456/Downloads/redis/data:/data  
-v /Users/a123456/Downloads/redis/redis.conf:/etc/redis/redis.conf  
-d  redis:6.2.14 redis-server /etc/redis/redis.conf
a123456@luludeMacBook-Pro-2 redis % docker run --name redis -p 6379:6379 --privileged=true  -v /Users/a123456/Downloads/redis/data:/data  -v /Users/a123456/Downloads/redis/redis.conf:/etc/redis/redis.conf  -d  redis:6.2.14 redis-server /etc/redis/redis.conf
Unable to find image 'redis:6.2.14' locally
6.2.14: Pulling from library/redis
8a1e25ce7c4f: Already exists 
fc82c4b279bf: Pull complete 
003c886698dd: Pull complete 
aa8ba7ed57ab: Pull complete 
739bc212d5bc: Pull complete 
df15d839dd4a: Pull complete 
4f4fb700ef54: Pull complete 
ce747e78672c: Pull complete 
Digest: sha256:a4752f210bb45f94067bfca7257c7ebe90e7b4d5457f2ad3f2716ab636f5b2cc
Status: Downloaded newer image for redis:6.2.14
2cf801be0bedb0ff370a2f6fff3236a3027e79f7ad61422716a16521e61101e1

docker ps -a

docker ps -a命令用于列出所有的Docker容器,包括正在运行和已经停止的容器。

a123456@luludeMacBook-Pro-2 redis % docker ps -a
CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS                     PORTS                                                                    NAMES
2cf801be0bed   redis:6.2.14               "docker-entrypoint.s…"   56 seconds ago   Up 16 seconds              0.0.0.0:6379->6379/tcp                                                   redis
3f070c2bb470   yandex/clickhouse-server   "/entrypoint.sh"         2 months ago     Exited (255) 4 weeks ago   0.0.0.0:8123->8123/tcp, 0.0.0.0:9000->9000/tcp, 0.0.0.0:9009->9009/tcp   ch-server

可以看到 镜像redis:6.2.14 的 STATUS = Up。表示Redis 启动成功。

docker exec 基本语法

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

  • OPTIONS: 可选参数,用于指定一些附加选项,比如 -i(交互式)、-t(分配伪终端)等。
  • CONTAINER: 要执行命令的目标容器名称或容器ID。
  • COMMAND [ARG…]: 要在容器内执行的命令及其参数。
a123456@luludeMacBook-Pro-2 redis % docker exec -it 2cf801be0bed /bin/bash
root@2cf801be0bed:/data# 

连接Redis

a123456@luludeMacBook-Pro-2 redis % docker exec -it 2cf801be0bed /bin/bash
root@2cf801be0bed:/data# redis-cli   
127.0.0.1:6379> set name yyp
OK
127.0.0.1:6379> get  name
"yyp"
127.0.0.1:6379>

停止容器

a123456@luludeMacBook-Pro-2 redis % docker stop 2cf801be0bed
2cf801be0bed

删除镜像

a123456@luludeMacBook-Pro-2 redis % docker  rmi -f  redis:6.2.14  
Untagged: redis:6.2.14
Untagged: redis@sha256:a4752f210bb45f94067bfca7257c7ebe90e7b4d5457f2ad3f2716ab636f5b2cc
Deleted: sha256:800a4c20dea0ad75bec9f3171f1008142c3bce87cd5cfecc3d3b266048788696

查看镜像

a123456@luludeMacBook-Pro-2 redis % docker images             
REPOSITORY                 TAG       IMAGE ID       CREATED       SIZE
yandex/clickhouse-server   latest    c739327b5607   2 years ago   826MB
yandex/clickhouse-client   latest    8208fbe345cd   2 years ago   805MB
<none>                     <none>    7614ae9453d1   2 years ago   113MB

重新安装Redis

a123456@luludeMacBook-Pro-2 redis % docker run --name redis -p 6379:6379 --privileged=true  -v /Users/a123456/Downloads/redis/data:/data  -v /Users/a123456/Downloads/redis/redis.conf:/etc/redis/redis.conf  -d  redis:6.2.14 redis-server /etc/redis/redis.conf
d44b6b2286349adc563f77304798b72f4f5e34fc3fad48446a7b4ce983149819
a123456@luludeMacBook-Pro-2 redis % docker ps -a   
CONTAINER ID   IMAGE                      COMMAND                  CREATED              STATUS                     PORTS                                                                    NAMES
d44b6b228634   redis:6.2.14               "docker-entrypoint.s…"   About a minute ago   Up About a minute          0.0.0.0:6379->6379/tcp                                                   redis
3f070c2bb470   yandex/clickhouse-server   "/entrypoint.sh"         2 months ago         Exited (255) 4 weeks ago   0.0.0.0:8123->8123/tcp, 0.0.0.0:9000->9000/tcp, 0.0.0.0:9009->9009/tcp   ch-server
a123456@luludeMacBook-Pro-2 redis % docker exec -it d44b6b228634 /bin/bash
root@d44b6b228634:/data# redis-cli
127.0.0.1:6379> get name
"yyp"
127.0.0.1:6379>

我们使用 get name 命令验证重新安装 Redis后,原始数据能够正确恢复。好了,使用Docker 安装 Redis 就介绍到这里。


http://www.ppmy.cn/embedded/12882.html

相关文章

消消乐算法总结

前言 最近在工作中遇到一个问题&#xff0c;做一个消消乐的demo项目&#xff0c;连续相同数目超过四个后就要消除。我在网上看了很多解决方案&#xff0c;有十字形&#xff0c;横向&#xff0c;纵向&#xff0c;梯形搜索。越看越迷糊。这不是用一个BFS就能解决的问题吗&#x…

前端实现水印效果的多种方案

转载自 前端实现水印效果的多种方案_css 水印-CSDN博客 本文由 mdnice 多平台发布

【书生浦语第二期实战营学习笔记作业(四)】

课程文档&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/xtuner/readme.md 作业文档&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/xtuner/homework.md 书生浦语第二期实战营学习笔记&作业(四) 1.1、微调理论讲解及 XTuner 介绍 两种Fin…

【Linux】使用Jenkins + svn + springboot自动构建jar包并自动打包在服务器上运行

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

C语言 | Leetcode C语言题解之第41题缺失的第一个正数

题目&#xff1a; 题解&#xff1a; int firstMissingPositive(int* nums, int numsSize) {for (int i 0; i < numsSize; i) {while (nums[i] > 0 && nums[i] < numsSize &&nums[nums[i] - 1] ! nums[i]) {int t nums[nums[i] - 1];nums[nums[i] -…

Helm dryRun参数学习

在Kubernetes和Helm中&#xff0c;dryrun参数是一种测试工具&#xff0c;它允许用户在不实际执行操作的情况下预览将要发生的结果。这个参数通常用于验证和测试配置更改&#xff0c;而不需要实际应用这些更改。 在Kubernetes中&#xff0c;你可以使用--dry-runclient或--dry-ru…

富格林:掌握鉴别阻挠虚假套路

富格林悉知&#xff0c;最近避险情绪随着地缘危机外溢而迅速升温&#xff0c;现货黄金这一避险投资产品一跃成为火爆选项。但在现货黄金市场中&#xff0c;我们必须要掌握鉴别阻挠虚假套路的方法才可更好地实现盈利。下面富格林为了帮助大家掌握有效阻挠虚假套路&#xff0c;特…

探寻六西格玛黑带培训的奥秘:成就个人与企业双赢

在当今竞争激烈的商业环境中&#xff0c;企业对高效、精准的管理方法的需求日益迫切。六西格玛作为一种以数据为驱动&#xff0c;旨在减少缺陷、提升质量并优化流程的管理哲学&#xff0c;已经在全球范围内得到了广泛的认可和应用。而六西格玛黑带培训&#xff0c;则是获取这一…