使用 Docker Compose 一键启动 Redis、MySQL 和 RabbitMQ
目录
一、Docker Compose 简介
二、服务配置详解
1. Redis 配置
2. MySQL 配置
3. RabbitMQ 配置
三、数据持久化与时间同步
四、部署与管理
五、总结
目录挂载与卷映射的区别
现代软件开发中,微服务架构因其灵活性和可扩展性而备受青睐。为了支持微服务的高效运行,我们需要构建一个强大且可靠的基础设施。本文将介绍如何使用 Docker Compose 部署 Redis、MySQL 和 RabbitMQ,这些组件是许多微服务应用的核心依赖。通过 Docker Compose,我们可以轻松地管理这些服务的启动、停止和重启策略,同时确保它们的高可用性和数据持久化。
一、Docker Compose 简介
Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过一个 YAML 文件,我们可以配置多个容器的启动参数、环境变量、网络和卷挂载等信息。这使得部署和管理复杂的多容器应用变得简单而高效。
在本文中,我们将使用 Docker Compose 部署 Redis、MySQL 和 RabbitMQ,为微服务应用提供存储、消息队列和数据库支持。
二、服务配置详解
1. Redis 配置
Redis 是一个高性能的键值存储数据库,广泛用于缓存、消息队列和会话存储等场景。在我们的 Docker Compose 文件中,Redis 的配置如下:
redis:image: bitnami/redis:latestrestart: alwayscontainer_name: redisenvironment:- REDIS_PASSWORD=123456ports:- "6379:6379"volumes:- ./docker/data/redis:/bitnami/redis/data- ./docker/config/redis:/opt/bitnami/redis/mounted-etc- /etc/localtime:/etc/localtime:ro
-
image: 使用 Bitnami 提供的 Redis 镜像,它是一个经过优化且易于使用的 Redis 镜像。
-
restart: 设置为
always,确保 Redis 容器在退出后会自动重启。 -
environment: 设置 Redis 的密码为
123456,以增强安全性。 -
ports: 将容器的 6379 端口映射到宿主机的 6379 端口,方便外部访问。
-
volumes: 挂载本地目录到容器内部,确保 Redis 的数据和配置文件持久化。同时,挂载
/etc/localtime文件以同步宿主机的时间。
2. MySQL 配置
MySQL 是一个广泛使用的开源关系型数据库,适用于存储结构化数据。在我们的配置中,MySQL 的设置如下:
mysql:image: mysql:8.0.31restart: alwayscontainer_name: mysqlenvironment:- MYSQL_ROOT_PASSWORD=123456- MYSQL_DATABASE=appstoreports:- "3306:3306"- "33060:33060"volumes:- ./docker/config/mysql:/etc/mysql/conf.d- ./docker/data/mysql:/var/lib/mysql- /etc/localtime:/etc/localtime:ro
-
image: 使用 MySQL 官方镜像的 8.0.31 版本。
-
restart: 设置为
always,确保 MySQL 容器在退出后自动重启。 -
environment: 设置 MySQL 的 root 用户密码为
123456,并创建一个名为appstore的数据库。 -
ports: 将容器的 3306 端口映射到宿主机的 3306 端口,用于 MySQL 的主服务;将 33060 端口映射到宿主机的 33060 端口,用于 MySQL 的管理接口。
-
volumes: 挂载本地目录到容器内部,确保 MySQL 的配置文件和数据持久化。同时,挂载
/etc/localtime文件以同步宿主机的时间。
3. RabbitMQ 配置
RabbitMQ 是一个功能强大的消息队列系统,支持多种消息协议,广泛用于微服务之间的异步通信。在我们的配置中,RabbitMQ 的设置如下:
rabbit:image: rabbitmq:3-managementrestart: alwayscontainer_name: rabbitmqhostname: rabbitports:- "5672:5672"- "15672:15672"environment:- RABBITMQ_DEFAULT_USER=rabbit- RABBITMQ_DEFAULT_PASS=rabbit- RABBITMQ_DEFAULT_VHOST=devvolumes:- ./docker/data/rabbitmq:/var/lib/rabbitmq- ./docker/config/rabbitmq:/etc/rabbitmq- /etc/localtime:/etc/localtime:rocommand: >bash -c "rabbitmq-plugins enable rabbitmq_management &&rabbitmq-server"
-
image: 使用 RabbitMQ 官方镜像的 3-management 版本,它包含了管理插件。
-
restart: 设置为
always,确保 RabbitMQ 容器在退出后自动重启。 -
hostname: 设置容器的主机名为
rabbit,便于在容器网络中识别。 -
ports: 将容器的 5672 端口映射到宿主机的 5672 端口,用于消息队列通信;将 15672 端口映射到宿主机的 15672 端口,用于管理 RabbitMQ 的 Web 界面。
-
environment: 设置 RabbitMQ 的默认用户名为
rabbit,密码为rabbit,并创建一个名为dev的虚拟主机。 -
volumes: 挂载本地目录到容器内部,确保 RabbitMQ 的数据和配置文件持久化。同时,挂载
/etc/localtime文件以同步宿主机的时间。 -
command: 启用 RabbitMQ 的管理插件,并启动 RabbitMQ 服务。
三、数据持久化与时间同步
在上述配置中,我们通过挂载本地目录到容器的特定路径,实现了数据的持久化。这意味着即使容器被删除或重新启动,数据也不会丢失。此外,通过挂载 /etc/localtime 文件,我们确保了容器内部的时间与宿主机保持一致,这对于日志记录和时间敏感的应用非常重要。
四、部署与管理
要部署上述服务,只需将上述配置保存为 docker-compose.yml 文件,然后在终端中运行以下命令:
docker-compose up -d
这将启动 Redis、MySQL 和 RabbitMQ 容器,并将它们置于后台运行。如果需要停止服务,可以运行:
docker-compose down
五、总结
通过 Docker Compose,我们可以轻松地部署和管理 Redis、MySQL 和 RabbitMQ 这些关键的微服务基础设施组件。这种配置方式不仅提高了开发和部署的效率,还确保了服务的高可用性和数据的持久化。无论是在开发环境还是生产环境中,这种方案都能为微服务应用提供坚实的基础支持。
目录挂载与卷映射的区别
| 特性 | 目录挂载(Bind Mounts) | 卷映射(Volumes) |
|---|---|---|
| 数据存储位置 | 宿主机的文件系统 | Docker 管理的默认位置或指定路径 |
| 依赖宿主机路径 | 是,路径必须存在 | 否,由 Docker 管理 |
| 数据持久化 | 是,但依赖宿主机路径 | 是,独立于容器生命周期 |
| 实时同步 | 是,宿主机和容器实时同步 | 不直接同步,但可以通过操作卷实现 |
| 管理方式 | 依赖宿主机文件系统 | 由 Docker 管理,更灵活 |
| 适用场景 | 开发、实时同步、访问宿主机文件 | 数据持久化、多容器共享、迁移 |
是否可以相互替换?
目录挂载和卷映射不能完全相互替换,因为它们的设计目标和适用场景不同。选择哪种方式取决于具体需求:
-
如果你需要实时同步宿主机和容器之间的文件,并且宿主机上有现成的目录或文件,那么目录挂载是更好的选择。
-
如果你需要数据持久化、独立于宿主机文件系统,并且可能需要在多个容器之间共享数据,那么卷映射是更好的选择。
示例对比
假设你有一个 MySQL 数据库容器,需要持久化数据:
-
使用目录挂载:
volumes:- ./mysql_data:/var/lib/mysql这种方式将宿主机的
./mysql_data目录挂载到容器的/var/lib/mysql,数据存储在宿主机的文件系统中。 -
使用卷映射:
volumes:- mysql_data:/var/lib/mysql这种方式创建了一个名为
mysql_data的卷,数据存储在 Docker 管理的路径中,与宿主机文件系统解耦。
如果宿主机的 ./mysql_data 目录被删除,目录挂载的方式会导致数据丢失;而使用卷映射时,数据仍然安全。
目录挂载和卷映射各有优缺点,不能完全相互替换。目录挂载更适合实时同步和访问宿主机文件,而卷映射更适合数据持久化和多容器共享
相关文章:
使用 Docker Compose 一键启动 Redis、MySQL 和 RabbitMQ
目录 一、Docker Compose 简介 二、服务配置详解 1. Redis 配置 2. MySQL 配置 3. RabbitMQ 配置 三、数据持久化与时间同步 四、部署与管理 五、总结 目录挂载与卷映射的区别 现代软件开发中,微服务架构因其灵活性和可扩展性而备受青睐。为了支持微服务的…...
【问题解决】el-upload数据上传成功后不显示成功icon
el-upload数据上传成功后不显示成功icon 原因 由于后端返回数据与要求形式不符,使用el-upload默认方法调用onSuccess钩子失败,上传文件的状态并未发生改变,因此数据上传成功后并未显示成功的icon标志。 解决方法 点击按钮,调用…...
spring框架之IoC学习与梳理(1)
目录 一、spring-IoC的基本解释。 二、spring-IoC的简单demo(案例)。 (1)maven-repository官网中找依赖坐标。 (2).pom文件中通过标签引入。 (3)使用lombok帮助快速开发。 ÿ…...
MQ的可靠消息投递机制
确保消息在发送、传递和消费过程中不会丢失、重复消费或错乱。 1. 消息的可靠投递 消息持久化: 消息被发送到队列后会存储在磁盘上,即使消息队列崩溃,消息也不会丢失。例如:Kafka、RabbitMQ等都支持持久化消息。Kafka通过将消息存…...
Mono里运行C#脚本35—加载C#语言基类的过程
前面大体地分析了整个Mono运行过程,主要从文件的加载,再到EXE文件的入口点, 然后到方法的编译,机器代码的生成,再到函数调用的跳板转换,进而解析递归地实现JIT。 但是还有很多功能没有解析的,就是C#语言相关最多的,就是类的加载,以及类语言设计的实现属性, 比如类的…...
location+rewrite实现隐性域名配置
隐性域名:访问www.a.com 则跳转到www.b.com的页面,但是地址栏还是显示www.a.com 1、配置基于根目录的隐性域名(就是nginx反向代理) 访问http://www.bbb.org:8002, 跳转http://www.accp.org:8001的页面,地址…...
150 Linux 网络编程6 ,从socket 到 epoll整理。listen函数参数再研究
一 . 只能被一个client 链接 socket例子 此例子用于socket 例子, 该例子只能用于一个客户端连接server。 不能用于多个client 连接 server socket_server_support_one_clientconnect.c /* 此例子用于socket 例子, 该例子只能用于一个客户端连接server。…...
centos7 配置国内镜像源安装 docker
使用国内镜像源:由于 Docker 的官方源在国内访问可能不稳定,你可以使用国内的镜像源,如阿里云的镜像源。手动创建 /etc/yum.repos.d/docker-ce.repo 文件,并添加以下内容: [docker-ce-stable] nameDocker CE Stable -…...
周末总结(2024/01/25)
工作 人际关系核心实践: 要学会随时回应别人的善意,执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己,抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内,职场社交不要放在5min以外 职场的人际关系在面对利…...
【go语言】map 和 list
一、map map 是一种无序的键值对的集合。 无序 :map[key]键值对:key - value map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。map 是一种集合,所以我们可以像迭代数组和切片那样迭代他。…...
PCIe 个人理解专栏——【2】LTSSM(Link Training and Status State Machine)
前言: 链路训练和状况状态机LTSSM(Link Training and Status State Machine)是整个链路训练和运行中状态的状态转换逻辑关系图,总共有11个状态。 正文: 包括检测(Detect),轮询&…...
《DiffIR:用于图像修复的高效扩散模型》学习笔记
paper:2303.09472 GitHub:GitHub - Zj-BinXia/DiffIR: This project is the official implementation of Diffir: Efficient diffusion model for image restoration, ICCV2023 目录 摘要 1、介绍 2、相关工作 2.1 图像恢复(Image Rest…...
Vue3 30天精进之旅:Day01 - 初识Vue.js的奇妙世界
引言 在前端开发领域,Vue.js是一款极具人气的JavaScript框架。它以其简单易用、灵活高效的特性,吸引了大量开发者。本文是“Vue 3之30天系列学习”的第一篇博客,旨在帮助大家快速了解Vue.js的基本概念和核心特性,为后续的深入学习…...
[笔记] 极狐GitLab实例 : 手动备份步骤总结
官方备份文档 : 备份和恢复极狐GitLab 一. 要求 为了能够进行备份和恢复,请确保您系统已安装 Rsync。 如果您安装了极狐GitLab: 如果您使用 Omnibus 软件包,则无需额外操作。如果您使用源代码安装,您需要确定是否安装了 rsync。…...
将本地项目上传到 GitLab/GitHub
以下是将本地项目上传到 GitLab 的完整步骤,从创建仓库到推送代码的详细流程: 1. 在 GitLab 上创建新项目 登录 GitLab,点击 New project。选择 Create blank project。填写项目信息: Project name: 项目名称(如 my-p…...
switch组件的功能与用法
文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了PageView这个Widget,本章回中将介绍Switch Widget.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里介绍的Switch是指左右滑动的开关,常用来表示某项设置是打开还是关闭。Fl…...
mac 电脑上安装adb命令
在Mac下配置android adb命令环境,配置方式如下: 1、下载并安装IDE (android studio) Android Studio官网下载链接 详细的安装连接请参考 Mac 安装Android studio 2、配置环境 在安装完成之后,将android的adb工具所在…...
Couchbase UI: Dashboard
以下是 Couchbase UI Dashboard 页面详细介绍,包括页面布局和功能说明,帮助你更好地理解和使用。 1. 首页(Overview) 功能:提供集群的整体健康状态和性能摘要 集群状态 节点健康状况:绿色(正…...
[极客大挑战 2019]Knife1
题目 蚁剑直接连接密码是Syc 拿下flag flag{1d373584-fc74-4a2c-a6d4-3691314be4ab}...
第17篇:python进阶:详解数据分析与处理
第17篇:数据分析与处理 内容简介 本篇文章将深入探讨数据分析与处理在Python中的应用。您将学习如何使用pandas库进行数据清洗与分析,掌握matplotlib和seaborn库进行数据可视化,以及处理大型数据集的技巧。通过丰富的代码示例和实战案例&am…...
【Maui】提示消息的扩展
文章目录 前言一、问题描述二、解决方案三、软件开发(源码)3.1 消息扩展库3.2 消息提示框使用3.3 错误消息提示使用3.4 问题选择框使用 四、项目展示 前言 .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移…...
消息队列篇--通信协议扩展篇--二进制编码(ASCII,UTF-8,UTF-16,Unicode等)
1、ASCII(American Standard Code for Information Interchange) 范围:0 到 127(共 128 个字符)描述:ASCII 是一种早期的字符编码标准,主要用于表示英文字母、数字和一些常见的符号。每个字符占…...
CentOS 7 搭建lsyncd实现文件实时同步 —— 筑梦之路
在 CentOS 7 上搭建 lsyncd(Live Syncing Daemon)以实现文件的实时同步,可以按照以下步骤进行操作。lsyncd 是一个基于 inotify 的轻量级实时同步工具,支持本地和远程同步。以下是详细的安装和配置步骤: 1. 系统准备 …...
【2025最新计算机毕业设计】基于SSM房屋租赁平台【提供源码+答辩PPT+文档+项目部署】(高质量源码,可定制,提供文档,免费部署到本地)
作者简介:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容:🌟Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…...
(开源)基于Django+Yolov8+Tensorflow的智能鸟类识别平台
1 项目简介(开源地址在文章结尾) 系统旨在为了帮助鸟类爱好者、学者、动物保护协会等群体更好的了解和保护鸟类动物。用户群体可以通过平台采集野外鸟类的保护动物照片和视频,甄别分类、实况分析鸟类保护动物,与全世界各地的用户&…...
【转帖】eclipse-24-09版本后,怎么还原原来版本的搜索功能
【1】原贴地址:eclipse - 怎么还原原来版本的搜索功能_eclipse打开类型搜索类功能失效-CSDN博客 https://blog.csdn.net/sinat_32238399/article/details/145113105 【2】原文如下: 更新eclipse-24-09版本后之后,新的搜索功能(CT…...
【自定义函数】编码-查询-匹配
目录 自定义编码匹配编码匹配改进 sheet来源汇总来源汇总改进 END 自定义编码匹配 在wps vb环境写一个新的excel函数名为编码匹配,第一个参数指定待匹配文本所在单元格(相对引用),第二个参数指定关键词区域(绝对引用&…...
16 分布式session和无状态的会话
在我们传统的应用中session存储在服务端,减少服务端的查询压力。如果以集群的方式部署,用户登录的session存储在该次登录的服务器节点上,如果下次访问服务端的请求落到其他节点上就需要重新生成session,这样用户需要频繁的登录。 …...
git基础指令大全
版本控制 git管理文件夹 进入要管理的文件夹 — 进入 初始化(提名) git init 管理文件夹 生成版本 .git ---- git在管理文件夹时,版本控制的信息 生成版本 git status 检测当前文件夹下的文件状态 (检测,检测之后就要管理了…...
Android实训九 数据存储和访问
实训9 数据存储和访问 一、【实训目的】 1、 SharedPreferences存储数据; 2、 借助Java的I/O体系实现文件的存储, 3、使用Android内置的轻量级数据库SQLite存储数据; 二、【实训内容】 1、实现下图所示的界面,实现以下功能: 1ÿ…...
