如何在Debian操作系统上安装Docker
本章教程,主要介绍如何在Debian 11 系统上安装Docker。主要使用一键安装Docker脚本和一键卸载脚本来完成。
一、安装Docker
#!/bin/bashRED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m'CURRENT_DIR=$(cd "$(dirname "$0")" || exitpwd
)function log() {message="[1Panel Log]: $1 "case "$1" in*"失败"*|*"错误"*|*"请使用 root 或 sudo 权限运行此脚本"*)echo -e "${RED}${message}${NC}" 2>&1 | tee -a "${CURRENT_DIR}"/install.log;;*"成功"*)echo -e "${GREEN}${message}${NC}" 2>&1 | tee -a "${CURRENT_DIR}"/install.log;;*"忽略"*|*"跳过"*)echo -e "${YELLOW}${message}${NC}" 2>&1 | tee -a "${CURRENT_DIR}"/install.log;;*)echo -e "${BLUE}${message}${NC}" 2>&1 | tee -a "${CURRENT_DIR}"/install.log;;esac
}
log "======================= 开始安装Docker ======================="function Check_Root() {if [[ $EUID -ne 0 ]]; thenlog "请使用 root 或 sudo 权限运行此脚本"exit 1fi
}ACCELERATOR_URL="https://docker.1panelproxy.com"
DAEMON_JSON="/etc/docker/daemon.json"
BACKUP_FILE="/etc/docker/daemon.json.1panel_bak"function create_daemon_json() {log "创建新的配置文件 ${DAEMON_JSON}..."mkdir -p /etc/dockerecho '{"registry-mirrors": ["'"$ACCELERATOR_URL"'"]}' | tee "$DAEMON_JSON" > /dev/nulllog "镜像加速配置已添加。"
}function configure_accelerator() {read -p "是否配置镜像加速?(y/n): " configure_acceleratorif [[ "$configure_accelerator" == "y" ]]; thenif [ -f "$DAEMON_JSON" ]; thenlog "配置文件已存在,我们将备份现有配置文件为 ${BACKUP_FILE} 并创建新的配置文件。"cp "$DAEMON_JSON" "$BACKUP_FILE"create_daemon_jsonelsecreate_daemon_jsonfilog "正在重启 Docker 服务..."systemctl daemon-reloadsystemctl restart dockerlog "Docker 服务已成功重启。"elselog "未配置镜像加速。"fi
}function Install_Docker(){if which docker >/dev/null 2>&1; thenlog "检测到 Docker 已安装,跳过安装步骤"configure_acceleratorelselog "... 在线安装 docker"if [[ $(curl -s ipinfo.io/country) == "CN" ]]; thensources=("https://mirrors.aliyun.com/docker-ce""https://mirrors.tencent.com/docker-ce""https://mirrors.163.com/docker-ce""https://mirrors.cernet.edu.cn/docker-ce")docker_install_scripts=("https://get.docker.com""https://testingcf.jsdelivr.net/gh/docker/docker-install@master/install.sh""https://cdn.jsdelivr.net/gh/docker/docker-install@master/install.sh""https://fastly.jsdelivr.net/gh/docker/docker-install@master/install.sh""https://gcore.jsdelivr.net/gh/docker/docker-install@master/install.sh""https://raw.githubusercontent.com/docker/docker-install/master/install.sh")get_average_delay() {local source=$1local total_delay=0local iterations=2local timeout=2for ((i = 0; i < iterations; i++)); dodelay=$(curl -o /dev/null -s -m $timeout -w "%{time_total}\n" "$source")if [ $? -ne 0 ]; thendelay=$timeoutfitotal_delay=$(awk "BEGIN {print $total_delay + $delay}")doneaverage_delay=$(awk "BEGIN {print $total_delay / $iterations}")echo "$average_delay"}min_delay=99999999selected_source=""for source in "${sources[@]}"; doaverage_delay=$(get_average_delay "$source" &)if (( $(awk 'BEGIN { print '"$average_delay"' < '"$min_delay"' }') )); thenmin_delay=$average_delayselected_source=$sourcefidonewaitif [ -n "$selected_source" ]; thenlog "选择延迟最低的源 $selected_source,延迟为 $min_delay 秒"export DOWNLOAD_URL="$selected_source"for alt_source in "${docker_install_scripts[@]}"; dolog "尝试从备选链接 $alt_source 下载 Docker 安装脚本..."if curl -fsSL --retry 2 --retry-delay 3 --connect-timeout 5 --max-time 10 "$alt_source" -o get-docker.sh; thenlog "成功从 $alt_source 下载安装脚本"breakelselog "从 $alt_source 下载安装脚本失败,尝试下一个备选链接"fidoneif [ ! -f "get-docker.sh" ]; thenlog "所有下载尝试都失败了。您可以尝试手动安装 Docker,运行以下命令:"log "bash <(curl -sSL https://linuxmirrors.cn/docker.sh)"exit 1fish get-docker.sh 2>&1 | tee -a ${CURRENT_DIR}/install.logdocker_config_folder="/etc/docker"if [[ ! -d "$docker_config_folder" ]];thenmkdir -p "$docker_config_folder"fidocker version >/dev/null 2>&1if [[ $? -ne 0 ]]; thenlog "docker 安装失败\n您可以尝试使用离线包进行安装,具体安装步骤请参考以下链接:https://1panel.cn/docs/installation/package_installation/"exit 1elselog "docker 安装成功"systemctl enable docker 2>&1 | tee -a "${CURRENT_DIR}"/install.logconfigure_acceleratorfielselog "无法选择源进行安装"exit 1fielselog "非中国大陆地区,无需更改源"export DOWNLOAD_URL="https://download.docker.com"curl -fsSL "https://get.docker.com" -o get-docker.shsh get-docker.sh 2>&1 | tee -a "${CURRENT_DIR}"/install.loglog "... 启动 docker"systemctl enable docker; systemctl daemon-reload; systemctl start docker 2>&1 | tee -a "${CURRENT_DIR}"/install.logdocker_config_folder="/etc/docker"if [[ ! -d "$docker_config_folder" ]];thenmkdir -p "$docker_config_folder"fidocker version >/dev/null 2>&1if [[ $? -ne 0 ]]; thenlog "docker 安装失败\n您可以尝试使用安装包进行安装,具体安装步骤请参考以下链接:https://1panel.cn/docs/installation/package_installation/"exit 1elselog "docker 安装成功"fififi
}function Install_Compose(){docker-compose version >/dev/null 2>&1if [[ $? -ne 0 ]]; thenlog "... 在线安装 docker-compose"arch=$(uname -m)if [ "$arch" == 'armv7l' ]; thenarch='armv7'ficurl -L https://resource.fit2cloud.com/docker/compose/releases/download/v2.26.1/docker-compose-$(uname -s | tr A-Z a-z)-"$arch" -o /usr/local/bin/docker-compose 2>&1 | tee -a "${CURRENT_DIR}"/install.logif [[ ! -f /usr/local/bin/docker-compose ]];thenlog "docker-compose 下载失败,请稍候重试"exit 1fichmod +x /usr/local/bin/docker-composeln -s /usr/local/bin/docker-compose /usr/bin/docker-composedocker-compose version >/dev/null 2>&1if [[ $? -ne 0 ]]; thenlog "docker-compose 安装失败"exit 1elselog "docker-compose 安装成功"fielsecompose_v=$(docker-compose -v)if [[ $compose_v =~ 'docker-compose' ]];thenread -p "检测到已安装 Docker Compose 版本较低(需大于等于 v2.0.0 版本),是否升级 [y/n] : " UPGRADE_DOCKER_COMPOSEif [[ "$UPGRADE_DOCKER_COMPOSE" == "Y" ]] || [[ "$UPGRADE_DOCKER_COMPOSE" == "y" ]]; thenrm -rf /usr/local/bin/docker-compose /usr/bin/docker-composeInstall_Composeelselog "Docker Compose 版本为 $compose_v,可能会影响应用商店的正常使用"fielselog "检测到 Docker Compose 已安装,跳过安装步骤"fifi
}function Get_Ip(){active_interface=$(ip route get 8.8.8.8 | awk 'NR==1 {print $5}')if [[ -z $active_interface ]]; thenLOCAL_IP="127.0.0.1"elseLOCAL_IP=$(ip -4 addr show dev "$active_interface" | grep -oP '(?<=inet\s)\d+(\.\d+){3}')fiPUBLIC_IP=$(curl -s https://api64.ipify.org)if [[ -z "$PUBLIC_IP" ]]; thenPUBLIC_IP="N/A"fiif echo "$PUBLIC_IP" | grep -q ":"; thenPUBLIC_IP=[${PUBLIC_IP}]1pctl listen-ip ipv6fi
}function main(){Check_RootInstall_DockerInstall_Compose
}
main
当然,你也可以用下面这个在线脚本进行安装。
curl -sSL https://file.ewbang.com/docker/debian/install_docker.sh -o install_docker.sh && bash install_docker.sh
二、卸载Docker
#!/bin/bash# 停止 Docker 服务
echo "Stopping Docker service..."
sudo systemctl stop docker# 卸载 Docker 相关软件包
echo "Removing Docker packages..."
sudo apt-get purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin# 删除 Docker 数据
echo "Deleting Docker data..."
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd# 删除 Docker 配置文件
echo "Deleting Docker configuration..."
sudo rm -rf /etc/docker# 自动清理不需要的软件包
echo "Cleaning up..."
sudo apt-get autoremove -y
sudo apt-get updateecho "Docker uninstalled successfully."
同样,下面也提供在线脚本。
curl -sSL https://file.ewbang.com/docker/debian/uninstall_docker.sh -o uninstall_docker.sh && bash uninstall_docker.sh
相关文章:

如何在Debian操作系统上安装Docker
本章教程,主要介绍如何在Debian 11 系统上安装Docker。主要使用一键安装Docker脚本和一键卸载脚本来完成。 一、安装Docker #!/bin/bashRED\033[0;31m GREEN\033[0;32m YELLOW\033[0;33m BLUE\033[0;34m NC\033[0mCURRENT_DIR$(cd "$(dirname "$0")…...

ArrayList和Array、LinkedList、Vector 间的区别
一、ArrayList 和 Array 的区别 ArrayList 内部基于动态数组实现,比 Array(静态数组) 使用起来更加灵活: ArrayList 会根据实际存储的元素动态地扩容或缩容,而 Array 被创建之后就不能改变它的长度了。ArrayList 允许…...

Linux开发环境配置(下)
✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿…...

系统开发常用命令合集
本文还会持续更新,大家可以点赞收藏~ ifconfig ifconfigwlan0表示无线网络接口 eth0表示以太网接口(有线) HWaddr是接口的物理地址(MAC地址) inet addr是接口的IPv4地址 Bcast是广播地址,Mask是子网掩码 …...

Termius工具在MAC的使用出现的问题:
Termius工具在MAC的使用出现的问题: 在使用SFTP时,出现不了本地的文件的位置 解决方案: 在Apple store下载的使用不了LOCAL SFTP, 需要在网页上进行下载才可以: 官网下载地址:https://termius.com/down…...
浅析Android中View的绘制流程
前言 在《浅析Android中View的测量布局流程》中分析了VSYNC信号到达App进程之后开启的View布局过程,经过对整个View树进行遍历进行测量和布局,最终确定View的大小以及在屏幕中所处的位置。但是如果用户想在屏幕上看到View的内容还需要经过绘制来生成图形…...

pikachu靶场- 文件上传unsafe upfileupload
pikachu靶场- unsafe upfileupload 概述client checkMIME typegetimagesize() 概述 不安全的文件上传漏洞概述 文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断…...
java中this的内存原理是?
在Java中,this关键字是一个特殊的引用,指向当前对象的实例。它在以下几个方面发挥重要作用: 指向当前对象:this可以用来访问当前对象的属性和方法,尤其在参数命名与实例变量重名时,用于区分。 构造函数&a…...

Matlab 车牌识别技术
1.1设计内容及要求: 课题研究的主要内容是对数码相机拍摄的车牌,进行基于数字图像处理技术的车牌定位技术和车牌字符分割技术的研究与开发,涉及到图像预处理、车牌定位、倾斜校正、字符分割等方面的知识,总流程图如图1-1所示。 图1-1系统总…...

CUDA-求最大值最小值atomicMaxatomicMin
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 实现原理 atomicMax和 atomicMin是 CUDA 中的原子操作,用于在并行计算中安全地更新共享变量的最大值和最小值。它们确…...

新的Midjourney就是一个增强版的Photoshop,你现在可以轻松的用它换衣服、换发型了
好久没有聊 Midjourney 了,昨晚他们发布了一项引人注目的新功能:AI 图像编辑,一个基于网页的加强版的 Photoshop 呼之欲出,让我大为震撼,也让用户们赞叹不已。 基于现有图像进行参考,进而生成新的图片&…...
Linux系统安装软件的4种方式【源码配置编译安装、yum安装、rpm包安装、二进制软件包安装(.rpm/.tar.gz/.tgz/.bz2)】
一.源码安装 linux安装软件采用源码安装灵活自由,适用于不同的平台,维护也十分方便。 (一)源码安装流程 源码的安装一般由3个步骤组成: 1.配置(configure) Configure是一个可执行脚本…...

基于Spring Boot的洪涝灾害应急信息管理系统设计与实现
摘要 近年来,全球气候变化加剧,洪涝灾害频发,给各国的经济发展和人民生活带来了巨大的威胁。为了提高洪涝灾害的应急响应能力,开发高效的应急信息管理系统变得至关重要。本文基于Spring Boot框架,设计并实现了一个洪涝…...
912.排序数组(桶排序)
目录 题目解法 题目 给你一个整数数组 nums,请你将该数组升序排列。 你必须在 不使用任何内置函数 的情况下解决问题,时间复杂度为 O(nlog(n)),并且空间复杂度尽可能小。 解法 class Solution { public:vector<int> sortArray(vect…...

IPC 进程间通信 消息队列
操作系统内核中采用一个链式队列管理消息,每个节点就对应一个消息: 操作系统规定了单个消息的数据长度不能超过8k(8192个字节),一个消息队列的表长(节点数)最多不超过256个 利用消息队列进行通信的特点: 1. 全双工:任何参与通信的…...

opencv 图像翻转- python 实现
在做图像数据增强时会经常用到图像翻转操作 flip。 具体代码实现如下: #-*-coding:utf-8-*- # date:2021-03 # Author: DataBall - XIAN # Function: 图像翻转import cv2 # 导入OpenCV库path test.jpgimg cv2.imread(path)# 读取图片 cv2.namedWindow(image,1) …...

使用DolphinScheduler接口实现批量导入工作流并上线
使用DS接口实现批量导入工作量并上线脚本 前面实现了批量生成DS的任务,当导入时发现只能逐个导入,因此通过接口实现会更方便。 DS接口文档 DS是有接口文档的地址是 http://IP:12345/dolphinscheduler/swagger-ui/index.html?languagezh_CN&lang…...
pycharm导出环境安装包列表
pycharm导出环境安装包列表 一、导出安装包列表二、安装requirements.txt三、列表显示已安装的包四、显示特定包的信息 一、导出安装包列表 pip freeze > requirements.txt二、安装requirements.txt pip install -r requirements.txt三、列表显示已安装的包 pip list四、…...

分体式智能网关在现代电力物联网中的优势有哪些?
随着电力系统的不断数字化和智能化,电力物联网已经成为现代电力行业发展的重要方向。电力物联网通过各种智能设备和传感器实现电力系统的监测、数据采集和分析,从而优化电力资源配置,提高电网的安全性和稳定性。在这个背景下,&quo…...

第14篇:下一代网络与新兴技术
目录 引言 14.1 下一代网络(NGN)的定义与特点 14.2 IPv6协议的改进与未来应用 14.3 软件定义网络(SDN) 14.4 网络功能虚拟化(NFV) 14.5 量子通信网络 14.6 软件定义广域网(SD-WAN&#x…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...

Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...

认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...

图解JavaScript原型:原型链及其分析 | JavaScript图解
忽略该图的细节(如内存地址值没有用二进制) 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么:保存在堆中一块区域,同时在栈中有一块区域保存其在堆中的地址(也就是我们通常说的该变量指向谁&…...