Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程

Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程

一、简介
二、安装wsl
三、wsl磁盘迁移
四、wsl磁盘压缩
五、Docker下载
六、win11配置docker虚拟环境命令工具
七、Docker部署mysql
八、Docker部署redis
九、Docker部署mongo

一、简介

Docker 是一个开源的容器化平台,它可以帮助开发者打包、分发和运行应用程序以及其依赖项。通过使用 Docker,开发者可以将应用程序及其环境打包成一个称为容器的独立单元,使应用程序在不同的环境中具备一致的运行行为。
优点:
1.轻量和快速启动:Docker 容器与传统虚拟机相比,更加轻量级,因为它们共享主机操作系统的内核。这使得容器的启动和停止速度更快,可以在几秒钟内完成。
2.环境一致性:Docker 容器包含了应用程序及其所有的依赖项,包括操作系统、库文件和其他软件。这意味着你可以在任何支持 Docker 的环境中运行容器,而不用担心环境差异导致的应用程序运行问题。
3.可移植性:Docker 容器可以在不同的平台和操作系统上运行,包括开发环境、测试环境和生产环境。这使得应用程序的部署和迁移更加简单和可靠。
4.资源隔离:Docker 使用 Linux 内核的容器技术,可以实现对容器之间的资源隔离,如 CPU、内存和网络。这样可以避免容器之间的相互干扰,提高应用程序的稳定性和安全性。
5.可扩展性:Docker 容器可以根据需求进行水平扩展,即通过运行多个相同的容器来处理更大的工作负载。这种扩展性使得应用程序可以更好地适应变化的流量需求。
缺点:
1.学习曲线:对于初学者来说,理解和学习 Docker 的概念和工作原理可能需要一些时间和努力。尤其是对于那些没有太多系统管理经验的开发者来说,可能需要额外的学习成本。
2.存储占用:每个 Docker 容器都需要包含完整的文件系统和应用程序依赖项,这可能导致存储占用较大。尤其是当需要运行大量容器时,需要考虑存储资源的管理和优化。
3.安全性:虽然 Docker 提供了一些安全机制来隔离容器,但不正确的配置和使用可能导致容器之间的安全漏洞。因此,需要注意安全最佳实践,并进行适当的安全配置和监控。
4.网络配置复杂性:在多个容器之间建立网络通信可能需要一些配置和管理。特别是在涉及跨主机通信或多个容器之间的复杂网络拓扑时,需要仔细规划和配置网络。

二、安装wsl

1.搜索开发者设置值,打开开发人员模式
图片[1] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
2.搜索启用或关闭windows功能。选择“适用于Linux的windows子系统、window虚拟机监控程序平台”,点击确定

图片[2] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
3.另起个窗口,运行wsl –version,显示版本号则安装成功
图片[3] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
4.管理员身份打开命令行工具,运行wsl –install,官方文档:https://learn.microsoft.com/zh-cn/windows/wsl/install
图片[4] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
5.微软商店搜索Ubuntu,需要虚拟机的安装Ubuntu,可不安装,安装docker时docker会有自己的磁盘
图片[5] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
6.启动Ubuntu,设置用户名和密码
图片[6] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
7.wsl基本命令

