源码部署docker自动化脚本

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

运行结果

不加参数运行提示报错:

相关推荐
Alsn862 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
程序员老赵3 天前
服务器没有桌面?Docker 跑个 Chrome,浏览器就能远程用
docker·容器·devops
杨浦老苏3 天前
轻量级Docker仪表板Servedash
运维·docker·监控·群晖·仪表板
正经教主3 天前
【docker基础】 第八周:容器监控与应用更新策略
运维·docker·容器
kiros_wang3 天前
Docker 使用完整指南
运维·docker·容器
正经教主3 天前
【docker基础】第九周:Docker安全与镜像优化
运维·docker·容器
CodeStats3 天前
【虚拟机】 从 CPU 指令到虚拟机隔离:虚拟机就是一个“模拟了完整硬件的普通进程”
java·docker
ai产品老杨3 天前
突破安防碎片化:基于 Docker 与边缘计算的 AI 视频智能化中台,如何通过 GB28181/RTSP 统一接入与全套源码交付实现二次开发自由?
人工智能·docker·边缘计算
正经教主3 天前
【docker基础】第十三周:学习总结与进阶方向【完结】
运维·docker·容器
“码”力全开3 天前
解耦异构设备:基于 Docker 与边缘计算的 GB28181/RTSP 统一流媒体平台架构演进(全源码交付)
docker·架构·边缘计算