ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Docker 简介及 Docker 安装 Redis、MySQL 并实现数据挂载宿主机

Docker 简介及 Docker 安装 Redis、MySQL 并实现数据挂载宿主机 1. 引言在本地开发、测试或部署小型项目时手动安装 Redis、MySQL 等中间件往往比较繁琐需要处理依赖、配置、环境变量、版本冲突等问题。Docker 通过容器化技术把应用及其依赖打包成一个个独立、可移植的容器让我们可以用几条命令快速启动 Redis、MySQL 服务并结合数据卷把数据持久化到宿主机避免容器删除后数据丢失。本文将从 Docker 的基本概念讲起并演示如何在宿主机上安装 Redis 和 MySQL同时通过目录挂载实现数据持久化。2. Docker 简介2.1 什么是 DockerDocker 是一个开源的容器化平台它允许开发者把应用及其依赖环境打包成标准化的镜像然后在任意安装了 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 \ --restartalways \ 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挂载自定义配置文件。--restartalways设置容器开机自启、异常退出后自动重启。如果你暂时没有自定义配置文件也可以简化启动方式只挂载数据目录并使用默认配置docker run -d \ --name myredis \ -p 6379:6379 \ -v /data/redis/data:/data \ --restartalways \ 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/data5. 安装 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/logs5.3 启动 MySQL 容器并挂载目录docker run -d \ --name mymysql \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORDyour_password \ -v /data/mysql/data:/var/lib/mysql \ -v /data/mysql/conf:/etc/mysql/conf.d \ -v /data/mysql/logs:/var/log/mysql \ --restartalways \ mysql:8.0参数说明如下-e MYSQL_ROOT_PASSWORDyour_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-serverutf8mb4 collation-serverutf8mb4_unicode_ci [client] default-character-setutf8mb4保存后重启容器即可生效docker restart mymysql5.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/mysqlRedis 默认数据目录是/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 mymysql8. 总结通过 Docker 安装 Redis 和 MySQL并配合宿主机目录挂载可以快速搭建可反复创建、删除而不丢失数据的开发环境。核心思路可以概括为三步拉取镜像、准备宿主机目录、使用-v参数启动容器。掌握这一套流程后同样可以迁移到 MongoDB、PostgreSQL、Elasticsearch 等其他镜像的部署中。建议在今后的生产环境中进一步结合 Docker Compose 管理多个容器、使用命名卷管理数据并妥善设置访问密码、网络策略和定期备份从而获得更稳定、更安全的服务运行体验。
返回列表