This commit is contained in:
Your Name
2024-11-12 00:07:46 +08:00
commit b00f025742
24 changed files with 1912 additions and 0 deletions

262
docker_management.sh Executable file
View File

@@ -0,0 +1,262 @@
#!/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 <<EOT
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia]
runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia.options]
BinaryName = "/usr/bin/nvidia-container-runtime"
EOT
sudo systemctl restart containerd
echo "containerd 和 CNI 插件已安装并配置。"
echo "正在安装和配置 containerd-rootless..."
# 获取最新的 containerd 版本
LATEST_CONTAINERD_VERSION=$(curl -s https://api.github.com/repos/containerd/containerd/releases/latest | jq -r .tag_name)
curl -LO https://github.com/containerd/containerd/releases/download/${LATEST_CONTAINERD_VERSION}/containerd-${LATEST_CONTAINERD_VERSION}-linux-amd64.tar.gz
sudo tar -xvf containerd-${LATEST_CONTAINERD_VERSION}-linux-amd64.tar.gz -C /usr/local/bin/
# 切换到普通用户执行安装脚本
sudo -u $(getent passwd 1000 | cut -d: -f1) bash << EOF
containerd-rootless-setuptool.sh install
echo "设置环境变量..."
echo 'export XDG_RUNTIME_DIR=/run/user/$(id -u)' >> ~/.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 <<EOT
[Unit]
Description=BuildKit
Documentation=https://github.com/moby/buildkit
[Service]
Type=notify
NotifyAccess=all
ExecStart=/usr/local/bin/buildkitd --addr unix:///run/buildkit/buildkitd.sock
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
EOT
sudo systemctl enable buildkit
sudo systemctl start buildkit
echo "buildkit 安装并配置完成。"
}
install_docker() {
echo "正在安装或更新 Docker..."
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 --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 <<EOT
{
"debug": true,
"log-level": "info",
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
},
"containerd": {
"path": "containerd",
"runtimeArgs": []
}
},
"default-runtime": "containerd",
"live-restore": true,
"data-root": "/opt/docker",
"features": {
"buildkit": true,
"containerd": true
},
"experimental": true
}
EOT
sudo systemctl restart docker
echo "Docker 已配置。"
}
install_nerdctl() {
install_jq
echo "正在安装 nerdctl..."
# 获取最新版本
LATEST_VERSION=$(curl -s https://api.github.com/repos/containerd/nerdctl/releases/latest | jq -r .tag_name)
if [ -z "$LATEST_VERSION" ]; then
echo "无法获取 nerdctl 的最新版本。"
exit 1
fi
# 下载并安装 nerdctl
curl -LO https://github.com/containerd/nerdctl/releases/download/${LATEST_VERSION}/nerdctl-${LATEST_VERSION}-linux-amd64.tar.gz
sudo tar xzvf nerdctl-${LATEST_VERSION}-linux-amd64.tar.gz -C /usr/local/bin
sudo rm nerdctl-${LATEST_VERSION}-linux-amd64.tar.gz
nerdctl version
echo "nerdctl ${LATEST_VERSION} 已安装。"
}
uninstall_docker() {
echo "正在卸载 Docker..."
sudo systemctl stop docker
sudo apt-get purge -y docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker
sudo rm -rf /etc/docker
sudo rm /etc/systemd/system/docker.service
sudo rm /etc/systemd/system/docker.socket
sudo systemctl daemon-reload
echo "Docker 已卸载。"
}
uninstall_all() {
echo "正在卸载所有组件..."
uninstall_docker
sudo apt-get purge -y containerd runc
sudo rm -rf /etc/containerd
sudo rm -rf /opt/cni/bin
sudo rm -rf /usr/local/bin/nerdctl
sudo systemctl daemon-reload
echo "所有组件已卸载。"
}
install_all() {
install_containerd_and_cni
install_docker
install_docker_compose
install_nerdctl
install_nvidia_docker
install_buildkit
configure_docker
}
echo "选择操作:"
echo "1) 安装 Docker Compose"
echo "2) 卸载 Docker Compose"
echo "3) 重新安装 Docker"
echo "4) 卸载 Docker"
echo "5) 安装 NVIDIA Docker"
echo "6) 安装 containerd 和 CNI 插件"
echo "7) 配置 Docker"
echo "8) 全部安装"
echo "9) 卸载所有组件"
echo "10) 安装 nerdctl"
echo "11) 安装 buildkit"
echo "12) 退出"
read -p "输入选择1-12" choice
case $choice in
1) install_docker_compose ;;
2) uninstall_docker_compose ;;
3) reinstall_docker ;;
4) uninstall_docker ;;
5) install_nvidia_docker ;;
6) install_containerd_and_cni ;;
7) configure_docker ;;
8) install_all ;;
9) uninstall_all ;;
10) install_nerdctl ;;
11) install_buildkit ;;
12) exit 0 ;;
*) echo "无效输入。" ;;
esac