108 lines
2.9 KiB
Bash
108 lines
2.9 KiB
Bash
#!/bin/bash
|
||
# Docker 离线安装脚本(ARM64)
|
||
# 适用于统信UOS20 / 龙蜥 / 欧拉 / Debian ARM64
|
||
|
||
set -e
|
||
|
||
DOCKER_VERSION="27.5.1"
|
||
COMPOSE_VERSION="2.29.1"
|
||
INSTALL_DIR="/usr/bin"
|
||
|
||
# 颜色定义
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
NC='\033[0m' # No Color
|
||
|
||
echo -e "${GREEN}========================================${NC}"
|
||
echo -e "${GREEN} Docker CE 离线安装脚本 (ARM64) ${NC}"
|
||
echo -e "${GREEN}========================================${NC}"
|
||
|
||
# 检查架构
|
||
ARCH=$(uname -m)
|
||
if [ "$ARCH" != "aarch64" ]; then
|
||
echo -e "${RED}错误: 当前架构为 $ARCH,本脚本仅支持 aarch64 (ARM64)${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
# 检查root权限
|
||
if [ "$EUID" -ne 0 ]; then
|
||
echo -e "${RED}错误: 请使用 root 用户运行本脚本${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
# 检查安装包是否存在
|
||
if [ ! -f "docker-${DOCKER_VERSION}.tgz" ]; then
|
||
echo -e "${RED}错误: 未找到 docker-${DOCKER_VERSION}.tgz${NC}"
|
||
echo "请确保安装包位于当前目录"
|
||
exit 1
|
||
fi
|
||
|
||
echo -e "${YELLOW}[1/6] 正在解压 Docker 安装包...${NC}"
|
||
tar -xzf "docker-${DOCKER_VERSION}.tgz"
|
||
|
||
echo -e "${YELLOW}[2/6] 正在复制可执行文件...${NC}"
|
||
cp -p docker/* "${INSTALL_DIR}/"
|
||
|
||
# 安装 docker-compose
|
||
if [ -f "docker-compose-linux-aarch64" ]; then
|
||
echo -e "${YELLOW}[3/6] 正在安装 Docker Compose...${NC}"
|
||
cp -p docker-compose-linux-aarch64 "${INSTALL_DIR}/docker-compose"
|
||
chmod +x "${INSTALL_DIR}/docker-compose"
|
||
else
|
||
echo -e "${YELLOW}[3/6] 跳过 Docker Compose (未找到安装包)${NC}"
|
||
fi
|
||
|
||
echo -e "${YELLOW}[4/6] 正在创建 systemd 服务...${NC}"
|
||
cat > /etc/systemd/system/docker.service << 'EOF'
|
||
[Unit]
|
||
Description=Docker Application Container Engine
|
||
Documentation=https://docs.docker.com
|
||
After=network-online.target firewalld.service
|
||
Wants=network-online.target
|
||
|
||
[Service]
|
||
Type=notify
|
||
ExecStart=/usr/bin/dockerd
|
||
ExecReload=/bin/kill -s HUP $MAINPID
|
||
LimitNOFILE=infinity
|
||
LimitNPROC=infinity
|
||
TimeoutStartSec=0
|
||
Delegate=yes
|
||
KillMode=process
|
||
Restart=on-failure
|
||
StartLimitBurst=3
|
||
StartLimitInterval=60s
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
EOF
|
||
|
||
echo -e "${YELLOW}[5/6] 正在启动 Docker 服务...${NC}"
|
||
systemctl daemon-reload
|
||
systemctl start docker
|
||
systemctl enable docker
|
||
|
||
# 创建 docker 组
|
||
if ! getent group docker > /dev/null 2>&1; then
|
||
groupadd docker
|
||
fi
|
||
|
||
echo -e "${YELLOW}[6/6] 验证安装...${NC}"
|
||
if docker --version; then
|
||
echo -e "${GREEN}========================================${NC}"
|
||
echo -e "${GREEN} Docker 安装成功! ${NC}"
|
||
echo -e "${GREEN}========================================${NC}"
|
||
docker --version
|
||
docker-compose --version 2>/dev/null || true
|
||
else
|
||
echo -e "${RED}Docker 安装可能失败,请检查日志${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
# 清理临时文件
|
||
rm -rf docker/
|
||
|
||
echo -e "${GREEN}安装完成!${NC}"
|
||
echo -e "${YELLOW}提示: 如需非root用户使用docker,请执行: usermod -aG docker <用户名>${NC}"
|