民工心事 发表于 2025-4-19 04:59:01

Docker 搭建 MySQL 数据库

前言

在本篇文章中,我们将详细介绍怎样通过 Docker 快速搭建一个 MySQL 数据库环境,并通过一些简单的设置来实现数据持久化、日志管理和定制化的设置文件。
https://i-blog.csdnimg.cn/direct/01c4e304de2d4530a2559795ac0f16e3.png
一、预备工作

首先,确保你的系统上已经安装了 Docker。
Linux上举行Docker安装有两种方式:

[*]Docker自动化安装
[*]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 中添加如下设置:


port = 3307
default-time-zone = '+08:00'
然后,确保该文件挂载到容器内的正确位置(/etc/mysql/conf.d/)。
五、端口设置:Host 网络模式 vs Port 映射模式

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

[*] 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


[*]优点

[*]容器共享宿主机的网络,性能较高。
[*]无需显式端口映射,容器与宿主机共享相同的网络。

[*]缺点

[*]容器与宿主机的网络完全共享,可能会有端口辩论,尤其是多个容器或服务同时运行时。
[*]容器的端口与宿主机端口相同,可能存在安全隐患。


[*] 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 数据库,并且根据你的需求举行灵活的端口管理。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Docker 搭建 MySQL 数据库