docker安装minio教程
·
文章目录
一、# 建目录结构脚本 (setup_directories.sh)
#!/bin/bash
echo "创建minio目录结构..."
sudo mkdir -p /software/minio/{data,logs,config}
# 设置目录权限
echo "设置目录权限..."
sudo chmod -R 755 /software/minio
sudo chown -R $USER:$USER /software/minio
echo "目录创建完成!"

二、使用步骤
1.安装脚本(install_minio.sh)
提示:创建my-network,否则删除 --network my-network \
代码如下(示例):
#!/bin/bash
#!/bin/bash
# MinIO 安装脚本 - 修复版
# 描述: 自动安装和配置 MinIO 服务
echo "=============================================="
echo " MinIO 安装脚本 (稳定版)"
echo "=============================================="
# 检查是否以 root 用户运行
if [ "$EUID" -ne 0 ]; then
echo "请使用 root 用户运行此脚本"
exit 1
fi
# 创建目录结构
echo "1. 创建目录结构..."
mkdir -p /software/minio/{data,config,logs,script}
chmod -R 755 /software/minio
chown -R $SUDO_USER:$SUDO_USER /software/minio
# 创建 MinIO 配置文件
echo "2. 创建 MinIO 配置文件..."
cat > /software/minio/config/minio_server_config.json << 'EOF'
{
"version": "1.0",
"credential": {
"accessKey": "minio",
"secretKey": "minio123456"
},
"region": "us-east-1",
"browser": "on",
"storageclass": {
"standard": "EC:2"
},
"cache": {
"drives": [],
"expiry": 90,
"exclude": []
},
"notify": {
"webhook": {
"1": {
"enable": true,
"endpoint": "",
"authToken": ""
}
}
}
}
EOF
# 尝试拉取不同镜像源的稳定版本
echo "3. 拉取 MinIO 稳定版本..."
# 定义不同版本的尝试列表
VERSION_ATTEMPTS=(
# 最新稳定版(2025推荐)
"quay.io/minio/minio:RELEASE.2025-04-22T22-12-26Z"
# 最新稳定版(推荐)
"quay.io/minio/minio:RELEASE.2024-12-30T17-25-45Z"
"quay.io/minio/minio:RELEASE.2024-10-31T10-17-06Z"
"quay.io/minio/minio:RELEASE.2024-08-28T08-04-40Z"
# 旧仓库地址(可能还有部分版本)
"minio/minio:RELEASE.2023-12-24T18-09-15Z"
"minio/minio:RELEASE.2023-10-25T16-29-38Z"
# 最新标签
"quay.io/minio/minio:latest"
# 替代方案:Bitnami MinIO(如果需要)
"bitnami/minio:latest"
)
for image_url in "${VERSION_ATTEMPTS[@]}"; do
echo "尝试拉取: $image_url"
if docker pull $image_url; then
echo "✅ 成功拉取: $image_url"
TARGET_IMAGE=$image_url
# 解析镜像名称和标签
if [[ $image_url == *":"* ]]; then
IFS=':' read -r IMAGE_NAME IMAGE_TAG <<< "$image_url"
else
IMAGE_NAME=$image_url
IMAGE_TAG="latest"
fi
# 记录版本信息
echo "IMAGE_NAME=$IMAGE_NAME" > /software/minio/config/version.info
echo "IMAGE_TAG=$IMAGE_TAG" >> /software/minio/config/version.info
echo "PULLED_FROM=$image_url" >> /software/minio/config/version.info
break
else
echo "❌ 拉取失败: $image_url"
# 如果是 quay.io 失败,尝试添加重试或检查网络
if [[ $image_url == quay.io* ]]; then
echo "提示: 检查是否能访问 quay.io,或尝试以下命令:"
echo " curl -I https://quay.io"
echo "可能需要设置代理或使用镜像源"
fi
fi
echo ""
done
if [ -z "$TARGET_IMAGE" ]; then
echo "❌ 所有镜像拉取均失败"
# 提供解决方案
echo ""
echo "解决方案:"
echo "1. 检查网络连接: docker pull hello-world"
echo "2. 如果是 quay.io 被墙,可以使用以下镜像:"
echo " - docker pull bitnami/minio:latest"
echo " - docker pull minio/minio:latest (旧仓库)"
echo "3. 设置 Docker 镜像加速器"
# 尝试使用 Docker Hub 的最新版作为后备
echo "4. 尝试拉取最新版作为后备..."
if docker pull minio/minio:latest; then
echo "✅ 成功拉取 minio/minio:latest"
TARGET_IMAGE="minio/minio:latest"
else
exit 1
fi
fi
# 创建启动脚本
echo "4. 创建启动脚本..."
cat > /software/minio/script/start_minio.sh << 'EOF'
#!/bin/bash
# MinIO 启动脚本
CONFIG_DIR="/software/minio/config"
DATA_DIR="/software/minio/data"
LOGS_DIR="/software/minio/logs"
# 检查容器是否已存在
if [ "$(docker ps -aq -f name=minio)" ]; then
echo "停止并移除现有的 MinIO 容器..."
docker stop minio
docker rm minio
fi
echo "启动 MinIO 容器..."
docker run -d \
--name minio \
--restart=unless-stopped \
--network my-network \ #网络
-p 9000:9000 \
-p 9090:9090 \
-e "MINIO_ROOT_USER=minio" \
-e "MINIO_ROOT_PASSWORD=minio123456" \
-v $DATA_DIR:/data \
-v $CONFIG_DIR:/root/.minio \
$TARGET_IMAGE server /data --console-address ":9090"
echo "MinIO 已启动!"
echo "控制台地址: http://localhost:9090"
echo "API 地址: http://localhost:9000"
echo "用户名: minio"
echo "密码: minio123456"
EOF
chmod +x /software/minio/script/start_minio.sh
# 设置脚本权限
echo "5. 设置脚本权限..."
chmod +x /software/minio/script/*.sh 2>/dev/null || true
chown -R $SUDO_USER:$SUDO_USER /software/minio
echo "=============================================="
echo "✅ MinIO 安装完成!"
echo "=============================================="
echo "使用的镜像: $TARGET_IMAGE"
echo "安装目录: /software/minio"
echo "数据目录: /software/minio/data"
echo "配置目录: /software/minio/config"
echo "日志目录: /software/minio/logs"
echo "脚本目录: /software/minio/script"
echo ""
echo "下一步操作:"
echo "1. 启动服务: /software/minio/script/start_minio.sh"
echo "2. 查看状态: docker ps | grep minio"
echo "3. 访问控制台: http://服务器IP:9090"
echo "4. 用户名: minio"
echo "5. 密码: minio123456"
echo "=============================================="
2.启动脚本(start_minio.sh)
代码如下(示例):
#!/bin/bash
# MinIO 启动脚本
# 描述: 启动 MinIO Docker 容器服务
echo "=============================================="
echo " MinIO 服务启动"
echo "=============================================="
# 检查 Docker 服务状态
if ! systemctl is-active --quiet docker; then
echo "启动 Docker 服务..."
systemctl start docker
sleep 3
fi
# 读取版本信息
VERSION_FILE="/software/minio/config/version.info"
DEFAULT_IMAGE="quay.io/minio/minio:latest"
if [ -f "$VERSION_FILE" ]; then
echo "读取版本配置信息..."
source "$VERSION_FILE"
# 处理不同的版本信息格式
if [ -n "$IMAGE_NAME" ] && [ -n "$IMAGE_TAG" ]; then
# 新格式:IMAGE_NAME 和 IMAGE_TAG
TARGET_IMAGE="${IMAGE_NAME}:${IMAGE_TAG}"
elif [ -n "$ACTUAL_VERSION" ]; then
# 旧格式:只有 ACTUAL_VERSION
TARGET_IMAGE="minio/minio:${ACTUAL_VERSION}"
elif [ -n "$PULLED_FROM" ]; then
# 直接从拉取记录获取
TARGET_IMAGE="$PULLED_FROM"
else
TARGET_IMAGE="$DEFAULT_IMAGE"
fi
else
# 如果没有版本记录,使用默认
TARGET_IMAGE="$DEFAULT_IMAGE"
fi
echo "使用镜像: $TARGET_IMAGE"
# 解析镜像名称和标签
IMAGE_NAME_PART=$(echo "$TARGET_IMAGE" | cut -d':' -f1)
IMAGE_TAG_PART=$(echo "$TARGET_IMAGE" | cut -d':' -f2-)
# 检查 MinIO 镜像是否存在
echo "检查 MinIO 镜像..."
IMAGE_EXISTS=false
# 方法1: 直接尝试查找完整镜像
if docker image inspect "$TARGET_IMAGE" > /dev/null 2>&1; then
IMAGE_EXISTS=true
echo "✅ 镜像存在: $TARGET_IMAGE"
else
# 方法2: 检查是否有任何标签匹配
if docker images | awk -v img="$IMAGE_NAME_PART" -v tag="$IMAGE_TAG_PART" \
'$1 == img && $2 == tag {exit 0} END {exit 1}'; then
IMAGE_EXISTS=true
echo "✅ 镜像存在: $TARGET_IMAGE"
else
echo "❌ 镜像不存在,尝试拉取..."
# 尝试拉取镜像
if ! docker pull "$TARGET_IMAGE"; then
echo "⚠️ 镜像拉取失败,尝试使用默认镜像..."
if docker pull "$DEFAULT_IMAGE"; then
TARGET_IMAGE="$DEFAULT_IMAGE"
IMAGE_NAME_PART=$(echo "$TARGET_IMAGE" | cut -d':' -f1)
IMAGE_TAG_PART=$(echo "$TARGET_IMAGE" | cut -d':' -f2-)
IMAGE_EXISTS=true
echo "✅ 使用默认镜像: $TARGET_IMAGE"
else
echo "❌ 所有镜像拉取均失败"
echo "请检查网络连接或手动拉取镜像:"
echo " docker pull quay.io/minio/minio:latest"
exit 1
fi
else
IMAGE_EXISTS=true
echo "✅ 镜像拉取成功: $TARGET_IMAGE"
fi
fi
fi
# 检查容器是否已存在并运行
if docker ps --format '{{.Names}}' | grep -q "^minio$"; then
echo "⚠️ MinIO 容器已在运行中"
echo "如需重启,请运行: /software/minio/script/restart_minio.sh"
exit 0
fi
# 检查容器是否存在但已停止
if docker ps -a --format '{{.Names}}' | grep -q "^minio$"; then
echo "启动已存在的 MinIO 容器..."
docker start minio
else
echo "创建并启动新的 MinIO 容器..."
# 创建必要的目录
mkdir -p /software/minio/data
mkdir -p /software/minio/config
mkdir -p /software/minio/logs
# 设置目录权限
chmod -R 755 /software/minio
[ -n "$SUDO_USER" ] && chown -R "$SUDO_USER:$SUDO_USER" /software/minio 2>/dev/null || true
# 启动 MinIO 容器
docker run -d \
--name minio \
--restart always \
-p 9000:9000 \
-p 9090:9090 \
-e "MINIO_ROOT_USER=minio" \
-e "MINIO_ROOT_PASSWORD=minio123456" \
-v /software/minio/data:/data \
-v /software/minio/config:/root/.minio \
-v /software/minio/logs:/var/log/minio \
"$TARGET_IMAGE" \
server /data \
--console-address ":9090" \
--address ":9000"
# 记录启动的镜像信息
echo "STARTED_IMAGE=$TARGET_IMAGE" > /software/minio/config/last_started.info
date >> /software/minio/config/last_started.info
fi
# 等待服务启动
echo "等待服务启动..."
sleep 10
# 增加健康检查
for i in {1..10}; do
if docker ps --format '{{.Names}}' | grep -q "^minio$" && \
docker logs minio 2>&1 | tail -5 | grep -q "API\|Console"; then
echo "✅ MinIO 服务启动成功"
break
fi
if [ $i -eq 10 ]; then
echo "⚠️ MinIO 启动较慢,仍在初始化..."
echo "查看日志: docker logs minio"
else
echo "等待服务就绪... ($i/10)"
sleep 3
fi
done
# 获取服务器IP
SERVER_IP=$(hostname -I | awk '{print $1}')
if [ -z "$SERVER_IP" ]; then
SERVER_IP="localhost"
fi
echo ""
echo "📊 服务信息:"
echo "----------------------------------------------"
echo "容器状态: $(docker inspect -f '{{.State.Status}}' minio 2>/dev/null || echo '未知')"
echo "使用镜像: $TARGET_IMAGE"
echo "控制台地址: http://${SERVER_IP}:9090"
echo "API 地址: http://${SERVER_IP}:9000"
echo "用户名: minio"
echo "密码: minio123456"
echo ""
echo "🔧 常用命令:"
echo "查看日志: docker logs minio"
echo "重启服务: docker restart minio"
echo "停止服务: docker stop minio"
echo "进入容器: docker exec -it minio /bin/sh"
echo "----------------------------------------------"
# 显示容器日志的最后几行
echo ""
echo "📝 最近日志:"
docker logs minio --tail 5 2>/dev/null || echo "无法获取日志"
echo "=============================================="
3. 重启脚本(restart_minio.sh)
代码如下(示例):
#!/bin/bash
# MinIO 重启脚本
# 描述: 重启 MinIO Docker 容器服务
echo "=============================================="
echo " MinIO 服务重启"
echo "=============================================="
# 调用停止脚本
echo "停止 MinIO 服务..."
/software/minio/script/stop_minio.sh
# 等待清理完成
sleep 2
# 调用启动脚本
echo "启动 MinIO 服务..."
/software/minio/script/start_minio.sh
# 检查最终状态
if docker ps | grep -q minio; then
echo "✅ MinIO 服务重启完成"
else
echo "❌ MinIO 服务重启失败"
exit 1
fi
echo "=============================================="
4.停止脚本(stop_minio.sh)
代码如下(示例):
#!/bin/bash
# MinIO 停止脚本
# 描述: 停止 MinIO Docker 容器服务
echo "=============================================="
echo " MinIO 服务停止"
echo "=============================================="
# 检查容器是否存在
if docker ps -a | grep -q minio; then
# 停止容器
if docker ps | grep -q minio; then
echo "停止 MinIO 容器..."
docker stop minio
echo "✅ MinIO 容器已停止"
else
echo "ℹ️ MinIO 容器已处于停止状态"
fi
# 删除容器
echo "删除 MinIO 容器..."
docker rm minio
echo "✅ MinIO 容器已删除"
else
echo "ℹ️ MinIO 容器不存在,无需操作"
fi
echo "=============================================="
5.执行脚本
代码如下(示例):
1. 给所有脚本添加执行权限
chmod +x setup_directories.sh install_minio.sh restart_minio.sh start_minio.sh stop_minio.sh
2. 创建目录结构
./setup_directories.sh
3. 安装
./install_minio.sh
4. 启动
./start_minio.sh
更多推荐

所有评论(0)