当前位置: 首页 > 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;可以作其他的事情…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙

WebGL&#xff1a;在浏览器中解锁3D世界的魔法钥匙 引言&#xff1a;网页的边界正在消失 在数字化浪潮的推动下&#xff0c;网页早已不再是静态信息的展示窗口。如今&#xff0c;我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室&#xff0c;甚至沉浸式的V…...

C++ 类基础:封装、继承、多态与多线程模板实现

前言 C 是一门强大的面向对象编程语言&#xff0c;而类&#xff08;Class&#xff09;作为其核心特性之一&#xff0c;是理解和使用 C 的关键。本文将深入探讨 C 类的基本特性&#xff0c;包括封装、继承和多态&#xff0c;同时讨论类中的权限控制&#xff0c;并展示如何使用类…...