diff --git a/docker.sh b/docker.sh index 4fff810..0e8769d 100644 --- a/docker.sh +++ b/docker.sh @@ -1,91 +1,51 @@ #!/bin/bash -# 默认使用国内镜像 -USE_CHINA_MIRROR="yes" - -# 询问用户是否使用国内镜像 -read -p "是否使用国内镜像站点安装 Docker 和 Docker Compose? [yes/no] (默认: yes): " USE_CHINA_MIRROR -USE_CHINA_MIRROR=${USE_CHINA_MIRROR:-yes} - -# 设置镜像站点 -if [ "$USE_CHINA_MIRROR" = "yes" ]; then - DOCKER_MIRROR="https://mirrors.aliyun.com/docker-ce" - DOCKER_COMPOSE_URL="https://get.daocloud.io/docker/compose/releases/download" - echo "使用国内镜像站点安装 Docker 和 Docker Compose。" -else - DOCKER_MIRROR="https://download.docker.com" - DOCKER_COMPOSE_URL="https://github.com/docker/compose/releases/download" - echo "使用官方站点安装 Docker 和 Docker Compose。" -fi - -# 方法 1: 固定版本号(根据需要手动更新) -DOCKER_COMPOSE_VERSION="v2.35.1" - -# 方法 2: 从阿里云镜像站点获取版本号(无需访问 GitHub) -if [ "$USE_CHINA_MIRROR" = "yes" ]; then - DOCKER_COMPOSE_VERSION=$(curl -s https://mirrors.aliyun.com/docker-ce/linux/static/stable-x86_64/ | grep -oP 'docker-compose-\K.*(?=-linux-x86_64)' | tail -1) -fi - -# 检测操作系统类型 -if [ -f /etc/os-release ]; then - . /etc/os-release - OS=$ID - VERSION=$VERSION_ID -else - echo "无法检测操作系统类型" +# 检查是否为root用户 +if [ "$(id -u)" -ne 0 ]; then + echo "请使用root用户或通过sudo运行此脚本" exit 1 fi -# 安装 Docker -install_docker() { - case $OS in - "debian") - sudo apt-get update - sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common - curl -fsSL ${DOCKER_MIRROR}/linux/debian/gpg | sudo apt-key add - - sudo add-apt-repository "deb [arch=amd64] ${DOCKER_MIRROR}/linux/debian $(lsb_release -cs) stable" - sudo apt-get update - sudo apt-get install -y docker-ce docker-ce-cli containerd.io - ;; - "ubuntu") - sudo apt-get update - sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common - curl -fsSL ${DOCKER_MIRROR}/linux/ubuntu/gpg | sudo apt-key add - - sudo add-apt-repository "deb [arch=amd64] ${DOCKER_MIRROR}/linux/ubuntu $(lsb_release -cs) stable" - sudo apt-get update - sudo apt-get install -y docker-ce docker-ce-cli containerd.io - ;; - "centos"|"rocky"|"almalinux") - sudo yum install -y yum-utils - sudo yum-config-manager --add-repo ${DOCKER_MIRROR}/linux/centos/docker-ce.repo - sudo yum install -y docker-ce docker-ce-cli containerd.io - ;; - *) - echo "不支持的操作系统: $OS" - exit 1 - ;; - esac +# 询问是否使用国内镜像 +read -p "是否使用国内镜像源?(y/n,默认为n): " use_mirror +use_mirror=${use_mirror:-n} - # 启动并启用 Docker 服务 - sudo systemctl start docker - sudo systemctl enable docker -} +# 安装依赖 +apt-get update +apt-get install -y \ + apt-transport-https \ + ca-certificates \ + curl \ + gnupg \ + lsb-release -# 安装 Docker Compose -install_docker_compose() { - echo "正在安装 Docker Compose 版本: $DOCKER_COMPOSE_VERSION" - sudo curl -L "${DOCKER_COMPOSE_URL}/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose - sudo chmod +x /usr/local/bin/docker-compose -} +# 添加Docker官方GPG密钥 +if [ "$use_mirror" = "y" ] || [ "$use_mirror" = "Y" ]; then + echo "使用国内镜像源..." + # 使用阿里云镜像 + curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg + echo \ + "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \ + $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null +else + echo "使用官方Docker源..." + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg + echo \ + "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ + $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null +fi -# 主函数 -main() { - install_docker - install_docker_compose +# 安装Docker引擎 +apt-get update +apt-get install -y docker-ce docker-ce-cli containerd.io - echo "Docker 和 Docker Compose 安装完成!" - docker --version - docker-compose --version -} +# 安装Docker Compose +COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') +curl -L "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose +chmod +x /usr/local/bin/docker-compose -main \ No newline at end of file +# 验证安装 +docker --version +docker-compose --version + +echo "Docker和Docker Compose安装完成!" \ No newline at end of file