Files
dock/Docker 24.0.5
2025-10-28 22:29:18 +08:00

204 lines
5.6 KiB
Bash
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
set -e
echo "=========================================="
echo " Debian专用 Docker 一键安装脚本"
echo "=========================================="
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# 日志函数
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
# 检查磁盘空间
check_disk_space() {
log_info "检查磁盘空间..."
local available=$(df / | awk 'NR==2 {print $4}')
if [ "$available" -lt 1048576 ]; then # 小于1GB
log_warn "磁盘空间紧张,正在清理..."
apt-get clean
rm -rf /var/lib/apt/lists/*
rm -rf /tmp/*
journalctl --vacuum-size=50M
fi
}
# 安装基础依赖(最小化)
install_minimal_deps() {
log_info "安装最小化依赖..."
apt-get update --allow-unauthenticated || {
log_warn "APT更新失败继续安装..."
}
apt-get install -y --allow-unauthenticated \
curl \
wget \
gnupg \
ca-certificates \
iptables \
libseccomp2
}
# 彻底清理有问题的docker配置
clean_docker_config() {
log_info "清理Docker配置..."
# 停止docker服务
systemctl stop docker 2>/dev/null || true
systemctl stop containerd 2>/dev/null || true
# 移除旧配置
rm -f /etc/apt/sources.list.d/docker.list
rm -f /etc/apt/sources.list.d/docker.list.save
rm -rf /var/lib/docker
}
# 下载并安装Docker二进制文件完全离线方式
install_docker_binary() {
log_info "下载Docker二进制文件..."
# 创建安装目录
INSTALL_DIR="/opt/docker-bin"
mkdir -p $INSTALL_DIR
cd $INSTALL_DIR
# 下载Docker静态二进制文件从官方release
DOCKER_VERSION="24.0.5"
log_info "下载Docker $DOCKER_VERSION 静态二进制文件..."
# 下载docker cli
if [ ! -f "docker" ]; then
wget -O docker https://download.docker.com/linux/static/stable/x86_64/docker-$DOCKER_VERSION.tgz && \
tar xzvf docker-$DOCKER_VERSION.tgz && \
cp docker/docker /usr/local/bin/ && \
chmod +x /usr/local/bin/docker
fi
# 下载docker-compose
if [ ! -f "docker-compose" ]; then
DOCKER_COMPOSE_VERSION="2.20.2"
wget -O /usr/local/bin/docker-compose "https://github.com/docker/compose/releases/download/v$DOCKER_COMPOSE_VERSION/docker-compose-$(uname -s)-$(uname -m)" && \
chmod +x /usr/local/bin/docker-compose
fi
}
# 使用官方脚本安装(网络方式)
install_docker_official() {
log_info "使用Docker官方脚本安装..."
# 下载并运行官方安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh
# 修改脚本以跳过空间检查
sed -i 's/check_space/#check_space/g' get-docker.sh
sed -i 's/apt_get_update/#apt_get_update/g' get-docker.sh
# 运行修改后的脚本
sh get-docker.sh --version 24.0.5
# 如果官方脚本失败,使用备用方法
if [ $? -ne 0 ]; then
log_warn "官方脚本安装失败,使用备用方法..."
install_docker_backup
fi
}
# 备用安装方法
install_docker_backup() {
log_info "使用备用方法安装Docker..."
# 直接下载deb包安装
cd /tmp
wget https://download.docker.com/linux/debian/dists/bookworm/pool/stable/amd64/docker-ce_24.0.5-1~debian.12~bookworm_amd64.deb
wget https://download.docker.com/linux/debian/dists/bookworm/pool/stable/amd64/docker-ce-cli_24.0.5-1~debian.12~bookworm_amd64.deb
wget https://download.docker.com/linux/debian/dists/bookworm/pool/stable/amd64/containerd.io_1.6.21-1_amd64.deb
# 安装依赖
apt-get install -y --allow-unauthenticated \
libltdl7 \
pigz \
iptables
# 安装docker包
dpkg -i containerd.io_1.6.21-1_amd64.deb
dpkg -i docker-ce-cli_24.0.5-1~debian.12~bookworm_amd64.deb
dpkg -i docker-ce_24.0.5-1~debian.12~bookworm_amd64.deb
}
# 配置Docker服务
setup_docker_service() {
log_info "配置Docker服务..."
# 创建docker组
groupadd docker 2>/dev/null || true
# 配置docker daemon
mkdir -p /etc/docker
cat > /etc/docker/daemon.json << 'EOF'
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "50m",
"max-file": "3"
},
"storage-driver": "overlay2",
"data-root": "/var/lib/docker"
}
EOF
# 启动服务
systemctl enable docker
systemctl start docker
# 等待服务启动
sleep 3
}
# 验证安装
verify_installation() {
log_info "验证安装..."
if command -v docker &> /dev/null; then
docker --version
log_info "✅ Docker安装成功"
else
log_error "❌ Docker安装失败"
return 1
fi
# 测试docker服务
if systemctl is-active docker &> /dev/null; then
log_info "✅ Docker服务运行正常"
else
log_warn "⚠️ Docker服务未运行尝试启动..."
systemctl start docker
fi
}
# 主函数
main() {
log_info "开始Docker安装流程..."
check_disk_space
clean_docker_config
install_minimal_deps
install_docker_official
setup_docker_service
verify_installation
log_info "🎉 Docker安装完成"
echo ""
echo "使用说明:"
echo " docker --version # 查看版本"
echo " systemctl status docker # 查看服务状态"
echo " usermod -aG docker \$USER # 添加用户到docker组"
}
# 执行主函数
main "$@"