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

使用Docker方式一键部署MySQL和Redis数据库详解

一、前言

数据库是现代应用开发中不可或缺的一部分,MySQL和Redis作为两种广泛使用的数据库系统,分别用于关系型数据库和键值存储。本文旨在通过Docker和Docker Compose的方式,提供一个简洁明了的一键部署方案,确保数据库服务的稳定运行与持久化存储。

二、Docker及Docker Compose安装

2.1 Docker安装

Docker安装过程略有不同,根据您的操作系统选择适合的安装方式。以下以Ubuntu为例,简要说明安装步骤:

  1. 更新包管理器

    sudo apt-get update
    
  2. 安装Docker

    sudo apt-get install -y docker.io
    
  3. 启动Docker服务并设置开机自启

    sudo systemctl start docker
    sudo systemctl enable docker
    
  4. 验证Docker安装

    sudo docker --version
    

2.2 Docker Compose安装

Docker Compose的安装相对简单,同样以Ubuntu为例:

  1. 下载Docker Compose

    sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    

    请根据https://github.com/docker/compose/releases页面上的最新版本调整上述命令中的版本号。

  2. 赋予执行权限

    sudo chmod +x /usr/local/bin/docker-compose
    
  3. 验证Docker Compose安装

    docker-compose --version
    

三、编写Docker Compose文件

接下来,我们将编写一个docker-compose.yml文件来定义MySQL和Redis的服务,以及它们之间的网络配置和持久化存储设置。

version: "3"# 声明一个名为 'network' 的网络,配置子网和默认网关
networks:network:ipam:driver: defaultconfig:- subnet: '177.7.0.0/16'# 定义MySQL和Redis的持久化存储卷
volumes:mysql:redis:# 定义服务
services:mysql:image: mysql:8.0.21container_name: gva-mysqlcommand: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_cirestart: alwaysports:- "13306:3306"environment:MYSQL_ROOT_PASSWORD: 'Aa@6447985' # 设置root用户密码MYSQL_DATABASE: 'qmPlus'MYSQL_USER: 'gva'MYSQL_PASSWORD: 'Aa@6447985'healthcheck:test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "gva", "-pAa@6447985"]interval: 10stimeout: 5sretries: 3volumes:- mysql:/var/lib/mysql # 将MySQL的data目录挂载到volume上,实现数据持久化- ./init.sql:/docker-entrypoint-initdb.d/init.sql # 初始化脚本networks:network:ipv4_address: 177.7.0.13 # 指定MySQL容器的IP地址redis:image: redis:6.0.6container_name: gva-redisrestart: alwaysports:- '16379:6379'healthcheck:test: ["CMD-SHELL", "redis-cli ping | grep PONG || exit 1"]interval: 10stimeout: 5sretries: 3volumes:- redis:/data # 将Redis的数据目录挂载到volume上,实现数据持久化networks:network:ipv4_address: 177.7.0.14 # 指定Redis容器的IP地址

3.1 配置解释

  • networks: 定义了一个名为network的自定义网络,其中设置了子网范围为177.7.0.0/16。这样可以为MySQL和Redis容器分配固定的IP地址,便于管理和维护。

  • volumes: 为MySQL和Redis分别定义了存储卷mysqlredis,用于保存数据库文件,防止数据丢失。

  • services: 这里定义了两个服务,分别是MySQL和Redis。

    • MySQL:

      • 使用指定版本的MySQL镜像。
      • 通过command字段设置了MySQL的启动参数,包括字符集和排序规则。
      • environment字段设置了MySQL的环境变量,包括初始化数据库、用户名、密码等。
      • healthcheck字段定义了健康检查机制,帮助监控MySQL服务的正常运行状态。
      • volumes字段将MySQL的data目录与volume关联起来,同时挂载了初始化脚本。
      • networks字段将MySQL容器加入到自定义网络,并指定了其IP地址。
    • Redis:

      • 使用指定版本的Redis镜像。
      • healthcheck字段定义了健康检查机制,帮助监控Redis服务的正常运行状态。
      • volumes字段将Redis的数据目录与volume关联起来。
      • networks字段将Redis容器加入到自定义网络,并指定了其IP地址。
  • init.sql: 这是一个初始化脚本,用于在MySQL启动时自动创建数据库qmPlus和用户gva,并授予相应的权限。具体内容如下:

    CREATE DATABASE IF NOT EXISTS qmPlus;
    CREATE USER IF NOT EXISTS 'gva'@'177.7.0.1' IDENTIFIED BY 'Aa@6447985';
    GRANT ALL PRIVILEGES ON qmPlus.* TO 'gva'@'177.7.0.1';
    FLUSH PRIVILEGES;
    

注意:这里创建的用户gva配置允许从177.7.0.1进行连接,这个是容器网络的网关地址。为什么要配置为它?是为了让容器外的宿主机能够通过13306端口连接。

