使用Docker部署MySQL&Redis容器与常见命令

目录

1. 检查WSL配置

检查当前 Windows Subsystem for Linux (WSL) 的配置,确保Linux系统和docker桌面版使用同一个版本的WSL

bash 复制代码
wsl --list --verbose

2. 设置WSL版本

如果WSL版本不统一,可通过以下命令更改WSL配置

bash 复制代码
wsl --set-version <distribution name> <versionNumber>
bash 复制代码
wsl --set-version Ubuntu-22.04 2

参考网址:将 WSL 版本设置为 1 或 2

3. 拉取MySQL镜像

从Docker Hub拉取MySQL镜像:

bash 复制代码
docker pull mysql:8.4

检查已下载的Docker镜像:

4. 验证镜像

bash 复制代码
docker images

5. 运行MySQL容器

在WSL环境中使用以下命令启动MySQL容器

bash 复制代码
docker run -p 4406:3306 --name mysql-8.4 \
-v "mysql-data:/var/lib/mysql" \
-v "mysql-conf:/etc/mysql/conf.d" \
-v "mysql-log:/var/log/mysql" \
-v "mysql-files:/var/lib/mysql-files" \
-e MYSQL_ROOT_PASSWORD=root -d mysql:8.4 \
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

在创建容器时,若未显式指定宿主机挂载路径,Docker将自动生成/var/lib/docker/volumes/mysql-data/_data等匿名卷,并与MySQL容器建立挂载关联 参考文章:docker安装mysql并实现数据卷挂载

查看容器/镜像的完整信息

bash 复制代码
docker inspect mysql-8.4
json 复制代码
"Mounts": [
	{
	"Type": "volume",
	"Name": "mysql-data",
	"Source": "/var/lib/docker/volumes/mysql-data/_data",
	"Destination": "/var/lib/mysql",
	"Driver": "local",
	"Mode": "z",
	"RW": true,
	"Propagation": ""
	},
	...
]

显式指定宿主机挂载路径

bash 复制代码
docker run -p 4406:3306 --name mysql-8.4 \
  -v "/var/lib/docker/mysql8.4/data:/var/lib/mysql" \
  -v "/var/lib/docker/mysql8.4/conf:/etc/mysql/conf.d" \
  -v "/var/lib/docker/mysql8.4/log:/var/log/mysql" \
  -v "/var/lib/docker/mysql8.4/mysql-files:/var/lib/mysql-files" \
  -e MYSQL_ROOT_PASSWORD=root -d mysql:8.4 \
  --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
json 复制代码
"Mounts": [
	{
	"Source": "/var/lib/docker/mysql8.4/data",
	"Destination": "/var/lib/mysql",
	"Mode": "",
	"RW": true,
	"Propagation": "rprivate"
	},
	...
}

可选:在Windows的cmd中使用以下命令启动MySQL容器

bash 复制代码
docker run -p 4406:3306 --name mysql-8.4 -v "mysql-data:/var/lib/mysql" -v "mysql-conf:/etc/mysql/conf.d" -v "mysql-log:/var/log/mysql" -v "mysql-files:/var/lib/mysql-files" -e MYSQL_ROOT_PASSWORD=root -d mysql:8.4 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

这个 docker run 命令用于启动一个 MySQL 8.4 容器,并将数据、配置和日志持久化存储在宿主机的 /mnt/d/docker/mysql8.4/ 目录下。下面是对每个参数的详细解释:

参数 说明
docker run 启动一个新容器
-p 4406:3306 端口映射:将宿主机的 4406 端口映射到容器的 3306(MySQL 默认端口)
--name mysql-8.4 为容器指定名称 mysql-8.4
-d 后台运行容器(守护进程模式)
mysql:8.4 使用的镜像

6. 管理容器

启动已创建的容器

bash 复制代码
docker start mysql-8.4

查看运行中的容器

bash 复制代码
docker ps

查看容器的日志

bash 复制代码
docker logs mysql-8.4

通过docker进入mysql命令行

bash 复制代码
docker exec -it mysql bash

按住Ctrl+d可退出mysql命令行

查看文件资源在宿主机的映射

对比mysql容器内部文件发现所有文件成功映射

7. 连接通过Docker部署的MySQL容器

注意此处的端口为将容器的3306端口的映射到宿主机的4406端口

8. Redis部署

同样的启动方法可以在docker部署Redis容器(WSL)

bash 复制代码
docker pull redis:8.0.2
bash 复制代码
cd /var/lib/docker/redis8/conf/
sudo touch redis.conf
sudo chmod 777 redis.conf
vim redis.conf

在redis.conf中使用vim编辑器写入

conf 复制代码
requirepass [your_password] # 设置密码
appendonly yes # 持久层相关
bash 复制代码
docker run -p 5379:6379 --name redis-8.0.2 \
-v /var/lib/docker/redis8/data:/data \
-v /var/lib/docker/redis8/conf/redis.conf:/etc/redis/redis.conf \
-d redis:8.0.2 \
redis-server /etc/redis/redis.conf
bash 复制代码
docker start redis-8.0.2
bash 复制代码
docker exec -it redis-8.0.2 bash
复制代码
# redis-cli
> auth mq20011103
OK
> set name abc
OK
> get name
"abc"
>



相关推荐
草莓熊Lotso3 小时前
【C++ 基于微服务的即时通讯系统】etcd + brpc 从安装到服务注册发现全链路实战
网络·数据库·c++·redis·微服务·etcd
我不会起名字32210 小时前
Redis 突然只能读不能写:MISCONF 报错的 3 类触发条件与 4 步恢复
运维·redis·持久化·排查·misconf
我不会起名字32211 小时前
Redis 从 0 到 1(九):主库宕机 30 秒自动切主——1 主 2 从 3 哨兵 + Go 客户端
redis·docker·sentinel·高可用·哨兵
姜鱼问生13 小时前
每次开机手动检查 6 样东西?我写了个 2 秒自检脚本
运维·网络·nginx·docker·容器
wangqiaowq13 小时前
PostgresSQL server Docker 安装部署
运维·docker·容器
程序员阿明13 小时前
docker搭建视频流服务go2rtc,webRTC
docker·容器·webrtc
我不会起名字32214 小时前
MySQL 深分页 LIMIT 1000000 卡死:3 种改写与 4 组实测对比
mysql·性能优化·索引·分页·limit
TTATTC14 小时前
让 16 个 AI 员工在飞书群自我协同:基于 OpenClaw 的多 Agent 敏捷 Squad 拓扑与一人公司实操
docker·开源
TTATTC14 小时前
从分片续传到 SPI 插件化扩展:Free-FS 企业级文件系统核心架构与万能预览技术拆解
docker·开源
JavaPub-rodert15 小时前
Docker 容器为什么 stop 半天停不下来?讲透 PID 1、SIGTERM、SIGKILL、僵尸进程与 tini
运维·docker·容器