说明:本脚本适用于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 查看所有运行的容器"
脚本使用说明
-
脚本执行步骤
-
登录Ubuntu22.04系统(建议使用root用户,或具有sudo权限的用户);
-
创建脚本文件:执行 vim docker-db-install.sh;
-
将上述脚本复制粘贴到文件中,保存并退出(按ESC,输入:wq);
-
赋予脚本执行权限:chmod +x docker-db-install.sh;
-
执行脚本:./docker-db-install.sh,等待执行完成(全程约5-10分钟,取决于网络速度)。
-
关键配置修改(可选)
-
本地挂载目录:可修改 MOUNT_BASE_DIR 变量,默认是 /data/docker,建议保留默认路径,便于管理;
-
数据库密码:可修改脚本中 PG_PASSWORD、MYSQL_PASSWORD、redis密码、MongoDB密码,建议设置复杂密码,提升安全性;
-
数据库版本:可修改各数据库的 VERSION 变量,如将MySQL版本改为 5.7,PostgreSQL改为 14。
- 验证安装结果
脚本执行完成后,执行 docker ps,若能看到 postgres、mysql、redis、mongodb 四个容器的状态为 Up,则说明安装成功。
- 注意事项
-
系统要求:必须是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),或本地挂载目录权限是否正确。