当前位置: 首页 > news >正文

使用 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 配置 三、数据持久化与时间同步 四、部署与管理 五、总结 目录挂载与卷映射的区别 现代软件开发中,微服务架构因其灵活性和可扩展性而备受青睐。为了支持微服务的…...

新增自定义数据功能|UWA Gears V1.0.7

UWA Gears 是UWA最新发布的无SDK性能分析工具。针对移动平台,提供了实时监测和截帧分析功能,帮助您精准定位性能热点,提升应用的整体表现。 本次版本更新新增了自定义数据功能,支持灵活定义和捕获关键性能指标,满足特…...

docker 简要笔记

文章目录 一、前提内容1、docker 环境准备2、docker-compose 环境准备3、流程说明 二、打包 docker 镜像1、基础镜像2、国内镜像源3、基础的dockerfile4、打包镜像 四、构建运行1、docker 部分2、docker-compose 部分2.1、构建docker-compose.yml2.1.1、同目录构建2.1.2、利用镜…...

在Ubuntu上使用Apache+MariaDB安装部署Nextcloud并修改默认存储路径

一、前言 Nextcloud 是一款开源的私有云存储解决方案,允许用户轻松搭建自己的云服务。它不仅支持文件存储和共享,还提供了日历、联系人、任务管理、笔记等丰富的功能。本文将详细介绍如何在 Ubuntu 22.04 LTS 上使用 Apache 和 MariaDB 安装部署 Nextcl…...

【JavaEE】-- 计算机是如何工作的

