Files
dock/Docker 24.0.5
2025-10-28 22:26:34 +08:00

209 lines
5.3 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 " Docker 24.0.5 一键离线安装脚本"
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"
}
# 检查root权限
check_root() {
if [[ $EUID -ne 0 ]]; then
log_error "请使用root权限运行此脚本"
exit 1
fi
}
# 安装依赖
install_dependencies() {
log_info "安装系统依赖..."
apt-get update
apt-get install -y \
curl \
wget \
gnupg \
lsb-release \
apt-transport-https \
ca-certificates \
software-properties-common \
iptables \
net-tools
}
# 清理有问题的docker源
clean_docker_sources() {
log_info "清理有问题的Docker源..."
if [ -f "/etc/apt/sources.list.d/docker.list" ]; then
mv /etc/apt/sources.list.d/docker.list /etc/apt/sources.list.d/docker.list.backup.$(date +%Y%m%d%H%M%S)
log_info "已备份并清理原有docker源配置"
fi
}
# 下载Docker 24.0.5离线包
download_docker_packages() {
log_info "创建临时下载目录..."
DOWNLOAD_DIR="/tmp/docker-offline-24.0.5"
mkdir -p $DOWNLOAD_DIR
cd $DOWNLOAD_DIR
log_info "开始下载Docker 24.0.5离线安装包..."
# Docker 24.0.5 组件包
packages=(
"containerd.io_1.6.21-1_amd64.deb"
"docker-ce_24.0.5-1~ubuntu.20.04~focal_amd64.deb"
"docker-ce-cli_24.0.5-1~ubuntu.20.04~focal_amd64.deb"
"docker-buildx-plugin_0.11.2-1~ubuntu.20.04~focal_amd64.deb"
"docker-compose-plugin_2.20.2-1~ubuntu.20.04~focal_amd64.deb"
)
# 下载URL基础路径这里使用官方源您可以根据需要替换为内网源
BASE_URL="https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64"
for package in "${packages[@]}"; do
if [ ! -f "$package" ]; then
log_info "下载: $package"
wget -q "$BASE_URL/$package"
if [ $? -ne 0 ]; then
log_error "下载失败: $package"
log_info "尝试备用下载源..."
# 备用下载源
wget -q "https://mirrors.aliyun.com/docker-ce/linux/ubuntu/dists/focal/pool/stable/amd64/$package" || {
log_error "备用源也下载失败: $package"
return 1
}
fi
else
log_info "文件已存在: $package"
fi
done
log_info "所有Docker组件下载完成"
}
# 安装Docker组件
install_docker_packages() {
log_info "开始安装Docker组件..."
DOWNLOAD_DIR="/tmp/docker-offline-24.0.5"
cd $DOWNLOAD_DIR
# 安装顺序很重要
dpkg -i containerd.io_1.6.21-1_amd64.deb
dpkg -i docker-ce-cli_24.0.5-1~ubuntu.20.04~focal_amd64.deb
dpkg -i docker-ce_24.0.5-1~ubuntu.20.04~focal_amd64.deb
dpkg -i docker-buildx-plugin_0.11.2-1~ubuntu.20.04~focal_amd64.deb
dpkg -i docker-compose-plugin_2.20.2-1~ubuntu.20.04~focal_amd64.deb
log_info "Docker组件安装完成"
}
# 配置Docker服务
configure_docker() {
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": "100m"
},
"storage-driver": "overlay2",
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}
EOF
# 启动并启用docker服务
systemctl daemon-reload
systemctl enable docker
systemctl start docker
log_info "等待Docker服务启动..."
sleep 5
}
# 验证安装
verify_installation() {
log_info "验证Docker安装..."
# 检查docker版本
docker --version
docker-compose --version
# 测试运行容器
if systemctl is-active --quiet docker; then
log_info "测试运行hello-world容器..."
docker run --rm hello-world && {
log_info "✅ Docker安装验证成功"
} || {
log_warn "Docker服务运行但hello-world测试失败可能是网络问题"
}
else
log_error "Docker服务未运行"
return 1
fi
}
# 显示使用说明
show_usage() {
log_info "安装完成!使用说明:"
echo ""
echo "1. 启动Docker服务: systemctl start docker"
echo "2. 停止Docker服务: systemctl stop docker"
echo "3. 查看Docker状态: systemctl status docker"
echo "4. 添加用户到docker组: usermod -aG docker \$USER"
echo "5. 重新登录后即可不使用sudo运行docker命令"
echo ""
echo "Docker版本: 24.0.5"
echo "Compose版本: 2.20.2"
echo "Buildx版本: 0.11.2"
}
# 主函数
main() {
log_info "开始Docker 24.0.5一键安装..."
check_root
install_dependencies
clean_docker_sources
download_docker_packages
install_docker_packages
configure_docker
verify_installation
show_usage
log_info "Docker 24.0.5 安装完成!"
}
# 错误处理
trap 'log_error "脚本执行失败,退出码: $?"; exit 1' ERR
# 执行主函数
main "$@"