资讯动态

Ubuntu 22.04下Docker一键部署四大数据库实战

发布时间:2026/10/25 4:26:11 来源:尧图企业网站定制
1. 项目背景与核心价值在Linux环境下部署数据库服务是开发者和运维工程师的日常刚需。传统方式需要逐个安装配置MySQL、PostgreSQL、Redis和MongoDB等主流数据库不仅耗时耗力还存在版本冲突、依赖缺失等典型问题。这个脚本的价值在于基于Ubuntu 22.04 LTS当前最稳定的长期支持版本采用Docker容器化方案避免污染主机环境实现四大主流数据库的一键部署MySQLPostgreSQLRedisMongoDB支持数据目录挂载到本地保障数据持久化实测在4核8G的标准云服务器上完整部署时间从传统方式的2小时缩短到15分钟以内且各数据库实例完全隔离互不干扰。2. 技术方案设计解析2.1 基础环境选择选择Ubuntu 22.04作为基础系统主要考虑官方支持到2027年长期维护有保障对Docker的兼容性经过充分验证默认搭载的glibc 2.35版本满足所有数据库要求注意虽然脚本理论上支持其他Linux发行版但仅在Ubuntu 22.04上经过完整测试2.2 Docker引擎部署脚本中Docker安装采用官方推荐方案# 卸载旧版本如有 sudo apt-get remove docker docker-engine docker.io containerd runc # 设置仓库 sudo apt-get update sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release # 添加Docker官方GPG密钥 sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 设置稳定版仓库 echo \ deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null # 安装Docker引擎 sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin关键点说明使用官方源而非系统默认源确保获取最新稳定版包含docker-compose-plugin替代旧的docker-compose自动处理了apt-key过时问题Ubuntu 22.04新特性2.3 数据库容器配置四大数据库均采用Docker官方镜像具体版本选择策略数据库镜像版本选择理由MySQL8.0兼顾新特性和稳定性PostgreSQL15-alpineAlpine版体积更小Redis7.0最新稳定系列MongoDB6.0支持新版查询语法每个容器都配置了自定义数据目录挂载如/var/lib/mysql → /data/mysql独立bridge网络避免端口冲突环境变量方式设置初始密码时区统一设置为Asia/Shanghai3. 核心脚本实现3.1 目录结构设计脚本执行前会创建以下目录结构/data ├── mysql ├── postgres ├── redis └── mongodb通过环境变量控制各数据库的挂载点export MYSQL_DATA_DIR/data/mysql export PG_DATA_DIR/data/postgres export REDIS_DATA_DIR/data/redis export MONGO_DATA_DIR/data/mongodb3.2 MySQL部署实现核心启动命令docker run -d \ --name mysql8 \ -v $MYSQL_DATA_DIR:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD$DB_PASSWORD \ -e MYSQL_DATABASE$DB_NAME \ -p 3306:3306 \ --restart unless-stopped \ mysql:8.0 \ --character-set-serverutf8mb4 \ --collation-serverutf8mb4_unicode_ci关键参数说明--character-set-server显式设置UTF8MB4以支持完整unicode--restart unless-stopped实现服务自愈密码通过环境变量传入而非命令行避免泄露3.3 PostgreSQL特殊配置针对PostgreSQL的优化配置docker run -d \ --name postgres15 \ -v $PG_DATA_DIR:/var/lib/postgresql/data \ -e POSTGRES_PASSWORD$DB_PASSWORD \ -e POSTGRES_DB$DB_NAME \ -p 5432:5432 \ --shm-size1g \ postgres:15-alpine \ -c shared_buffers256MB \ -c max_connections200Alpine版需要特别注意必须设置--shm-size否则可能启动失败默认配置需要调整shared_buffers容器内存限制3.4 Redis持久化方案采用AOFRDB双重持久化docker run -d \ --name redis7 \ -v $REDIS_DATA_DIR:/data \ -p 6379:6379 \ redis:7.0 \ --appendonly yes \ --save 60 10000参数解释--appendonly yes启用AOF日志--save 60 1000060秒内10000次改动触发RDB快照3.5 MongoDB权限控制6.0版本需要显式启用认证docker run -d \ --name mongodb6 \ -v $MONGO_DATA_DIR:/data/db \ -e MONGO_INITDB_ROOT_USERNAMEroot \ -e MONGO_INITDB_ROOT_PASSWORD$DB_PASSWORD \ -p 27017:27017 \ mongo:6.0 \ --auth重要MongoDB 4.4版本必须设置--auth否则默认允许无密码访问4. 完整脚本源码#!/bin/bash # 配置区 DB_PASSWORDYourStrongPassw0rd DB_NAMEtestdb # 创建数据目录 sudo mkdir -p /data/{mysql,postgres,redis,mongodb} sudo chmod -R 777 /data # 安装Docker sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository deb [archamd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io sudo systemctl enable docker # 部署MySQL docker run -d \ --name mysql8 \ -v /data/mysql:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD$DB_PASSWORD \ -e MYSQL_DATABASE$DB_NAME \ -p 3306:3306 \ --restart unless-stopped \ mysql:8.0 \ --character-set-serverutf8mb4 \ --collation-serverutf8mb4_unicode_ci # 部署PostgreSQL docker run -d \ --name postgres15 \ -v /data/postgres:/var/lib/postgresql/data \ -e POSTGRES_PASSWORD$DB_PASSWORD \ -e POSTGRES_DB$DB_NAME \ -p 5432:5432 \ --shm-size1g \ --restart unless-stopped \ postgres:15-alpine \ -c shared_buffers256MB \ -c max_connections200 # 部署Redis docker run -d \ --name redis7 \ -v /data/redis:/data \ -p 6379:6379 \ --restart unless-stopped \ redis:7.0 \ --appendonly yes \ --save 60 10000 # 部署MongoDB docker run -d \ --name mongodb6 \ -v /data/mongodb:/data/db \ -e MONGO_INITDB_ROOT_USERNAMEroot \ -e MONGO_INITDB_ROOT_PASSWORD$DB_PASSWORD \ -p 27017:27017 \ --restart unless-stopped \ mongo:6.0 \ --auth echo 所有数据库已部署完成5. 使用验证与问题排查5.1 服务状态检查验证各容器是否正常运行docker ps -a --format table {{.Names}}\t{{.Status}}\t{{.Ports}}预期输出应显示四个容器状态均为Up。5.2 常见问题解决问题1Docker服务启动失败症状Cannot connect to the Docker daemon at unix:///var/run/docker.sock解决方案sudo systemctl start docker sudo usermod -aG docker $USER newgrp docker问题2MySQL无法远程连接检查步骤确认防火墙放行3306端口登录容器检查用户权限docker exec -it mysql8 mysql -uroot -p GRANT ALL PRIVILEGES ON *.* TO root% IDENTIFIED BY 密码; FLUSH PRIVILEGES;问题3MongoDB认证失败正确连接方式mongo -u root -p 密码 --authenticationDatabase admin6. 性能优化建议6.1 内存限制调整对于生产环境建议为每个容器设置内存限制在docker run命令中添加--memory 2g --memory-swap 4g # MySQL示例各数据库推荐内存配置数据库最小内存推荐内存MySQL1GB4GBPostgreSQL512MB2GBRedis256MB1GBMongoDB1GB4GB6.2 数据备份方案建议添加定期备份脚本示例# MySQL备份 docker exec mysql8 sh -c exec mysqldump --all-databases -uroot -p$MYSQL_ROOT_PASSWORD /backup/mysql_$(date %Y%m%d).sql # PostgreSQL备份 docker exec postgres15 pg_dumpall -U postgres /backup/pg_$(date %Y%m%d).sql7. 安全加固措施7.1 密码安全强烈建议修改脚本中的默认密码使用密码管理器生成强密码定期轮换密码建议90天7.2 网络隔离生产环境建议# 创建专属网络 docker network create db_network # 启动时加入该网络替代默认bridge --network db_network7.3 日志审计启用详细日志记录以MySQL为例docker run ... mysql:8.0 \ --general-log1 \ --general-log-file/var/log/mysql/query.log \ --slow-query-log1 \ --slow-query-log-file/var/log/mysql/slow.log记得将日志目录也挂载到宿主机持久化。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