☰
Docker 简介及 Docker 安装 Redis、MySQL 并实现数据挂载宿主机
2026/9/24 16:04:09 网站建设 项目流程

1. 引言

在本地开发、测试或部署小型项目时,手动安装 Redis、MySQL 等中间件往往比较繁琐:需要处理依赖、配置、环境变量、版本冲突等问题。Docker 通过容器化技术,把应用及其依赖打包成一个个独立、可移植的容器,让我们可以用几条命令快速启动 Redis、MySQL 服务,并结合数据卷把数据持久化到宿主机,避免容器删除后数据丢失。

本文将从 Docker 的基本概念讲起,并演示如何在宿主机上安装 Redis 和 MySQL,同时通过目录挂载实现数据持久化。

2. Docker 简介

2.1 什么是 Docker

Docker 是一个开源的容器化平台,它允许开发者把应用及其依赖环境打包成标准化的镜像,然后在任意安装了 Docker 的机器上运行。相比虚拟机,Docker 容器共享宿主机内核,启动更快、占用资源更少,非常适合微服务部署、持续集成和本地开发环境搭建。

2.2 核心概念

  • 镜像(Image):类似一个只读的模板,包含运行应用所需的操作系统、依赖库和程序文件。
  • 容器(Container):镜像运行起来的实例,可以被启动、停止、删除。
  • 数据卷(Volume):用于把容器内的数据持久化到宿主机,实现数据与容器生命周期的解耦。
  • 仓库(Registry):用于存储和分发镜像,如 Docker Hub。

简单来说,镜像类似于程序的安装包,容器是安装后正在运行的程序,数据卷则负责把重要数据保存到宿主机。

3. 环境准备

开始之前,请确认宿主机已经正确安装 Docker,并启动 Docker 服务。可以使用以下命令检查:

docker --version docker info

如果能够正常输出版本信息和 Docker 运行状态,说明环境已就绪。本文示例使用 Linux 环境,Windows 或 macOS 上的 Docker Desktop 操作基本相同。

4. 安装 Redis 并实现数据挂载

4.1 拉取 Redis 镜像

docker pull redis:7.2

这里指定了 Redis 7.2 版本标签。如果不写版本号,默认会拉取最新版镜像。

4.2 创建宿主机挂载目录

mkdir -p /data/redis/data mkdir -p /data/redis/conf

其中/data/redis/data用于存放 Redis 持久化数据,/data/redis/conf用于存放配置文件。这里以/data作为示例根目录,实际使用时可以根据需要修改。

4.3 启动 Redis 容器并挂载目录

docker run -d \ --name myredis \ -p 6379:6379 \ -v /data/redis/data:/data \ -v /data/redis/conf/redis.conf:/etc/redis/redis.conf \ --restart=always \ redis:7.2 redis-server /etc/redis/redis.conf

参数说明如下:

  • -d:后台运行容器。
  • --name myredis:指定容器名称为 myredis。
  • -p 6379:6379:将宿主机 6379 端口映射到容器 6379 端口。
  • -v /data/redis/data:/data:将宿主机目录挂载到容器数据目录。
  • -v /data/redis/conf/redis.conf:/etc/redis/redis.conf:挂载自定义配置文件。
  • --restart=always:设置容器开机自启、异常退出后自动重启。

如果你暂时没有自定义配置文件,也可以简化启动方式,只挂载数据目录并使用默认配置:

docker run -d \ --name myredis \ -p 6379:6379 \ -v /data/redis/data:/data \ --restart=always \ redis:7.2 redis-server --appendonly yes

这里的--appendonly yes表示开启 AOF 持久化,让数据写入/data目录,进而同步到宿主机挂载目录中。

4.4 验证 Redis 和数据挂载

docker exec -it myredis redis-cli 127.0.0.1:6379> set name docker OK 127.0.0.1:6379> get name "docker"

退出 Redis 客户端后,可以到宿主机/data/redis/data目录查看生成的持久化文件。即使删除容器,数据仍然保留在宿主机上:

