【Linux】Ubuntu22.04 Docker+四大数据库(挂载本地)一键安装脚本

说明:本脚本适用于Ubuntu22.04系统,自动完成Docker安装、阿里源配置,以及PostgreSQL、MySQL、Redis、MongoDB四大数据库的Docker部署,同时将数据库数据挂载到本地指定目录,防止容器删除后数据丢失,脚本可直接复制执行,全程自动化。

一键安装脚本(可直接复制到Ubuntu终端执行)

shell 复制代码
#!/bin/bash
set -e  # 脚本执行过程中出现错误立即退出,避免后续无效执行

# ==================== 1. 系统更新及依赖安装 ====================
echo "=== 开始更新系统软件包及安装依赖 ==="
sudo apt update -y
sudo apt upgrade -y
# 安装Docker所需依赖
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

# ==================== 2. 配置Docker阿里源 ====================
echo "=== 开始配置Docker阿里源 ==="
# 添加阿里Docker GPG密钥
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加阿里Docker源到系统源列表
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# ==================== 3. 安装Docker及启动服务 ====================
echo "=== 开始安装Docker ==="
sudo apt update -y
sudo apt install -y docker-ce docker-ce-cli containerd.io
# 启动Docker服务并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 验证Docker安装成功
docker --version
echo "=== Docker安装完成,阿里源配置成功 ==="

# ==================== 4. 配置本地挂载目录(统一管理数据) ====================
echo "=== 开始创建本地挂载目录 ==="
# 定义挂载根目录,可根据需求修改
MOUNT_BASE_DIR="/data/docker"
# 分别创建四大数据库的挂载目录
sudo mkdir -p ${MOUNT_BASE_DIR}/postgresql/data
sudo mkdir -p ${MOUNT_BASE_DIR}/mysql/data
sudo mkdir -p ${MOUNT_BASE_DIR}/redis/data
sudo mkdir -p ${MOUNT_BASE_DIR}/mongodb/data
# 授权目录权限(避免容器访问权限不足)
sudo chmod -R 777 ${MOUNT_BASE_DIR}
echo "=== 本地挂载目录创建完成,路径:${MOUNT_BASE_DIR} ==="

# ==================== 5. 安装PostgreSQL(Docker版,挂载本地) ====================
echo "=== 开始安装PostgreSQL ==="
# 版本可修改(如14、15),默认最新稳定版
PG_VERSION="latest"
# 配置数据库密码,可修改
PG_PASSWORD="postgres123"
# 启动PostgreSQL容器,挂载本地目录
docker run -d \
  --name postgres \
  --restart=always \
  -p 5432:5432 \
  -e POSTGRES_PASSWORD=${PG_PASSWORD} \
  -e POSTGRES_USER=postgres \
  -e POSTGRES_DB=postgres \
  -v ${MOUNT_BASE_DIR}/postgresql/data:/var/lib/postgresql/data \
  postgres:${PG_VERSION}
# 验证PostgreSQL启动成功
if docker ps | grep -q "postgres"; then
  echo "=== PostgreSQL安装完成,端口:5432,密码:${PG_PASSWORD} ==="
else
  echo "❌ PostgreSQL安装失败,请检查日志"
  exit 1
fi

# ==================== 6. 安装MySQL(Docker版,挂载本地) ====================
echo "=== 开始安装MySQL ==="
# 版本可修改(如8.0、5.7),默认8.0
MYSQL_VERSION="8.0"
# 配置数据库密码,可修改(建议复杂密码)
MYSQL_PASSWORD="mysql123"
# 启动MySQL容器,挂载本地目录,解决中文乱码
docker run -d \
  --name mysql \
  --restart=always \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=${MYSQL_PASSWORD} \
  -e MYSQL_DATABASE=testdb \
  -v ${MOUNT_BASE_DIR}/mysql/data:/var/lib/mysql \
  -v /etc/localtime:/etc/localtime:ro \
  mysql:${MYSQL_VERSION} \
  --character-set-server=utf8mb4 \
  --collation-server=utf8mb4_unicode_ci
# 验证MySQL启动成功
if docker ps | grep -q "mysql"; then
  echo "=== MySQL安装完成,端口:3306,root密码:${MYSQL_PASSWORD} ==="
else
  echo "❌ MySQL安装失败,请检查日志"
  exit 1
fi

# ==================== 7. 安装Redis(Docker版,挂载本地) ====================
echo "=== 开始安装Redis ==="
# 版本可修改(如7.0、6.2),默认最新稳定版
REDIS_VERSION="latest"
# 启动Redis容器,挂载本地目录,设置密码
docker run -d \
  --name redis \
  --restart=always \
  -p 6379:6379 \
  -v ${MOUNT_BASE_DIR}/redis/data:/data \
  redis:${REDIS_VERSION} \
  redis-server --requirepass "redis123" --appendonly yes
# 验证Redis启动成功
if docker ps | grep -q "redis"; then
  echo "=== Redis安装完成,端口:6379,密码:redis123 ==="
else
  echo "❌ Redis安装失败,请检查日志"
  exit 1
fi

