Docker 搭建 MySQL 数据库

news2025/2/25 18:24:50

Docker 搭建 MySQL 数据库

  • 前言
  • 一、准备工作
  • 二、设置 MySQL 容器的目录结构
  • 三、配置 MySQL 容器
  • 四、自定义 MySQL 配置
  • 五、端口配置:Host 网络模式 vs Port 映射模式
  • 六、检查 MySQL 容器状态
  • 七、连接到 MySQL 容器
  • 八、备份与恢复
  • 总结


前言

在本篇文章中,我们将详细介绍如何通过 Docker 快速搭建一个 MySQL 数据库环境,并通过一些简单的配置来实现数据持久化、日志管理和定制化的配置文件。


一、准备工作

首先,确保你的系统上已经安装了 Docker。

Linux上进行Docker安装有两种方式:

  1. Docker自动化安装
  2. Docker手动安装

可以根据该文章的步骤进行安装:https://blog.csdn.net/weixin_44876263/article/details/136714078?spm=1001.2014.3001.5502

二、设置 MySQL 容器的目录结构

为了确保容器中的 MySQL 数据持久化并且能够方便地访问,我们需要在宿主机上创建一些本地目录来挂载到 Docker 容器中。这里我们在 /opt/docker/demo 路径下创建 MySQL 相关的目录,包括日志、数据和配置文件目录。

# 安装路径
DIR="/opt/docker/demo"
DOCKER_NAME="docker-mysql"

# 创建目录结构
mkdir -p "$DIR/mysql/log"
mkdir -p "$DIR/mysql/data"
mkdir -p "$DIR/mysql/conf"

这里我们创建了以下几个目录:

  • log:存放 MySQL 容器的日志文件。
  • data:存放 MySQL 容器的数据文件。
  • conf:存放 MySQL 配置文件。

三、配置 MySQL 容器

接下来,我们将使用 Docker 运行一个 MySQL 容器。Docker 提供了一个官方的 mysql:8.0 镜像,我们将基于该镜像来创建容器。

以下是启动 MySQL 容器的命令:

docker run -d \
  --restart=always \
  --name "$DOCKER_NAME" \
  --network host \
  -v "$DIR/mysql/log:/var/log/mysql" \
  -v "$DIR/mysql/data:/var/lib/mysql" \
  -v "$DIR/mysql/conf:/etc/mysql/conf.d" \
  -e MYSQL_ROOT_PASSWORD=root \
  mysql:8.0

解释各个参数:

  • -d:后台运行容器。
  • --restart=always:容器在崩溃或机器重启后会自动重启。
  • --name "$DOCKER_NAME":指定容器名称为 docker-mysql
  • --network host:将容器连接到宿主机的网络,以便外部可以访问 MySQL 服务。
  • -v "$DIR/mysql/log:/var/log/mysql":将宿主机的日志目录挂载到容器内的日志目录。
  • -v "$DIR/mysql/data:/var/lib/mysql":将宿主机的数据目录挂载到容器的数据目录,确保数据持久化。
  • -v "$DIR/mysql/conf:/etc/mysql/conf.d":将宿主机的配置文件目录挂载到容器内的配置目录。
  • -e MYSQL_ROOT_PASSWORD=root:设置 MySQL 根用户的密码为 root
  • mysql:8.0:使用官方的 MySQL 8.0 镜像

四、自定义 MySQL 配置

MySQL 的配置文件可以通过挂载宿主机的配置目录到容器内进行自定义。你可以在 conf 目录下创建一个 custom.cnf 文件,配置 MySQL 的监听端口等参数。

例如,我们可以设置 MySQL 监听的端口为 3307,而不是默认的 3306,或设置时区 +08:00。只需要在 custom.cnf 中添加如下配置:

[mysqld] 

port = 3307
default-time-zone = '+08:00'

然后,确保该文件挂载到容器内的正确位置(/etc/mysql/conf.d/)。

五、端口配置:Host 网络模式 vs Port 映射模式