wsl –install:安装 WSL 和 Linux 的默认 Ubuntu 发行版
wsl –set-version :设置WSL 版本, 为Linux发行版的名称, 为 1 或 2
wsl –set-default-version :设置默认 WSL 版本
wsl –list –verbose:列出已安装的 Linux 发行版
wsl –list –online:列出可用的 Linux 发行版
wsl –set-default :设置默认 Linux 发行版
wsl –unregister :注销或卸载 Linux 发行版
wsl ~:将目录更改为主页
wsl –update:更新 WSL
wsl –status:检查 WSL 状态
wsl –version:检查 WSL 版本
wsl –help:帮助命令
wsl –user :以特定用户的身份运行,若要以指定用户身份运行 WSL,将 替换为 WSL 发行版中存在的用户名。
config –default-user :更改发行版的默认用户
wsl –shutdown:立即终止所有正在运行的发行版和 WSL 2 轻量级实用工具虚拟机
wsl –terminate :终止指定的发行版或阻止其运行
wsl hostname -I:返回通过 WSL 2 安装的 Linux 发行版 IP 地址(WSL 2 VM 地址)
ip route show | grep -i default | awk ‘{ print $3}’:返回从 WSL 2 (WSL 2 VM) 看到的 Windows 计算机的 IP 地址
wsl –export :导出分发版
wsl –import :导入分发版
wsl –import-in-place :将指定的 .vhdx 文件导入为新的发行版。 虚拟硬盘必须采用 ext4 文件系统类型格式
wsl –unregister :注销并卸载 WSL 发行版
wsl –mount :装载磁盘或设备
wsl –unmount :卸载磁盘

三、wsl磁盘迁移

1.管理员运行命令行工具,运行命令:wsl –shutdown,关闭所有虚拟机
图片[7] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
2.运行wsl -l -v查看虚拟机名称
图片[8] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
3.运行wsl –export Ubuntu-24.04 F:WSL2Ubuntu24.04.bak,导出Ubuntu-24.04文件,Ubuntu-24.04为wsl -l -v查看的虚拟机名称
图片[9] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
4.运行wsl –unregister Ubuntu-24.04注销原来的虚拟机
图片[10] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
5.运行wsl –import Ubuntu-24.04 F:wsl F:WSL2Ubuntu24.04.bak –version 2,重新导入虚拟机
图片[11] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
6.运行设置ubuntu2404 config –default-user xxx默认用户,如果不设置默认用户,则每次都是以root身份启动;然后重新启动即可
图片[12] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
7.磁盘映射,运行wsl,运行命令ln -s /mnt/D/work/ /home/mainframe/work,意思是把D盘中的work映射到home下的mainframe文件的work中

四、wsl磁盘压缩

1.先找到Ubuntu虚拟机磁盘文件的路径:C:用户用户名AppDataLocalPackagesCanonicalGroupLimited.Ubuntu24.04LTS_79rhkp1fndgscLocalState,注意用户名是你当前账户名
图片[13] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
2.管理员运行命令行工具,运行命令:wsl –shutdown,关闭所有虚拟机
图片[14] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
3.按顺序运行下面命令,压缩卸载磁盘

# 进入磁盘管理
diskpart
# 选择虚拟磁盘文件
select vdisk file="ext4.vhdx文件路径"
# 压缩文件
compact vdisk
# 压缩完成后卸载磁盘
detach vdisk

五、Docker下载

1.官网:https://www.docker.com/,请访问官网下载桌面版
图片[15] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
2.双击exe安装即可,docker默认安装在系统盘,可以迁移Docker磁盘,避免把系统盘撑爆,docker磁盘默认路径在C:Users用户名AppDataLocalDockerwsl,按照“wsl磁盘迁移”步骤迁移即可,也可指定目录安装。如需指定目录安装,可跳过此步骤
图片[16] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
3.指定目录安装docker,管理员运行命令行工具,cd到Docker下载路径运行下面命令。

/****
在运行命令前,一定要提前手动创建好对应文件夹,不然会报错。
--installation-dir:DockerDesktop安装程序的安装目录
--wsl-default-data-root:Docker存放是Docker用于存储镜像、容器、卷等数据的目录。
--windows-containers-default-data-root:Windows容器数据
****/
start /w “” “Docker Desktop Installer.exe” install -accept-license --installation-dir=“D:Program FilesDocker” --wsl-default-data-root=“D:Program FilesDockerwsl” --windows-containers-default-data-root=“D:Program FilesDocker”

4.卸载或者更新docker如果遇到下图提示,此时管理员运行命令行工具,运行:sc delete com.docker.service,刷新即可
图片[17] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
5.设置镜像源,可参考:https://docker.xuanyuan.me/#mirror-address

 "registry-mirrors": [
    "https://docker.1ms.run"
  ]

