#!/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 "$@"