在 Docker 中,容器的网络配置和端口管理是非常重要的。对于 MySQL 容器,有两种常见的端口配置方式:

  1. Host 网络模式

    在 Docker 中使用 --network host 选项时,容器会直接使用宿主机的网络栈,这意味着容器将使用宿主机的 IP 地址和端口。

    当你使用 Host 网络模式时,容器中的 MySQL 服务将直接暴露在宿主机的默认端口(如 3306)。无需进行端口映射,MySQL 容器将与宿主机共享网络接口。

    配置命令:

    docker run -d \
      --restart=always \
      --name "$DOCKER_NAME" \
      --network host \
      -v "$DIR/mysql/log:/var/log/mysql" \
      -v "$DIR/mysql/data:/var/lib/mysql" \
      -v "$DIR/mysql/conf:/etc/mysql/conf.d" \
      -e MYSQL_ROOT_PASSWORD=root \
      mysql:8.0
    
    • 优点
      • 容器共享宿主机的网络,性能较高。
      • 无需显式端口映射,容器与宿主机共享相同的网络。
    • 缺点
      • 容器与宿主机的网络完全共享,可能会有端口冲突,尤其是多个容器或服务同时运行时。
      • 容器的端口与宿主机端口相同,可能存在安全隐患。
  2. Port 映射模式

    如果你希望对容器的端口进行灵活配置,可以使用 -p 参数将容器的端口映射到宿主机的特定端口。通过这种方式,你可以将容器内的 MySQL 端口(默认为 3306)映射到宿主机上的另一个端口。

    例如,将容器内的 3306 端口映射到宿主机的 3307 端口:

    配置命令:

    docker run -d \
      --restart=always \
      --name "$DOCKER_NAME" \
      -p 3307:3306 \
      -v "$DIR/mysql/log:/var/log/mysql" \
      -v "$DIR/mysql/data:/var/lib/mysql" \
      -v "$DIR/mysql/conf:/etc/mysql/conf.d" \
      -e MYSQL_ROOT_PASSWORD=root \
      mysql:8.0
    
    
    • 优点
      • 容器端口与宿主机端口不同,可以避免端口冲突。
      • 容器与宿主机之间有更好的网络隔离性。
      • 支持多个容器映射到宿主机不同的端口,适合多容器环境。
    • 缺点
      • 可能会导致稍微的性能损失,因为需要进行额外的端口映射。
      • 需要手动管理和指定端口映射。

六、检查 MySQL 容器状态

容器启动后,你可以通过以下命令检查容器是否正常运行:

docker ps

该命令会列出所有正在运行的容器。如果你的 MySQL 容器没有出现在列表中,可以通过查看容器日志来排查问题:

docker logs docker-mysql

七、连接到 MySQL 容器

如果你需要连接到容器内的 MySQL 数据库,可以使用 docker exec 命令进入容器并使用 mysql 客户端进行连接:

docker exec -it docker-mysql mysql -u root -p

输入密码后,你将进入 MySQL 提示符,可以执行 SQL 查询等操作。

八、备份与恢复

为了确保数据的安全性,你可以定期备份 MySQL 数据。因为数据已经挂载到宿主机目录 $DIR/mysql/data,所以你可以直接备份该目录中的数据文件。

例如,你可以使用 tar 命令将数据目录打包备份:

tar -czvf mysql_backup.tar.gz -C "$DIR/mysql" data

恢复时,只需要将备份文件解压到相应的目录即可。


总结

通过 Docker 搭建 MySQL 数据库环境非常简单,并且能够通过挂载宿主机目录的方式实现数据持久化和日志管理。通过修改容器内的配置文件,你还可以自定义 MySQL 的参数,例如监听端口等。

Docker 提供了两种常见的端口配置方式:Host 网络模式Port 映射模式。选择哪种方式取决于你的需求:

  • Host 网络模式:适用于需要高性能、直接使用宿主机网络的场景。
  • Port 映射模式:适用于需要灵活配置端口、避免端口冲突或需要更好网络隔离的场景。