文章目录 1. 冯诺依曼体系(VonNeumann Architecture)2. CPU 基本工作流程2.1 寄存器(Register)和 内存(RAM)2.2 控制单元 CU(ControlUnit)2.3 指令(Instruction) 3. 操作系统(OperatingSystem)3.1 操作系统的定位3.2 什么是进程/任务(Process…...

政安晨的AI大模型训练实践三:熟悉一下LF训练模型的WebUI

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 目录 启动WebUI 微调模型 LLaMA-Factory 支持通过 WebUI 零代码微调大语言模型。 启动Web…...

基于微信小程序的网上订餐管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...

科技快讯 | 理想官宣:正式收费!WeChat 港币钱包拓宽商户网络;百川智能发布深度思考模型Baichuan-M1-preview

理想官宣:正式收费! 1月23日,理想汽车宣布,理想超充站超时占用费正式运营。触发超时占用费的条件为充电结束后15分钟内未将充电枪插回充电桩,收费标准为2元/分钟,单次封顶200元。理想汽车将在充电结束的四个…...

【java数据结构】map和set

【java数据结构】map和set 一、Map和Set的概念以及背景1.1 概念1.2 背景1.3 模型 二、Map2.1 Map说明2.2 Map的常用方法 三、Set3.1 Set说明3.2 Set的常用方法 四、Set和Map的关系 博客最后附有整篇博客的全部代码!!! 一、Map和Set的概念以及…...

飞牛NAS安装过程中的docker源问题

采用CloudFlare进行飞牛NAS的远程访问 【安全免费】无需公网IP、端口号&#xff0c;NAS外网访问新方法_网络存储_什么值得买 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<EOF {"registry-mirrors": ["https://docker.1panel.dev&quo…...

Linux(Centos 7.6)命令详解:dos2unix

1.命令安装 dos2unix 命令默认情况下是没有安装的&#xff0c;如配置yum源&#xff0c;可通过yum安装命令如下&#xff1a; yum install dos2unix dos2unix 有一个对立的命令unix2dos&#xff0c;也需要yum安装&#xff0c;一般使用不到这里不做过多解释&#xff0c;具体参数…...

Linux MySQL离线安装

一、准备工作 1. 下载MySQL安装包 访问MySQL官方网站&#xff0c;选择适合您Linux系统的MySQL版本进行下载。通常推荐下载Generic Linux (glibc 2.12)版本的.tar.gz压缩包&#xff0c;例如mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz。将下载好的安装包拷贝到Linux服务器的某…...

声明,这些内容和我无关

声明&#xff0c;下面这些内容和我无关&#xff0c;不是我写的&#xff0c;买了我不负责答疑&#xff0c;也不负责其他相关。 一下内容都不是我写的&#xff0c;系统自己加上去的&#xff0c;和我无关&#xff0c;我不负责答疑也不负责其他。...

ISO:摄影中的光线敏感度密码

目录 一、ISO 究竟是什么 二、ISO 与光线的关系 &#xff08;一&#xff09;低 ISO 在充足光线下的表现 &#xff08;二&#xff09;高 ISO 在光线不足时的作用 三、ISO 对画质的影响 &#xff08;一&#xff09;低 ISO 带来的优质画质 &#xff08;二&#xff09;高 IS…...

长短期记忆网络LSTM

视频链接 1.LSTM与RNN的区别 RNN想把所有信息都记住&#xff0c;不管是有用的信息还是没用的信息&#xff0c;并且有梯度爆炸或者梯度消失的问题 而LSTM设计了一个记忆细胞&#xff0c;具备选择记忆功能&#xff0c;可以选择记忆重要信息&#xff0c;过滤掉噪声信息&#xff0…...

2. 握手问题python解法——2024年省赛蓝桥杯真题

原题传送门&#xff1a;1.握手问题 - 蓝桥云课 问题描述 小蓝组织了一场算法交流会议&#xff0c;总共有 50人参加了本次会议。在会议上&#xff0c;大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进行一次握手 (且仅有一次)。但有 7 个人&#xff0c;…...

poi在word中打开本地文件

poi版本 5.2.0 方法1&#xff1a;使用XWPFFieldRun&#xff08;推荐&#xff09; 比如打开当前相对路径的aaaaa.docx XWPFFieldRun run paragraph.createFieldRun();CTRPr ctrPr run.getCTR().addNewRPr();CTFonts font ctrPr.addNewRFonts();// 设置字体font.setAscii(&quo…...

国产编辑器EverEdit - 输出窗口

1 输出窗口 1.1 应用场景 输出窗口可以显示用户执行某些操作的结果&#xff0c;主要包括&#xff1a; 查找类&#xff1a;查找全部&#xff0c;筛选等待操作&#xff0c;可以把查找结果打印到输出窗口中&#xff1b; 程序类&#xff1a;在执行外部程序时(如&#xff1a;命令窗…...

整数的个数(信息学奥赛一本通-1067)

【题目描述】 给定k(1<k<100)个正整数&#xff0c;其中每个数都是大于等于1&#xff0c;小于等于10的数。写程序计算给定的k个正整数中&#xff0c;1&#xff0c;5和10出现的次数。 【输入】 输入有两行&#xff1a;第一行包含一个正整数k&#xff0c;第二行包含k个正整数…...

ios swift画中画技术尝试

继上篇&#xff1a;iOS swift 后台运行应用尝试失败-CSDN博客 为什么想到画中画&#xff0c;起初是看到后台模式里有一个picture in picture&#xff0c;去了解了后发现这个就是小窗口视频播放&#xff0c;方便用户执行多任务。看小窗口视频的同时&#xff0c;可以作其他的事情…...

嵌入式C++ RAII互斥锁封装器MutexLocker详解

1. MutexLocker&#xff1a;嵌入式C RAII风格互斥锁封装器深度解析1.1 设计动机与工程价值在基于mbed RTOS&#xff08;现为Mbed OS中CMSIS-RTOS v2兼容层&#xff09;的嵌入式实时系统开发中&#xff0c;互斥量&#xff08;Mutex&#xff09;是保障多任务共享资源安全访问的核…...

OpenClaw人人养虾:接入Matrix

Matrix 是一个开放的去中心化通讯协议&#xff08;Decentralized Communication Protocol&#xff09;&#xff0c;任何人都可以搭建自己的 Homeserver&#xff08;家服务器&#xff09;并与全球 Matrix 网络互联。OpenClaw 通过 Matrix Client-Server API 实现接入。 前置要求…...

Qwen3-Embedding国产化部署

从单一型人才到AI带领下的复合型人才 1.1 传统职能的终结 传统软件公司怎么干的&#xff1f; 销售、售前、交付、研发、市场、运维——各司其职&#xff0c;职能清晰。看起来很专业&#xff0c;但实际上是什么&#xff1f;一堆冗余的角色在等活干。 这不是高效&#xff0c;这是…...

OpenClaw自动化办公:nanobot镜像处理Excel与PPT文件

OpenClaw自动化办公&#xff1a;nanobot镜像处理Excel与PPT文件 1. 为什么选择OpenClaw处理办公文档&#xff1f; 上周五下午5点&#xff0c;当我面对第7个需要合并的Excel报表时&#xff0c;手指已经因为重复的复制粘贴动作开始发麻。作为团队里负责月度数据汇总的"表哥…...

SAP IDoc入站出站处理全流程拆解:从WE19测试到IDOC_INPUT_函数调试

SAP IDoc接口开发实战&#xff1a;从零构建到生产环境调试全指南 在SAP系统集成领域&#xff0c;IDoc&#xff08;Intermediate Document&#xff09;作为企业级数据交换的标准载体&#xff0c;其重要性不言而喻明。不同于简单的文件传输&#xff0c;一个健壮的IDoc接口需要开发…...

语音播报实时

目录 GPT-SoVITS&#xff08;强烈推荐&#xff09; Fish Speech-1.5 GPT-SoVITS&#xff08;强烈推荐&#xff09; RVC-Boss/GPT-SoVITS: 1 min voice data can also be used to train a good TTS model! (few shot voice cloning) Fish Speech-1.5 追求极致流畅的实时对话&a…...

如何通过WebGLInput彻底解决Unity WebGL平台的输入法兼容性问题

如何通过WebGLInput彻底解决Unity WebGL平台的输入法兼容性问题 【免费下载链接】WebGLInput IME for Unity WebGL 项目地址: https://gitcode.com/gh_mirrors/we/WebGLInput 你是否曾尝试在Unity WebGL应用中实现中文输入&#xff0c;却发现输入法无法正常工作&#xf…...

s2-pro快速上手指南:3步完成文本转语音与音色迁移实操手册

s2-pro快速上手指南&#xff1a;3步完成文本转语音与音色迁移实操手册 1. 平台简介 s2-pro是Fish Audio开源的专业级语音合成模型镜像&#xff0c;它能够将文本内容转换为自然流畅的语音&#xff0c;并支持通过参考音频实现音色迁移功能。这意味着你可以上传一段参考音频&…...

避坑指南:Pyannote3.1+Whisper本地部署的5个常见报错解决方案

避坑指南&#xff1a;Pyannote3.1Whisper本地部署的5个常见报错解决方案 语音处理技术正在重塑教育、会议记录和客服质检等场景的交互方式。当开发者尝试将Whisper的精准语音识别与Pyannote的说话人分离能力结合时&#xff0c;常会在环境配置环节遭遇"拦路虎"。本文…...

水库调度员必看:动态规划在月度发电计划中的5个避坑指南

水库调度员实战指南&#xff1a;动态规划在月度发电计划中的5个关键避坑策略 在水利工程领域&#xff0c;水库调度是一项集科学性、技术性和艺术性于一体的复杂工作。作为水库调度员&#xff0c;我们每天都在与时间、水量和电力需求进行着精妙的博弈。而动态规划作为一种强大的…...