六、win11配置docker虚拟环境命令工具

1.打开命令行工具,下拉选择设置
图片[18] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
2.点击添加新配置文件,名称输入Docker,命令行输入C:Windowssystem32wsl.exe -d docker-desktop –cd ~/…,图标输入C:Program FilesWSLwsl.exe。命令行中的docker-desktop为wsl中虚拟环境的名称,输入wsl -l -v查看
图片[19] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
3.下拉打开名为docker命令工具,运行ls,测试是否添加配置成功

七、Docker部署mysql

1.打开命令行工具,运行docker pull mysql,即可拉取mysql;
图片[20] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
2.运行mysql容器:docker run -itd –name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
图片[21] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
3.运行docker exec -it mysql-test bash进入容器,查看配置文件、日志文件、数据文件是否存在

test -f /etc/my.cnf && echo "配置文件存在" || echo "配置文件不存在"
test -d /var/lib/mysql && echo "数据文件目录存在" || echo "数据文件目录不存在"
test -d /var/log && echo "日志文件目录存在" || echo "日志文件目录不存在"

图片[22] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
4.运行docker stop mysql-test、docker rm mysql-test删除容器
图片[23] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
5.在宿主机找合适的位置创建mysql挂载目录mysql>data、mysql>my.cnf;宿主机为此电脑,而非doctor安装的磁盘
图片[24] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
6.在mysql>my.cnf中写入下面代码

# =============================================
# MySQL 服务器配置文件
# 官方配置指南:http://dev.mysql.com/doc/refman/9.3/en/server-configuration-defaults.html
# =============================================

# =============================================
# MySQL 服务器端配置
# =============================================
[mysqld]
#######################################
###           基础配置              ###
#######################################
port = 3306                         # 监听端口,默认3306
host-cache-size=0                   # 禁用主机名缓存,提升性能
skip-name-resolve                   # 禁用DNS反向解析,加速连接
datadir=/var/lib/mysql              # 数据文件存储路径(Docker容器内路径)
socket=/var/run/mysqld/mysqld.sock  # Unix socket文件路径
secure-file-priv=/var/lib/mysql-files # 限制LOAD DATA等操作的文件目录
user=mysql                          # 运行MySQL服务的系统用户

#######################################
###           性能配置              ###
#######################################
max_connections = 200               # 最大连接数(根据服务器内存调整)
max_connect_errors = 10             # 最大连接错误次数,超过则阻止主机连接
thread_cache_size = 10              # 线程缓存数量,减少连接创建开销
table_open_cache = 4000             # 表描述符缓存大小,影响表打开性能

#######################################
###          字符集配置             ###
#######################################
character_set_server = utf8mb4        # 服务端默认字符集(支持完整Unicode)
collation_server = utf8mb4_unicode_ci # 默认排序规则(区分大小写和重音)

#######################################
###          存储引擎配置           ###
#######################################
default_storage_engine = InnoDB     # 默认使用InnoDB引擎(支持事务)
innodb_buffer_pool_size = 256M      # InnoDB缓冲池大小(建议设为物理内存70%)
innodb_flush_log_at_trx_commit = 1  # 事务提交时刷写日志(1=最高一致性,2=折衷,0=性能优先)

#######################################
###           日志配置              ###
#######################################
log_error = /var/log/mysql/error.log  # 错误日志路径(需确保目录可写)
log_error_verbosity = 3            # 错误日志详细程度(1=错误,2=错误+警告,3=错误+警告+通知)
slow_query_log = ON                # 启用慢查询日志
slow_query_log_file = /var/log/mysql/slow.log  # 慢查询日志路径
long_query_time = 5                # 慢查询阈值(秒),超过此时间的查询会被记录
general_log = OFF                  # 生产环境建议关闭通用查询日志(会产生大量I/O)
general_log_file = /var/log/mysql/general.log  # 通用查询日志路径