无论选择哪种方式,Docker 都能够通过简单的配置帮助你快速搭建 MySQL 数据库,并且根据你的需求进行灵活的端口管理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2305965.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

公开整理-最新中国城市统计NJExcel+PDF版本(1985-2024年)

数据简介:《中国城市统计NJ》从1985年开始,本NJ内容共分四个部分:第一部分是全国城市行政区划,列有不同区域、不同级别的城市分布情况;第二、三部分分别是地级以上城市统计资料和县级城市统计资料,具体包括人口、劳动力及土地资源、综合经济、工业、交通…

KubeSphere平台安装

KubeSphere简介 KubeSphere 是一款功能强大的容器管理平台,以下是其简介: 1)基本信息 开源项目:基于 Apache-2.0 授权协议开源,由 Google Go、Groovy、HTML/CSS 和 Shell 等多种编程语言开发。基础架构:…

Claude 3.7 Sonnet 泄露,Anthropic 最先进 AI 模型即将在 AWS Bedrock 上首次亮相

(图片:AWS) Anthropic 旗下先进的 AI 模型 Claude 3.7 Sonnet 似乎即将发布。业界预计,亚马逊可能会在2025年2月26日的活动中公布相关消息。泄露的信息表明,该模型将托管于 AWS Bedrock 平台,该平台以提供尖端 AI 模型访问而闻名…

ONNX转RKNN的环境搭建和部署流程

将ONNX模型转换为RKNN模型的过程记录 工具准备 rknn-toolkit:https://github.com/rockchip-linux/rknn-toolkit rknn-toolkit2:https://github.com/airockchip/rknn-toolkit2 rknn_model_zoo:https://github.com/airockchip/rknn_model_zoo ultralytics_yolov8:https://github…

Linux红帽:RHCSA认证知识讲解(二)配置网络与登录本地远程Linux主机

Linux红帽:RHCSA认证知识讲解(二)配置网络与登录本地远程Linux主机 前言一、使用命令行(nmcli 命令)配置网络,配置主机名第一步第二步修改主机名称 二、使用图形化界面(nmtui 命令)配…

深入浅出ES6:现代JavaScript的基石

ES6(ECMAScript 2015)是JavaScript语言的一次重大更新,引入了许多新特性,使JavaScript更加强大、优雅和易于维护。这些特性已经成为现代JavaScript开发的基石,掌握它们对于任何JavaScript开发者都至关重要。本文将深入…

小型字符级语言模型的改进方向和策略

小型字符级语言模型的改进方向和策略 一、回顾小型字符级语言模型的处理流程 前文我们已经从零开始构建了一个小型字符级语言模型,那么如何改进和完善我们的模型呢?有哪些改进的方向?我们先回顾一下模型的流程: 图1 小型字符级语言模型的处理流程 (1)核心模块交互过程:…

一周学会Flask3 Python Web开发-Jinja2模板访问对象

锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 如果渲染模板传的是对象,如果如何来访问呢? 我们看下下面示例: 定义一个Student类 cla…

vue 3D 翻页效果

<template><view class"swipe-container" touchstart"onTouchStart" touchmove"onTouchMove" touchend"onTouchEnd"><view class"page">初始页</view></view> </template><script&g…

npm : 无法加载文件 E:\ProgramFiles\Nodejs\npm.ps1,因为在此系统上禁止运行脚本。

这个错误是因为 Windows 系统的 PowerShell 执行策略 限制了脚本的运行。默认情况下&#xff0c;PowerShell 的执行策略是 Restricted&#xff0c;即禁止运行任何脚本。以下是解决该问题的步骤&#xff1a; 1. 检查当前执行策略 打开 PowerShell&#xff08;管理员权限&#x…

pycharm 调试 debug 进入 remote_sources

