Docker 微服务基础实战Tomcat MySQL Redis 一站式部署指南在微服务架构中应用通常由多个独立服务组成如 Web 服务器、数据库、缓存。Docker 让这些组件的部署变得前所未有的简单。本文将手把手教你用 Docker 快速搭建TomcatWeb 服务 三大核心组件并解决常见配置陷阱为构建完整微服务系统打下基础。环境要求已安装 Docker参考前文《Docker 安装与核心架构详解》开放端口8080Tomcat、3306MySQL、6379Redis一、部署 TomcatWeb 服务基石问题背景新版 Tomcat 镜像的“404 陷阱”官方tomcat镜像Tomcat 10默认不包含示例应用直接访问会返回 404原因为减小镜像体积官方将webapps目录重命名为webapps.dist需手动恢复。方案 1手动修复官方镜像推荐学习原理步骤 1启动容器dockerrun-d-p8080:8080--nametomcat10 tomcat步骤 2进入容器修复目录# 进入容器dockerexec-ittomcat10bash# 删除空 webapps 目录恢复示例应用rootcontainer:/usr/local/tomcat# rm -rf webappsrootcontainer:/usr/local/tomcat# mv webapps.dist webapps# 退出容器exit步骤 3验证浏览器访问http://服务器IP:8080成功显示 Tomcat 欢迎页原理webapps.dist包含ROOT、docs、examples等标准目录恢复后即可提供默认页面。方案 2使用预配置镜像生产推荐社区维护的镜像已解决此问题开箱即用# 拉取并运行预配置镜像dockerrun-d-p8081:8080\--nametomcat8\billygoo/tomcat8-jdk8# 验证访问 8081 端口curlhttp://localhost:8081✅优势内置 JDK 8兼容老项目已配置好webapps无需手动干预二、部署 MySQL 5.7持久化数据库核心需求数据持久化避免容器删除导致数据丢失UTF-8 编码防止中文乱码安全密码设置 root 密码步骤 1创建宿主机目录结构mkdir-p/opt/mysql/{data,log,conf}目录作用/opt/mysql/data存储数据库文件/opt/mysql/log存储日志文件/opt/mysql/conf存储自定义配置步骤 2启动 MySQL 容器dockerrun-d\-p3306:3306\-v/opt/mysql/log:/var/log/mysql\-v/opt/mysql/data:/var/lib/mysql\-v/opt/mysql/conf:/etc/mysql/conf.d\-eMYSQL_ROOT_PASSWORD000000\# 设置 root 密码--namemysql5.7\mysql:5.7⚠️关键参数-e MYSQL_ROOT_PASSWORD必须设置否则容器启动失败三个-v挂载确保数据、日志、配置持久化步骤 3配置 UTF-8 编码创建配置文件cat/opt/mysql/conf/my.cnfEOF [client] default_character_setutf8 [mysqld] collation_serverutf8_general_ci character_set_serverutf8 EOF重启生效dockerrestart mysql5.7步骤 4验证数据库操作# 进入容器dockerexec-itmysql5.7 mysql-uroot-p000000# 在 MySQL 中执行mysqlSHOW VARIABLES LIKEcharacter%;-- 确认所有 character_set_* 均为 utf8 mysqlCREATE DATABASE test_db;mysqlUSE test_db;mysqlCREATE TABLE users(id INT, name VARCHAR(20));mysqlINSERT INTOusersVALUES(1,张三);mysqlSELECT * FROMusers;--------------|id|name|--------------|1|张三|--------------安全建议生产环境应使用强密码非000000创建专用用户非 root限制网络访问-p 127.0.0.1:3306:3306三、部署 Redis高性能缓存核心需求外部访问注释bind 127.0.0.1关闭保护模式protected-mode no持久化启用 AOF 或 RDB密码认证requirepass password步骤 1准备配置文件mkdir-p/opt/rediscat/opt/redis/redis.confEOF # 允许外部连接 # bind 127.0.0.1 # 关闭保护模式 protected-mode no # 必须为 noDocker 中以非守护进程运行 daemonize no # 启用 AOF 持久化 appendonly yes # 设置密码 requirepass 000000 # 日志文件留空或注释避免权限问题 logfile EOF⚠️关键配置说明daemonize noDocker 容器要求前台运行设为yes会导致启动失败logfile 避免因日志目录权限问题崩溃步骤 2启动 Redis 容器dockerrun-d\-p6379:6379\-v/opt/redis/redis.conf:/etc/redis/redis.conf\-v/opt/redis/data:/data\--nameredistest\redis\/etc/redis/redis.conf# 指定配置文件路径步骤 3验证 Redis 功能# 进入容器dockerexec-itredistest redis-cli-a000000# 执行命令127.0.0.1:6379SET user:1:name李四OK127.0.0.1:6379GET user:1:name李四127.0.0.1:6379PING PONG步骤 4调整数据库数量可选Redis 默认 16 个数据库0-15可修改# 编辑配置文件echodatabases 10/opt/redis/redis.conf# 重启生效dockerrestart redistest# 验证127.0.0.1:6379SELECT10(error)ERR DB index is out of range# 因只有 0-9四、微服务互联容器间通信场景Tomcat 应用连接 MySQL 和 Redis方法 1使用宿主机 IP简单但耦合Tomcat 应用中配置db.urljdbc:mysql://宿主机IP:3306/test_db redis.host宿主机IP方法 2Docker 自定义网络推荐# 创建自定义网络dockernetwork create micro-net# 重新启动服务加入网络dockerrun-d--networkmicro-net--namemysql-db mysql:5.7...dockerrun-d--networkmicro-net--nameredis-cache redis...dockerrun-d--networkmicro-net--namemy-tomcat tomcat...# 在 Tomcat 容器内直接通过服务名访问pingmysql-db# 解析到 MySQL 容器 IPpingredis-cache# 解析到 Redis 容器 IP✅优势服务发现自动完成无需硬编码 IP网络隔离仅 micro-net 内容器可互访更安全默认 bridge 网络所有容器互通五、常见问题排查Q1Tomcat 启动后无法访问检查是否修复了webapps目录验证docker exec tomcat10 ls /usr/local/tomcat/webappsQ2MySQL 容器启动失败查看日志docker logs mysql5.7常见原因未设置MYSQL_ROOT_PASSWORD挂载目录权限不足chown -R 999:999 /opt/mysqlQ3Redis 连接被拒绝检查配置bind是否注释protected-mode是否为no验证端口telnet IP 6379六、总结与下一步组件关键操作持久化方案Tomcat修复webapps或用预配置镜像无应用代码应外置MySQL挂载 data/log/conf 目录Bind MountsRedis自定义redis.confBind Mounts AOF后续学习路径编写 Dockerfile将应用打包为镜像使用 docker-compose一键编排三大服务配置 Nginx 反向代理统一入口集成 Spring Boot开发真实微服务应用通过本文你已掌握 Docker 微服务基础组件的部署能力。现在你可以开始构建自己的云原生应用了