当前位置: 首页 > news >正文

如何在Debian操作系统上安装Doker

本章教程,主要介绍如何在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操作系统上安装Doker

本章教程&#xff0c;主要介绍如何在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")…...

代码随想录刷题学习日记

仅为个人记录复盘学习历程&#xff0c;解题思路来自代码随想录 代码随想录刷题笔记总结网址:代码随想录 二叉树的迭代遍历(不使用递归实现遍历) 递归的实现就是&#xff1a;每一次递归调用都会把函数的局部变量、参数值和返回地址等压入调用栈中&#xff0c;递归是通过栈实现…...

OpenText ALM Octane,为您的 DevOps 管道提供质量保证

实现更高水平的敏捷性、可追溯性和可预测性是一个持续的过程。ALM Octane 可帮助您改进开发和测试流程&#xff0c;从而改善整个软件交付价值流中的工作流程。 产品亮点 对基于软件的创新的需求已经加速&#xff0c;扰乱了几乎每个行业&#xff0c;也改变了我们的生活。快速交…...

【python实操】python小程序之参数化以及Assert(断言)

引言 python小程序之参数化以及Assert&#xff08;断言&#xff09; 文章目录 引言一、参数化2.1 题目2.2 代码2.3 代码解释 二、Assert&#xff08;断言&#xff09;2.1 概念2.1.1 Assert语句的基本语法&#xff1a;2.1.2 基本断言2.1.3 断言函数参数2.1.4 断言前后状态一致 2…...

探索CSS动画下的按钮交互美学

效果演示 这段代码通过SVG和CSS动画创建了一个具有视觉吸引力的按钮&#xff0c;当用户与按钮交互时&#xff08;如悬停、聚焦或按下&#xff09;&#xff0c;按钮会显示不同的动画效果。 HTML <button class"button"><div class"dots_border"…...

241024-Ragflow离线部署Docker-Rootless环境配置修改