四、启动服务

在编写好docker-compose.yml文件后,即可通过Docker Compose命令来启动服务。

  1. 创建并启动容器

    sudo docker-compose -f deploy/docker-compose/docker-compose.yaml up -d
    
    • -d表示以后台模式(detached)运行容器。
  2. 检查容器状态

    docker-compose ps
    #进入某个容器
    sudo docker exec -it gva-mysql bash
    #查看容器挂载的卷sudo docker volume ls#进入容器的卷sudo docker run -it --rm -v docker-compose_server:/volume-data --name temp-container busybox#查看端口占用情况sudo netstat -tulpn | grep :13306
    

    该命令将列出所有由docker-compose.yml文件定义的服务及其状态。

五、停止服务

若需要停止并移除所有由docker-compose.yml文件定义的容器,可以使用以下命令:

docker-compose down
  • 该命令会停止并移除所有服务对应的容器,同时保留volume中的数据,从而达到持久化存储的目的。

六、总结

通过本文,您已经了解了如何利用Docker Compose实现MySQL和Redis的一键部署,包括Docker和Docker Compose的安装、docker-compose.yml文件的编写以及服务的启动与停止。

这种方法不仅简化了数据库服务的配置和管理,还确保了数据的安全性。希望对您有所帮助!

相关文章:

使用Docker方式一键部署MySQL和Redis数据库详解

一、前言 数据库是现代应用开发中不可或缺的一部分,MySQL和Redis作为两种广泛使用的数据库系统,分别用于关系型数据库和键值存储。本文旨在通过Docker和Docker Compose的方式,提供一个简洁明了的一键部署方案,确保数据库服务的稳…...

2020年蓝桥杯Java B组第二场题目+部分个人解析

#A&#xff1a;门牌制作 624 解一&#xff1a; public static void main(String[] args) {int count0;for(int i1;i<2020;i) {int ni;while(n>0) {if(n%102) {count;}n/10;}}System.out.println(count);} 解二&#xff1a; public static void main(String[] args) {…...

[深度学习] 大模型学习2-提示词工程指北

在文章大语言模型基础知识里&#xff0c;提示词工程&#xff08;Prompt Engineering&#xff09;作为大语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;应用构建的一种方式被简要提及&#xff0c;本文将着重对该技术进行介绍。 提示词工程就是在和LLM聊…...

FPGA之硬件设计笔记-持续更新中

目录 1、说在前面2、FPGA硬件设计总计说明3、 原理图详解 - ARITX - 7 系列3.1 顶层框图介绍3.2 FPGA 电源sheet介绍&#xff1a;3.2.1 bank 14 和 bank 15的供电3.2.2 bank 0的供电3.2.3 Bank34 35 的供电 3.3 核电压和RAM电压以及辅助电压 4 原理图详解-- Ultrascale ARTIX4.…...

vue cli 与 vite的区别

1、现在我们一般会用vite来构建vue3的项目。 2、之前一开始的时候&#xff0c;我们会用vue cli的vue create来构建项目。 3、它们之间有什么区别呢&#xff1f; 1. 设计理念 Vue CLI&#xff1a; 是 Vue.js 官方提供的命令行工具&#xff0c;主要用于快速搭建 Vue 项目。 提…...

怎么在本地环境安装yarn包

一、安装Yarn的前置条件 安装Node.js和npm Yarn依赖于Node.js环境&#xff0c;需先安装Node.js官网的最新稳定版&#xff08;建议≥16.13.0&#xff09;。安装时勾选“Add to PATH”以自动配置环境变量。 二、安装Yarn的多种方式 1. 通过npm全局安装&#xff08;通用&#xf…...

【大模型】AI 辅助编程操作实战使用详解

目录 一、前言 二、AI 编程介绍 2.1 AI 编程是什么 2.1.1 为什么需要AI辅助编程 2.2 AI 编程主要特点 2.3 AI编程底层核心技术 2.4 AI 编程核心应用场景 三、AI 代码辅助编程解决方案 3.1 AI 大模型平台 3.1.1 AI大模型平台代码生成优缺点 3.2 AI 编码插件 3.3 AI 编…...

react18自定义hook实现

概念&#xff1a;自定义 hook 是一种将组件逻辑提取到可复用函数中的方式&#xff0c;它允许你在多个组件中共享相同的状态和行为。自定义 hook 的本质上是一个普通的 JavaScript 函数&#xff0c;它可以使用 React 内部的 hook&#xff08;如 useState、useEffect、useContext…...

一周学会Flask3 Python Web开发-Jinja2模板过滤器使用

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 在Jinja2中&#xff0c;过滤器(filter)是一些可以用来修改和过滤变量值的特殊函数&#xff0c;过滤器和变量用一个竖线 | &a…...

