sh脚本
logging.sh
bash
#!/bin/bash
# 颜色定义 - 使用正确的\e转义格式,这里不使用\033
NC='\e[0m'
RED='\e[31m'
GREEN='\e[32m'
YELLOW='\e[33m'
BLUE='\e[34m'
# 日志函数
log::info() {
local timestamp=$(date +'%Y-%m-%dT%H:%M:%S.%2N%z')
local message="$*"
# 使用 %b 解析转义字符
printf "[%s][\e[32mINFO\e[0m] %b\n" "$timestamp" "$message"
}
log::warning() {
local timestamp=$(date +'%Y-%m-%dT%H:%M:%S.%2N%z')
local message="$*"
printf "[%s][\e[33mWARNING\e[0m] %b\n" "$timestamp" "$message"
}
log::error() {
local timestamp=$(date +'%Y-%m-%dT%H:%M:%S.%2N%z')
local message="$*"
printf "[%s][\e[31mERROR\e[0m] %b\n" "$timestamp" "$message"
}
deploy_docker.sh
bash
#!/bin/bash
source logging.sh
SYSTEMD_PATH=/usr/lib/systemd/system/docker.service
DOCKER_FILE=docker-20.10.24.tgz
function install_docker_system
{
if ! which docker >/dev/null 2>&1; then
log::warning "${YELLOW}[+]No docker command, Begin install docker..${NC}"
# 停止可能正在运行的docker进程
systemctl stop docker 2>/dev/null || true
pkill -9 dockerd 2>/dev/null || true
pkill -9 containerd 2>/dev/null || true
tar -zxvf $DOCKER_FILE
# 强制复制文件
log::info "正在复制Docker文件..."
for file in docker/*; do
if cp -f "$file" /usr/bin/ 2>/dev/null; then
log::info "复制 $(basename $file) 成功"
else
log::error "复制 $(basename $file) 失败(可能文件被占用)"
fi
done
fi
if [ ! -f "$SYSTEMD_PATH" ]; then
log::warning "${YELLOW}[+] 配置systemd自启服务。${NC}"
cat > $SYSTEMD_PATH << '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
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF
fi
chmod 644 $SYSTEMD_PATH
systemctl daemon-reload
systemctl start docker
systemctl enable docker
log::warning "${YELLOW}等待Docker服务启动...${NC}"
sleep 5s
if docker ps > /dev/null 2>&1; then
log::info "${GREEN}[+] Docker安装成功${NC}"
else
log::error "${RED}[!] Docker安装失败,请检查服务状态!${NC}"
systemctl status docker
fi
}
function uninstall_docker_system
{
log::info "开始卸载Docker..."
systemctl stop docker 2>/dev/null || true
systemctl disable docker 2>/dev/null || true
rm -f $SYSTEMD_PATH
systemctl daemon-reload
rm -f /usr/bin/docker* 2>/dev/null || true
rm -f /usr/bin/containerd* 2>/dev/null || true
rm -f /usr/bin/ctr 2>/dev/null || true
rm -f /usr/bin/runc 2>/dev/null || true
log::info "${GREEN}[+] Docker uninstalled successfully!${NC}"
}
# 添加颜色重置保护
trap 'printf "${NC}"' EXIT
case "$1" in
install)
install_docker_system
;;
uninstall)
uninstall_docker_system
;;
*)
log::error "${YELLOW}Usage: $0 {install|uninstall}${NC}"
exit 1
;;
esac
# 确保脚本退出时重置颜色
printf "${NC}"
exit 0
运行结果

不加参数运行提示报错:
