compliance/install-docker.sh
gongwenxin 9bd3cb63f3 docker
2025-08-13 09:52:59 +08:00

191 lines
5.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Docker和Docker Compose安装脚本
# 支持CentOS/RHEL 7+, Ubuntu 18.04+, Debian 9+
set -e
echo "=== Docker和Docker Compose安装脚本 ==="
# 检测操作系统
if [ -f /etc/os-release ]; then
. /etc/os-release
OS=$NAME
VER=$VERSION_ID
else
echo "[错误] 无法检测操作系统版本"
exit 1
fi
echo "[信息] 检测到操作系统: $OS $VER"
# 检查是否已安装Docker
if command -v docker >/dev/null 2>&1; then
echo "[信息] Docker已安装: $(docker --version)"
DOCKER_INSTALLED=true
else
echo "[信息] Docker未安装准备安装..."
DOCKER_INSTALLED=false
fi
# 检查是否已安装Docker Compose
if command -v docker-compose >/dev/null 2>&1; then
echo "[信息] Docker Compose已安装: $(docker-compose --version)"
COMPOSE_INSTALLED=true
else
echo "[信息] Docker Compose未安装准备安装..."
COMPOSE_INSTALLED=false
fi
# 安装Docker
install_docker() {
case "$OS" in
"Ubuntu"|"Debian GNU/Linux")
echo "[信息] 在Ubuntu/Debian上安装Docker..."
# 更新包索引
sudo apt-get update
# 安装必要的包
sudo apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 设置稳定版仓库
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装Docker Engine
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
;;
"CentOS Linux"|"Red Hat Enterprise Linux")
echo "[信息] 在CentOS/RHEL上安装Docker..."
# 安装必要的包
sudo yum install -y yum-utils
# 设置稳定版仓库
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 安装Docker Engine
sudo yum install -y docker-ce docker-ce-cli containerd.io
;;
*)
echo "[错误] 不支持的操作系统: $OS"
echo "请手动安装Docker: https://docs.docker.com/engine/install/"
exit 1
;;
esac
# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker
# 将当前用户添加到docker组
sudo usermod -aG docker $USER
echo "[成功] Docker安装完成"
}
# 安装Docker Compose
install_docker_compose() {
echo "[信息] 安装Docker Compose..."
# 获取最新版本号
COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep 'tag_name' | cut -d\" -f4)
if [ -z "$COMPOSE_VERSION" ]; then
echo "[警告] 无法获取最新版本,使用默认版本 v2.20.2"
COMPOSE_VERSION="v2.20.2"
fi
echo "[信息] 下载Docker Compose $COMPOSE_VERSION..."
# 下载Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/$COMPOSE_VERSION/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 设置执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 创建符号链接(如果需要)
if [ ! -f /usr/bin/docker-compose ]; then
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
fi
echo "[成功] Docker Compose安装完成"
}
# 验证安装
verify_installation() {
echo "[信息] 验证安装..."
if docker --version >/dev/null 2>&1; then
echo "[成功] Docker: $(docker --version)"
else
echo "[错误] Docker安装失败"
return 1
fi
if docker-compose --version >/dev/null 2>&1; then
echo "[成功] Docker Compose: $(docker-compose --version)"
else
echo "[错误] Docker Compose安装失败"
return 1
fi
# 测试Docker是否可以运行
if sudo docker run --rm hello-world >/dev/null 2>&1; then
echo "[成功] Docker运行测试通过"
else
echo "[警告] Docker运行测试失败可能需要重新登录或重启系统"
fi
}
# 主安装流程
main() {
# 检查是否为root用户或有sudo权限
if [ "$EUID" -eq 0 ]; then
echo "[警告] 检测到root用户建议使用普通用户运行此脚本"
elif ! sudo -n true 2>/dev/null; then
echo "[错误] 需要sudo权限来安装Docker"
exit 1
fi
# 安装Docker
if [ "$DOCKER_INSTALLED" = false ]; then
install_docker
fi
# 安装Docker Compose
if [ "$COMPOSE_INSTALLED" = false ]; then
install_docker_compose
fi
# 验证安装
verify_installation
echo ""
echo "=== 安装完成 ==="
echo ""
echo "注意事项:"
echo "1. 如果这是首次安装Docker请重新登录或运行 'newgrp docker' 来刷新用户组"
echo "2. 确保Docker服务正在运行: sudo systemctl status docker"
echo "3. 现在可以运行DMS合规性测试工具的部署脚本了"
echo ""
}
# 运行主函数
main "$@"