ls /data/redis/data

5. 安装 MySQL 并实现数据挂载

5.1 拉取 MySQL 镜像

docker pull mysql:8.0

这里以 MySQL 8.0 为例,你也可以根据需要选择其他版本。

5.2 创建宿主机挂载目录

mkdir -p /data/mysql/data mkdir -p /data/mysql/conf mkdir -p /data/mysql/logs

5.3 启动 MySQL 容器并挂载目录

docker run -d \ --name mymysql \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=your_password \ -v /data/mysql/data:/var/lib/mysql \ -v /data/mysql/conf:/etc/mysql/conf.d \ -v /data/mysql/logs:/var/log/mysql \ --restart=always \ mysql:8.0

参数说明如下:

  • -e MYSQL_ROOT_PASSWORD=your_password:设置 root 用户密码,请替换为你的实际密码。
  • -v /data/mysql/data:/var/lib/mysql:挂载 MySQL 数据目录。
  • -v /data/mysql/conf:/etc/mysql/conf.d:挂载自定义配置目录。
  • -v /data/mysql/logs:/var/log/mysql:挂载日志目录。

如果需要设置字符集,可以在宿主机/data/mysql/conf目录下创建my.cnf文件:

[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci [client] default-character-set=utf8mb4

保存后重启容器即可生效:

docker restart mymysql

5.4 验证 MySQL 和数据挂载

docker exec -it mymysql mysql -uroot -p

输入密码后进入 MySQL 命令行。可以执行以下语句创建测试数据库和表,验证数据是否正常写入:

CREATE DATABASE IF NOT EXISTS docker_test DEFAULT CHARACTER SET utf8mb4; USE docker_test; CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) ); INSERT INTO users (name) VALUES ('docker'); SELECT * FROM users;

退出 MySQL 后,检查宿主机/data/mysql/data目录,可以看到 MySQL 生成的数据库文件,说明数据已经持久化到宿主机。

6. 数据挂载方式总结

Docker 中常用的数据持久化方式主要有两种:

  • 绑定挂载(bind mount):直接指定宿主机目录和容器目录的映射关系,例如本文示例使用的-v /data/redis/data:/data。这种方式路径透明,便于管理和备份。
  • 命名卷(named volume):由 Docker 管理卷,例如docker volume create redis_data,再通过-v redis_data:/data挂载。这种方式更便于跨主机迁移和插件扩展。

对于本地开发和单机部署,绑定挂载通常更直观;对于生产环境,命名卷在可移植性和安全性上更有优势。

7. 常见问题

7.1 容器内数据没有写入宿主机目录

首先确认挂载路径是否正确,特别是 MySQL 的数据目录必须是/var/lib/mysql,Redis 默认数据目录是/data。其次检查宿主机目录的权限,可以使用chmod 777 /data/mysql/data临时放开权限进行排查。

7.2 端口被占用

如果宿主机 6379 或 3306 端口已被占用,可以修改宿主机映射端口,例如-p 6380:6379,访问时使用 6380 端口即可。

7.3 如何备份数据

对于目录挂载方式,直接备份宿主机对应目录即可。停止容器后打包/data/redis/data或/data/mysql/data,恢复时把文件放回原目录再启动容器。

7.4 如何查看容器日志

docker logs -f myredis docker logs -f mymysql

8. 总结

通过 Docker 安装 Redis 和 MySQL,并配合宿主机目录挂载,可以快速搭建可反复创建、删除而不丢失数据的开发环境。核心思路可以概括为三步:拉取镜像、准备宿主机目录、使用-v参数启动容器。掌握这一套流程后,同样可以迁移到 MongoDB、PostgreSQL、Elasticsearch 等其他镜像的部署中。

建议在今后的生产环境中,进一步结合 Docker Compose 管理多个容器、使用命名卷管理数据,并妥善设置访问密码、网络策略和定期备份,从而获得更稳定、更安全的服务运行体验。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询