欧拉2203SP4LTS安装Docker---脚本
·
cat install_docker.sh
#!/usr/bin/env bash
set -euo pipefail
############################################
# 基础变量
############################################
BASE_DIR="$(cd "$(dirname "$0")" && pwd)"
PKG_DIR="${BASE_DIR}/packages"
DOCKER_TGZ="docker-26.1.4.tgz"
COMPOSE_BIN="docker-compose"
DOCKER_BIN_DIR="/usr/bin"
COMPOSE_INSTALL_PATH="/usr/local/bin/docker-compose"
DOCKER_CONFIG_DIR="/etc/docker"
DAEMON_JSON_URL="https://udong.top/docker/daemon.json"
############################################
# 工具函数
############################################
log() { echo "[INFO] $*"; }
warn() { echo "[WARN] $*"; }
error(){ echo "[ERROR] $*" >&2; exit 1; }
############################################
# CPU 架构识别
############################################
ARCH="$(uname -m)"
case "${ARCH}" in
x86_64)
log "CPU 架构: x86_64"
;;
aarch64|arm64)
log "CPU 架构: aarch64"
;;
*)
error "不支持的 CPU 架构: ${ARCH}"
;;
esac
############################################
# 卸载模式
############################################
if [[ "${1:-}" == "--uninstall" ]]; then
log "进入 Docker 卸载模式"
systemctl stop docker containerd || true
systemctl disable docker containerd || true
rm -f /etc/systemd/system/docker.service
rm -f /etc/systemd/system/containerd.service
rm -rf /etc/docker
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
rm -f /usr/bin/docker*
rm -f /usr/bin/containerd*
rm -f /usr/bin/runc
rm -f "${COMPOSE_INSTALL_PATH}"
systemctl daemon-reload
log "Docker 已完全卸载"
exit 0
fi
############################################
# 前置检查
############################################
log "开始 Docker 离线安装"
[[ $EUID -eq 0 ]] || error "请使用 root 用户执行"
command -v systemctl >/dev/null || error "系统不支持 systemd"
[[ -f "${PKG_DIR}/${DOCKER_TGZ}" ]] || error "缺少 ${DOCKER_TGZ}"
[[ -f "${PKG_DIR}/${COMPOSE_BIN}" ]] || error "缺少 ${COMPOSE_BIN}"
############################################
# 安装 Docker 二进制
############################################
log "安装 Docker 二进制文件"
if ! command -v docker >/dev/null 2>&1; then
mkdir -p /opt/docker
tar -xzf "${PKG_DIR}/${DOCKER_TGZ}" -C /opt/docker
cp /opt/docker/docker/* "${DOCKER_BIN_DIR}/"
chmod +x "${DOCKER_BIN_DIR}/docker"*
chmod +x "${DOCKER_BIN_DIR}/containerd"*
chmod +x "${DOCKER_BIN_DIR}/runc"
else
warn "Docker 已存在,跳过二进制安装"
fi
############################################
# systemd 服务配置
############################################
log "配置 systemd 服务"
cat >/etc/systemd/system/containerd.service <<'EOF'
[Unit]
Description=containerd container runtime
After=network.target
[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/bin/containerd
Restart=always
RestartSec=5
Delegate=yes
KillMode=process
OOMScoreAdjust=-999
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
[Install]
WantedBy=multi-user.target
EOF
cat >/etc/systemd/system/docker.service <<'EOF'
[Unit]
Description=Docker Application Container Engine
After=network-online.target containerd.service
Wants=network-online.target
Requires=containerd.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
Restart=always
RestartSec=2
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
EOF
############################################
# daemon.json(远程获取)
############################################
log "配置 Docker 镜像加速(daemon.json)"
mkdir -p "${DOCKER_CONFIG_DIR}"
if command -v curl >/dev/null 2>&1; then
curl -fsSL "${DAEMON_JSON_URL}" -o "${DOCKER_CONFIG_DIR}/daemon.json"
else
error "系统未安装 curl,无法获取 daemon.json"
fi
############################################
# 启动服务
############################################
log "启动 Docker 服务"
systemctl daemon-reload
systemctl enable --now containerd
systemctl enable --now docker
systemctl is-active docker >/dev/null || error "Docker 启动失败"
############################################
# 安装 Docker Compose
############################################
log "安装 Docker Compose"
if [[ ! -f "${COMPOSE_INSTALL_PATH}" ]]; then
cp "${PKG_DIR}/${COMPOSE_BIN}" "${COMPOSE_INSTALL_PATH}"
chmod +x "${COMPOSE_INSTALL_PATH}"
else
warn "docker-compose 已存在,跳过安装"
fi
############################################
# 验证
############################################
log "验证 Docker 环境"
docker version
docker-compose version
docker run --rm hello-world
log "Docker 安装完成,daemon.json 来源:${DAEMON_JSON_URL}"
更多推荐
所有评论(0)