使用PDFMiner.six解析PDF数据

PDF&#xff08;可移植文档格式&#xff09;文件是由Adobe创建的一种灵活的文件格式&#xff0c;它允许文档在不同的软件、硬件和操作系统中一致地显示。每个PDF文件都包含对固定布局文档的全面描述&#xff0c;包括文本、字体、图形和其他必要的显示元素。pdf通常用于文档共享…...

本地svn

参考补充&#xff1a;https://blog.csdn.net/hhl_work/article/details/107832414 先在D:\coding_cangku下新建空文件夹&#xff0c;例&#xff1a;code1【类似gitee线上仓库】点击进入code1&#xff0c;右键选择TortoiseSVN&#xff0c;再下一级菜单下点击Create repository …...

金融支付行业技术侧重点

1. 合规问题 第三方支付系统的平稳运营&#xff0c;严格遵循《非银行支付机构监督管理条例》的各项条款是基础与前提&#xff0c;其中第十八条的规定堪称重中之重&#xff0c;是支付机构必须牢牢把握的关键准则。 第十八条明确指出&#xff0c;非银行支付机构需构建起必要且独…...

axios几种请求类型的格式

Axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;广泛用于浏览器和 Node.js 中发送 HTTP 请求。它支持多种请求格式&#xff0c;包括 GET、POST、PUT、DELETE 等。也叫RESTful 目录 一、axios几种请求类型的格式 1、get请求 2、post请求 3、put请求 4、delete请求 二…...

二、IDE集成DeepSeek保姆级教学(使用篇)

各位看官老爷好&#xff0c;如果还没有安装DeepSeek请查阅前一篇 一、IDE集成DeepSeek保姆级教学(安装篇) 一、DeepSeek在CodeGPT中使用教学 1.1、Edit Code 编辑代码 选中代码片段 —> 右键 —> CodeGPT —> Edit Code, 输入自然语言可编辑代码&#xff0c;点击S…...

通过理解 sk_buff 深入掌握 Linux 内核自定义协议族的开发实现

要开发 Linux 内核中的自定义协议族(如私有传输层或网络层协议),需基于 sk_buff 的结构和操作,结合内核网络栈的扩展机制。以下是实现这一目标的分步指南: 1. 协议族开发的核心步骤 (1) 注册自定义协议族 定义协议号 在 <linux/if_ether.h> 或自定义头文件中分配唯…...

Qt 自带颜色属性

Qt 系统自带颜色如下&#xff1a; enum GlobalColor {color0,color1,black,white,darkGray,gray,lightGray,red,green,blue,cyan,magenta,yellow,darkRed,darkGreen,darkBlue,darkCyan,darkMagenta,darkYellow,transparent};对应颜色如下&#xff1a; color0: 这是自定义颜色…...

Linux的文件与目录管理

rm -rf / 列出目录内容和属性 命令&#xff1a;ls 格式&#xff1a;ls 选项 文件名 例&#xff1a; ls -a 打印工作路径 命令&#xff1a;pwd 切换工作目录 命令&#xff1a;cd 格式&#xff1a;cd 相对路径或者绝对路径 查看文件类型 命令&#xff1a;file 格式…...

常用的 pip 命令

pip 是 Python 的包管理工具&#xff0c;可用于安装、卸载、更新和管理 Python 包。以下是一些常用的 pip 命令&#xff1a; 1. 安装包 安装最新版本的包 pip install package_namepackage_name 是你要安装的 Python 包的名称&#xff0c;例如 pip install requests 可以安装…...

Vue 项目中配置代理的必要性与实现指南

Vue 项目中配置代理的必要性与实现指南 在 Vue 前端项目的开发过程中&#xff0c;前端与后端地址通常不同&#xff0c;可能引发跨域问题。为了在开发环境下顺畅地请求后端接口&#xff0c;常常会通过配置**代理&#xff08;proxy&#xff09;**来解决问题。这篇文章将详细解析…...

【QT】QLinearGradient 线性渐变类简单使用教程

目录 0.简介 1&#xff09;qtDesigner中 2&#xff09;实际执行 1.功能详述 3.举一反三的样式 0.简介 QLinearGradient 是 Qt 框架中的一个类&#xff0c;用于定义线性渐变效果&#xff08;通过样式表设置&#xff09;。它可以用来填充形状、背景或其他图形元素&#xff0…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

Vue 模板语句的数据来源

&#x1f9e9; Vue 模板语句的数据来源&#xff1a;全方位解析 Vue 模板&#xff08;<template> 部分&#xff09;中的表达式、指令绑定&#xff08;如 v-bind, v-on&#xff09;和插值&#xff08;{{ }}&#xff09;都在一个特定的作用域内求值。这个作用域由当前 组件…...