# ==================== 8. 安装MongoDB(Docker版,挂载本地) ====================
echo "=== 开始安装MongoDB ==="
# 版本可修改(如6.0、5.0),默认最新稳定版
MONGO_VERSION="latest"
# 启动MongoDB容器,挂载本地目录,设置密码
docker run -d \
  --name mongodb \
  --restart=always \
  -p 27017:27017 \
  -v ${MOUNT_BASE_DIR}/mongodb/data:/data/db \
  mongo:${MONGO_VERSION} \
  mongod --auth
# 进入容器设置管理员账号密码(admin/admin123)
docker exec -it mongodb mongo admin <<EOF
db.createUser({user:'admin',pwd:'admin123',roles:[{role:'root',db:'admin'}]});
exit;
EOF
# 验证MongoDB启动成功
if docker ps | grep -q "mongodb"; then
  echo "=== MongoDB安装完成,端口:27017,管理员账号:admin,密码:admin123 ==="
else
  echo "❌ MongoDB安装失败,请检查日志"
  exit 1
fi

# ==================== 9. 安装完成总结 ====================
echo -e "\n=== 所有组件安装完成! ==="
echo "Docker 阿里源已配置,四大数据库已部署并挂载本地目录"
echo "本地挂载根目录:${MOUNT_BASE_DIR}"
echo "各组件信息:"
echo "1. PostgreSQL:端口5432,用户postgres,密码postgres123"
echo "2. MySQL:端口3306,用户root,密码mysql123,默认数据库testdb"
echo "3. Redis:端口6379,密码redis123(开启持久化)"
echo "4. MongoDB:端口27017,管理员admin,密码admin123"
echo "可通过 docker ps 查看所有运行的容器"

脚本使用说明

  1. 脚本执行步骤

  2. 登录Ubuntu22.04系统(建议使用root用户,或具有sudo权限的用户);

  3. 创建脚本文件:执行 vim docker-db-install.sh

  4. 将上述脚本复制粘贴到文件中,保存并退出(按ESC,输入:wq);

  5. 赋予脚本执行权限:chmod +x docker-db-install.sh

  6. 执行脚本:./docker-db-install.sh,等待执行完成(全程约5-10分钟,取决于网络速度)。

  7. 关键配置修改(可选)

  • 本地挂载目录:可修改 MOUNT_BASE_DIR 变量,默认是 /data/docker,建议保留默认路径,便于管理;

  • 数据库密码:可修改脚本中 PG_PASSWORD、MYSQL_PASSWORD、redis密码、MongoDB密码,建议设置复杂密码,提升安全性;

  • 数据库版本:可修改各数据库的 VERSION 变量,如将MySQL版本改为 5.7,PostgreSQL改为 14。

  1. 验证安装结果

脚本执行完成后,执行 docker ps,若能看到 postgres、mysql、redis、mongodb 四个容器的状态为 Up,则说明安装成功。

  1. 注意事项
  • 系统要求:必须是Ubuntu22.04版本,其他版本(如18.04、20.04)可能需要修改脚本中的源配置;

  • 网络要求:确保服务器能访问公网,否则无法下载Docker和数据库镜像;

  • 权限要求:必须使用具有sudo权限的用户执行脚本,否则会出现权限不足错误;

  • 端口冲突:若服务器已安装过某数据库(非Docker版),需先停止对应服务,避免端口冲突(如3306、5432、6379、27017端口);

  • 数据安全:本地挂载目录 /data/docker 需妥善保管,删除该目录会导致数据库数据丢失;

  • 脚本重试:若执行过程中因网络问题失败,可再次执行脚本,脚本会自动跳过已安装的组件,继续执行未完成的步骤。

常见问题排查

  • Docker安装失败:检查网络是否正常,阿里源是否添加成功,可执行 sudo apt update 查看是否有报错;

  • 容器启动失败:执行 docker logs 容器名(如 docker logs mysql),查看具体报错信息,多数是权限不足或端口冲突;

  • 数据库无法连接:检查服务器防火墙是否开放对应端口(如 sudo ufw allow 3306),或本地挂载目录权限是否正确。

相关推荐
梁山话事人2 小时前
Spring IOC
java·数据库·spring
木下~learning2 小时前
初学Linux之设备树的使用| RK3399上实操
linux·设备树·rk3568·rk3399·平台总线和外设总线
Yupureki2 小时前
《Linux系统编程》19.线程同步与互斥
java·linux·服务器·c语言·开发语言·数据结构·c++
又来敲代码了2 小时前
Zrlog博客的系统部署
java·linux·运维·mysql·apache·tornado
麦聪聊数据2 小时前
电商数据运营的最佳实践:WebSQL 如何兼顾数据分析效率与生产库安全
数据库·sql·低代码·restful
feng_you_ying_li2 小时前
linux开发工具的介绍(5)
linux·运维·centos
Lugas Luo2 小时前
Kernel 5.10 SD卡专属探测、上电与注册流程分析 (Detect -> Power Up -> Add)
linux·嵌入式硬件
艾莉丝努力练剑2 小时前
【Linux信号】Linux进程信号(下):可重入函数、Volatile关键字、SIGCHLD信号
linux·运维·服务器·c++·人工智能·后端·学习
大道V至简2 小时前
解决docker apt安装缓慢,切换国内源
docker