使用 Docker Compose 一键启动 Redis、MySQL 和 RabbitMQ

ops/2025/2/1 1:31:50/

目录

一、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 目录被删除,目录挂载的方式会导致数据丢失;而使用卷映射时,数据仍然安全。

目录挂载和卷映射各有优缺点,不能完全相互替换。目录挂载更适合实时同步和访问宿主机文件,而卷映射更适合数据持久化和多容器共享

 


http://www.ppmy.cn/ops/154624.html

相关文章

TCP/IP 协议:互联网通信的基石

TCP/IP 协议:互联网通信的基石 引言 TCP/IP协议,全称为传输控制协议/互联网协议,是互联网上应用最为广泛的通信协议。它定义了数据如何在网络上传输,是构建现代互联网的基础。本文将深入探讨TCP/IP协议的原理、结构、应用以及其在互联网通信中的重要性。 TCP/IP 协议概述…

穿心莲内酯(andrographolide)生物合成CYP72-文献精读106

Two CYP72 enzymes function as Ent-labdane hydroxylases in the biosynthesis of andrographolide in Andrographis paniculata 两种CYP72酶在穿心莲(Andrographis paniculata)中作为Ent-labdane羟化酶,在穿心莲内酯(andrograp…

A7. Jenkins Pipeline自动化构建过程,可灵活配置多项目、多模块服务实战

服务容器化构建的环境配置构建前需要解决什么下面我们带着问题分析构建的过程:1. 如何解决jenkins执行环境与shell脚本执行环境不一致问题?2. 构建之前动态修改项目的环境变量3. 在通过容器打包时避免不了会产生比较多的不可用的镜像资源,这些资源要是不及时删除掉时会导致服…

Maven的单元测试

1. 单元测试的基本概念 单元测试(Unit Testing) 是一种软件测试方法,专注于测试程序中的最小可测试单元——通常是单个类或方法。通过单元测试,可以确保每个模块按预期工作,从而提高代码的质量和可靠性。 2.安装和配…

Nginx中部署多个前端项目

1,准备前端项目 tlias系统的前端资源 外卖项目的前端资源 2,nginx里面的html文件夹中新建,tlias和sky两个文件夹。 切记这是在nginx/html下创建的 mkdir sky mkdir tlias 把tlias和sky的资源都放到对应的文件夹中 3,编辑配置ngi…

JxBrowser 7.41.7 版本发布啦!

JxBrowser 7.41.7 版本发布啦! • 已更新 #Chromium 至更新版本 • 实施了多项质量改进 🔗 点击此处了解更多详情。 🆓 获取 30 天免费试用。

基于物联网的智能环境监测系统(论文+源码)

1系统的功能及方案设计 本课题为基于物联网的智能环境监测系统的设计与实现,整个系统采用stm32f103单片机作为主控制器,通过DHT11传感器实现智能环境监测系统温度和湿度的检测,通过MQ传感器实现CO2浓度检测,通过光照传感器实现光照…

浅谈Linux 权限、压缩、进程与服务

概述 放假回家,对Linux系统的一些知识进行重新的整理,做到温故而知新,对用户权限管理、文件赋权、压缩文件、进程与服务的知识进行了一次梳理和总结。 权限管理 Linux最基础的权限是用户和文件,先了解基础的用户权限和文件权限…