pid-file=/var/run/mysqld/mysqld.pid # 进程ID文件路径

# =============================================
# MySQL 客户端配置
# =============================================
[client]
socket=/var/run/mysqld/mysqld.sock  # 客户端连接使用的socket文件路径
default_character_set=utf8mb4         # 客户端默认字符集

#######################################
###  加载该目录所有.cnf后缀的配置文件   ###
#######################################
!includedir /etc/mysql/conf.d/ 

7.运行下面命令重新运行mysql容器,并挂载配置文件、日志目录、数据文件目录

/*****
-v /f/Docker/home/mysql/data:/var/lib/mysql  挂载数据库数据,其中f是window中的盘符,如果是linux系统宿主机不需要加盘符,直接使用/就代表宿主机的根目录
-v /f/Docker/home/mysql/my.cnf:/etc/my.cnf 挂载配置文件,其中f是window中的盘符,如果是linux系统宿主机不需要加盘符,直接使用/就代表宿主机的根目录
-e MYSQL_ROOT_PASSWORD=root            数据库root用户的密码
--mount 等同于-v,下面两个命令使用其中一个即可
*****/
docker run -itd -p 3306:3306 --privileged=true --name mysql -v /f/Docker/home/mysql/my.cnf:/etc/my.cnf -v /f/Docker/home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql --default-time-zone=+8:00
docker run -itd -p 3306:3306 --privileged=true --name mysql --mount type=bind,src=/f/Docker/home/mysql/my.cnf,dst=/etc/my.cnf --mount type=bind,src=/f/Docker/home/mysql/data,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql --default-time-zone=+8:00

8.客户端连接mysql图片[25] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
9.验证配置文件是否挂载成功:客户端启动成功后,可运行:SHOW VARIABLES WHERE Variable_name in(‘log_error’,‘slow_query_log_file’,‘general_log_file’),查看value值是否与配置文件中一致
图片[26] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
10.验证数据文件是否挂载成功:客户端创建数据库和表,并向表中插入数据
图片[27] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
11.验证数据文件是否挂载成功:运行docker stop mysql && docker rm mysql删除容器,重新运行容器
图片[28] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
12.验证数据文件是否挂载成功:客户端运行SELECT * FROM test_mount.t1,查询之前创建的表数据,如果数据未丢失,说明数据文件挂载成功
图片[29] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
13.运行命令docker update mysql –restart=always持久化连接。当退出docker重新打开docker,mysql不会重新启动,此命令可保证docker重新打开mysql可以重新启动

八、Docker部署redis

1.打开命令行工具,运行docker pull redis,即可拉取redis;使用doctor search 需加上镜像源域名:docker search docker.1ms.run/redis
图片[30] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
2.在本地创建映射文件夹redis>data、redis>redis.conf、redis>log>redis.log
图片[31] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
3.访问:https://redis.io/docs/latest/operate/oss_and_stack/management/config/,查看对应版本的redis.conf并复制到redis>redis.conf
图片[32] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
4.修改配置文件中日志路径为/etc/log/redis.log、修改protected-mode off为protected-mode no、修改bind 127.0.0.1 -::1为bind 0.0.0.0 -::1
图片[33] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
5.打开cmd,使用下面命令运行redis容器

/*****
-p:主机端口:容器端口。
-d:启动的镜像名称。
--name:设置容器名称。
--restart=always:设置docker启动时,容器跟随自启。
redis-server /etc/redis.conf:启动redis镜像时指定配置文件进行启动
-v /f/Docker/home/redis/redis.conf:/etc/redis.conf:挂载容器配置文件到宿主,方便修改配置文件,,如果是linux系统宿主机不需要加盘符,直接使用/就代表宿主机的根目录
-v /f/Docker/home/redis/data:/data:挂载容器存储文件到宿主,避免因不小心卸载容器或者容器损坏导致数据丢失不可找回风险,,如果是linux系统宿主机不需要加盘符,直接使用/就代表宿主机的根目录
-v /f/Docker/home/redis/log/redis.log:/etc/log/redis.log:挂载日志文件,,如果是linux系统宿主机不需要加盘符,直接使用/就代表宿主机的根目录
*****/
docker run --name redis --restart=always -p 6379:6379 -v /f/Docker/home/redis/data:/data -v /f/Docker/home/redis/redis.conf:/etc/redis.conf -v /f/Docker/home/redis/log/redis.log:/etc/log/redis.log -d redis redis-server /etc/redis.conf