A. 最终效果 B. 文件修改 docker-compose.yml include:- path: ./docker-compose-base.ymlenv_file: ./.envservices:ragflow:depends_on:mysql:condition: service_healthyes01:condition: service_healthyimage: ${RAGFLOW_IMAGE}container_name: ragflow-serverports:- ${…...

网络基础概念:广播域、冲突域与VLAN解析

一、网络基础概念 在现代计算机网络中&#xff0c;广播域、冲突域和虚拟局域网&#xff08;VLAN&#xff09;是网络架构和管理的核心概念。了解这些概念对网络性能优化、流量管理和安全性提升至关重要。 二、广播域 1. 定义 广播域是一个网络逻辑区域&#xff0c;在这个区域…...

【MySQL】C语言连接MySQL数据库3——事务操作和错误处理API

目录 1.MySQL事务处理机制 1.1.autocommit 1.2.autocommit的设置与查看 1.3.使用示例 2.事务操作API 2.1.设置事务提交模式——mysql_autocommit() 2.2.提交事务——mysql_commit() 2.3.事务回滚——mysql_rollback() 3.错误处理的API 3.1.返回错误的描述——mysql_er…...

ARM嵌入式学习--第六天(电子电路基础知识)

电子电路基础知识 -基本元器件 -电阻 电阻&#xff08;Resistance&#xff0c;通常用“R”表示&#xff09;&#xff0c;表示导体对电流的阻碍作用的大小&#xff1b;电阻导体本身的一种特性&#xff1b;超导体没有电阻&#xff0c;作用是用来降压 上拉电阻&#xff1a;将状态…...

JAVA----单例模式

1.单例模式概念&#xff1a; 单例模式是一种设计模式&#xff0c;他的核心是确保一个类只有一个实例&#xff0c;单例模式主要有两种方式&#xff1a;饿汉式与懒汉式 2.饿汉式 饿汉就是一个迫切的意思&#xff0c;类加载就会导致该单实例被创建 饿汉式第一种方式&#xff1a;…...

基于递推式最小二乘法的PMSM参数辨识MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介 最小二乘法是一种回归估计法&#xff0c;适用于被辨识的参数与系统输出为线性关 系的情况。它是在一定数据量下&#xff0c;基于系统输出误差的平方和最小的准则对参 数进行辨识的方法。此模型通过…...

记录一次部署 k8s 集群无法启动

情况是这样的&#xff0c;k8s 集群&#xff08;v1.31&#xff09;所需要的组件已安装完成&#xff0c;通过 kubeadm init 已经安装部署成功&#xff0c;但是等几分钟&#xff0c;集群组件就一直在重启&#xff0c;查看日志是连接 etcd 超时&#xff0c;所以查看了 etcd 的日志&…...

Linux下MySQL8.x的编译安装与使用

Linux下MySQL的安装与配置 1. 安装环境初始化 1.1 查看是否安装过MySQL 如果使用rpm安装, 检查一下RPM PACKAGE rpm -qa | grep -i mysql # -i 忽略大小写 # 或者 yum list installed | grep mysql如果存在mysql-libs的旧版本包&#xff0c;显示如下 #存在 [rootlocalhost ~]…...

cpuinfo实践记录

py-cpuinfo 是一个用于获取 CPU 信息的 Python 库。它可以帮助你获取 CPU 的详细信息&#xff0c;如 CPU 型号、核心数、频率、缓存大小等。以下是对 py-cpuinfo 模块的详细介绍&#xff1a; 安装 你可以使用 pip 来安装 py-cpuinfo 库&#xff1a; pip install py-cpuinfo …...

【Java】ArrayList相关操作及其案例

ArrayList相当于集合&#xff0c;作为一种容器存储数据&#xff0c;与数组类似。不同的是&#xff0c;ArrayList中长度可变&#xff0c;而数组长度不可变。 ArrayList相关API 构造器 public ArrayList() 创建一个空的集合对象 ArrayList<String>arrnew ArrayList<>…...

手机pdf阅读器,用手机也能够阅读、编辑pdf文件

在日常的学习或办公过程中&#xff0c;PDF格式的文件是我们最常遇见的文件格式之一&#xff0c;那么为了更高效、便捷地处理这些文件&#xff0c;选择一款合适的PDF阅读器至关重要&#xff0c;可以帮助我们在阅读文件的同时还可以对文件进行适当编辑处理。今天小编给大家带来几…...

通过 Twitter Token 实现授权与操作

通过 Twitter Token 实现授权与操作 一、Twitter API 概览 1.1 Twitter API 简介 Twitter API 是 Twitter 公司提供的一种编程接口,它允许开发者访问 Twitter 的海量数据,包括用户信息、推文内容、关系网络等。通过这些接口,开发者可以创建应用程序,实现自动化的社交媒体…...

100个SSM框架(Spring + Spring MVC + MyBatis)毕业设计选题

100个SSM框架(Spring Spring MVC MyBatis)毕业设计选题 电子商务 综合性电子商务平台跨境电商管理系统社区团购平台二手商品交易网站农产品直销平台奢侈品鉴定与交易系统电子优惠券管理平台闪购秒杀系统个性化商品推荐系统多商户店铺管理平台 教育培训 在线教育课程平台智…...

STM32F1+HAL库+FreeTOTS学习17——事件标志组

STM32F1HAL库FreeTOTS学习17——事件标志组 1. 事件标志组1.1 事件标志组的的引入1.2 事件标志组简介1.3 事件标志组与队列、信号量的区别 2. 事件标志组下相关API函数2. 1 xEventGroupCreate()2. 2 xEventGroupCreateStatic()2. 3 vEventGroupDelete()2. 4 xEventGroupWaitBit…...

ElasticSearch基本概念

本文内容参考了田雪松老师编著的《Elastic Stack应用宝典》 对比关系型数据库 索引&#xff08;Index&#xff09;相当于库映射类型&#xff08;Mapping Type&#xff09;相当于表文档&#xff08;Document&#xff09;相当于行文档字段&#xff08;Field&#xff09;相当于列…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...