#!/bin/bash # Docker Compose 安装路径 DOCKER_COMPOSE_PATH="/usr/local/bin/docker-compose" install_runc() { echo "正在安装 runc..." sudo apt-get update sudo apt-get install -y runc echo "runc 安装完成。" } install_containerd_and_cni() { install_runc echo "正在安装 containerd 和 CNI 插件..." sudo apt-get update sudo apt-get install -y containerd uidmap jq sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml sudo mkdir -p /opt/cni/bin curl -L https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz | sudo tar -C /opt/cni/bin -xz sudo tee -a /etc/containerd/config.toml > /dev/null <> ~/.bashrc EOF echo "containerd-rootless 安装和配置完成。" } install_buildkit() { echo "正在安装 buildkit..." # 获取最新的 buildkit 版本 LATEST_BUILDKIT_VERSION=$(curl -s https://api.github.com/repos/moby/buildkit/releases/latest | jq -r .tag_name) curl -LO https://github.com/moby/buildkit/releases/download/${LATEST_BUILDKIT_VERSION}/buildkit-${LATEST_BUILDKIT_VERSION}.linux-amd64.tar.gz sudo tar -xvf buildkit-${LATEST_BUILDKIT_VERSION}.linux-amd64.tar.gz -C /usr/local/ sudo rm buildkit-${LATEST_BUILDKIT_VERSION}.linux-amd64.tar.gz # 配置 systemd 服务 sudo tee /etc/systemd/system/buildkit.service > /dev/null < /dev/null sudo apt update sudo apt install -y docker-ce docker-ce-cli --no-install-recommends echo "Docker 安装或更新完成。" } reinstall_docker() { echo "正在重新安装 Docker..." sudo apt-get remove -y docker docker-engine docker.io runc sudo apt update sudo apt install -y apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/$(. /etc/os-release;echo $ID)/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/$(. /etc/os-release;echo $ID) $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io --no-install-recommends sudo systemctl enable docker sudo systemctl start docker echo "Docker 已重新安装。" } install_jq() { echo "正在安装 jq..." sudo apt-get update sudo apt-get install -y jq echo "jq 安装完成。" } install_docker_compose() { install_jq echo "正在安装 Docker Compose..." # 使用 GitHub API 获取最新版本 LATEST_RELEASE=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | jq -r .tag_name) if [ -z "$LATEST_RELEASE" ]; then echo "无法获取 Docker Compose 的最新版本。" exit 1 fi # 更新 Docker Compose 安装 URL 以使用最新版本 DOCKER_COMPOSE_URL="https://ghproxy.dockless.eu.org/https://github.com/docker/compose/releases/download/${LATEST_RELEASE}/docker-compose-$(uname -s)-$(uname -m)" sudo curl -L $DOCKER_COMPOSE_URL -o $DOCKER_COMPOSE_PATH sudo chmod +x $DOCKER_COMPOSE_PATH echo "Docker Compose ${LATEST_RELEASE} 已安装。" } install_nvidia_docker() { echo "正在安装 NVIDIA Docker..." sudo apt-get update sudo apt-get install -y curl gnupg lsb-release curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list sudo apt-get update sudo apt-get install -y nvidia-container-toolkit sudo nvidia-ctk runtime configure --runtime=docker sudo systemctl restart docker echo "NVIDIA Docker 已安装。" } configure_docker() { echo "正在配置 Docker..." mkdir -p /opt/docker sudo tee /etc/docker/daemon.json > /dev/null <