图片[34] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
6.客户端连接redis
图片[35] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
7.验证配置文件、日志文件是否挂载成功:查看本地日志文件,是否有日志写入即可
图片[36] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
8.验证数据文件是否挂载成功:通过脚本创建数据
图片[37] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
9.验证数据文件是否挂载成功:运行docker stop redis && docker rm redis删除容器,重新运行容器
图片[38] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
10.验证数据文件是否挂载成功:客户端运行GET mykey,查询之前创建的表数据,如果数据未丢失,说明数据文件挂载成功

九、Docker部署mongo

1.打开命令行工具,运行docker pull mongo拉取mongo
图片[39] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
2.在本地创建映射文件夹mongo>data、mongo>mongod.conf、mongo>logs>mongo.log
图片[40] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
3.修改配置文件,添加以下内容

# MongoDB 配置文件 (YAML 格式)

storage:
  dbPath: /data/mongo/data       # 数据库数据存放目录

systemLog:
  destination: file              # 日志输出到文件
  path: /data/mongo/logs/mongod.log  # 日志存放路径
  logAppend: true                # 追加方式记录日志
  quiet: true                    # 过滤无用日志信息

net:
  port: 27017                    # 监听端口
  bindIp: 0.0.0.0                # 绑定IP地址

security:
  authorization: disabled        # 用户认证 (false=disabled)

operationProfiling:
  mode: off                      # 相当于 notablescan=false

4.打开cmd,使用下面命令运行mongo容器。docker run –name mongo -p 27107:27107 -d mongo

/*****
-p:主机端口:容器端口。
-d:启动的镜像名称。
--name:设置容器名称。
--restart=always:设置docker启动时,容器跟随自启。
redis-server /etc/redis.conf:启动redis镜像时指定配置文件进行启动
-v /f/Docker/home/mongo/mongo.conf:/etc/mongod.conf:挂载容器配置文件到宿主,方便修改配置文件,,如果是linux系统宿主机不需要加盘符,直接使用/就代表宿主机的根目录
-v /f/Docker/home/mongo/data:/data/mongo/data:挂载容器存储文件到宿主,避免因不小心卸载容器或者容器损坏导致数据丢失不可找回风险,,如果是linux系统宿主机不需要加盘符,直接使用/就代表宿主机的根目录
-v /f/Docker/home/mongo/logs:/data/mongo/logs:挂载日志文件,,如果是linux系统宿主机不需要加盘符,直接使用/就代表宿主机的根目录
*****/
docker run --name mongo --restart=always -p 27017:27017 -v /f/Docker/home/mongo/data:/data/mongo/data -v /f/Docker/home/mongo/mongo.conf:/etc/mongod.conf -v /f/Docker/home/mongo/logs:/data/mongo/logs -d mongo mongod --config /etc/mongod.conf

图片[41] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
5.客户端连接mongo
图片[42] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
6.验证配置文件、日志文件是否挂载成功:查看本地日志文件,是否有日志写入即可
图片[43] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
7.验证数据文件是否挂载成功:通过脚本创建数据
图片[44] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
8.验证数据文件是否挂载成功:运行docker stop mongo && docker rm mongo删除容器,重新运行容器
图片[45] - Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程 - 宋马
9.验证数据文件是否挂载成功:客户端运行db.test.find(),查询之前创建的表数据,如果数据未丢失,说明数据文件挂载成功

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容