解决办法1&#xff1a; pycharm函数跳转到remote_sources中的文件中_pycharm修改remotesource包存放地址-CSDN博客 file->settings->project structure将项目文件夹设为"Sources"&#xff08;此时文件夹会变为蓝色&#xff09;。 解决方法2 Debug:使用Pychar…

测试面试题:以一个登录窗口为例,设计一下登录界面测试的思路和方法

在测试登录窗口时,可以从 表单测试、 逻辑判断和 业务流程三个方面设计测试思路和方法。以下是一个详细的测试方案: 1. 表单测试 表单测试主要关注输入框、按钮等UI元素的正确性和用户体验。 测试点: 输入框测试 用户名和密码输入框是否正常显示。输入框是否支持预期的字符类…

【蓝桥杯】1.k倍区间

前缀和 #include <iostream> using namespace std; const int N100010; long long a[N]; int cnt[N]; int main(){int n, m;cnt[0] 1;cin >> n >> m;long long res 0;for(int i 1; i < n; i){scanf("%d", &a[i]);a[i] a[i-1];res cnt…

机器人部分专业课

华东理工 人工智能与机器人导论 Introduction of Artificial Intelligence and Robots 必修 考查 0.5 8 8 0 1 16477012 程序设计基础 The Fundamentals of Programming 必修 考试 3 64 32 32 1 47450012 算法与数据结构 Algorithm and Data Structure 必修 考试 3 56 40 …

Maven——Maven开发经验总结(1)

摘要 本文总结了 Maven 开发中的多个关键经验&#xff0c;包括如何根据版本号决定推送到 releases 或 snapshots 仓库&#xff0c;如何在构建过程中跳过测试&#xff0c;父项目如何控制子项目依赖版本&#xff0c;父项目依赖是否能传递到子项目&#xff0c;如何跳过 Maven dep…

gitlab 解决双重认证无法登录remote: HTTP Basic: Access denied.

问题&#xff1a;gitlab开启了双因素认证导致无法正常使用 如进行了 OAuth configuration 在进行git操作时如下提示 remote: HTTP Basic: Access denied. The provided password or token is incorrect or your account has 2FA enabled and you must use a personal access…

【Microsoft PowerPoint for Mac】2分钟配置-MAC一键删除PPT中的所有备注

MAC一键删除PPT中的所有备注 1.搜索自动操作2.点击快速操作3.搜索并运行AppleScript4.输入代码&#xff0c;并选择只应用于Microsoft PowerPoint for Mac【右上角】5. CRTLS保存为“清除当前文稿中的所有备注”&#xff0c;PPT中应用。 MAC没自带&#xff0c;需要自己配置 1.搜…

人工智能 阿里云算力服务器的使用

获取免费的阿里云服务器 阿里云免费使用地址&#xff1a; https://free.aliyun.com/ 选择 人工智能平台 PAI 选择交互式建模 再选建立实例。 选择对应的GPU 和镜像&#xff0c;点击确认。 注意&#xff1a;250个小时&#xff0c;用的时候开启&#xff0c;不用的时候关闭&…

硬核技术组合!用 DeepSeek R1、Ollama、Docker、RAGFlow 打造专属本地知识库

文章目录 一、引言二、安装Ollama部署DeepSeekR1三、安装Docker四、安装使用RAGFlow4.1 系统架构4.2 部署流程4.3 使用RAGFlow4.4 在RAGFlow中新增模型4.5 创建知识库4.6 创建私人助理使用RGA 一、引言 本地部署DeepSeek R1 Ollama RAGFlow构建个人知识库&#xff0c;通过将…

记录此刻:历时两月,初步实现基于FPGA的NVMe SSD固态硬盘存储控制器设计!

背景 为满足实验室横向项目需求&#xff0c;在2024年12月中下旬导师提出基于FPGA的NVMe SSD控制器研发项目。项目核心目标为&#xff1a;通过PCIe 3.0 x4接口实现单盘3000MB/s的持续读取速率。 实现过程 调研 花了半个月的时间查阅了一些使用FPGA实现NVME SSD控制器的论文、…