准备工作 此脚本支持centos系列有yum命令的系统 可以访问外网的网卡 移除虚拟机原有的yum源（可删除或移走） 使用脚本直接安装 #!/bin/bash #version=v1 ########## #关闭防火墙 systemctl stop firewalld systemctl disable firewalld setenforce 0 if [ "$EUID" -ne 0 ]; then echo -e "\033[31m请使用root权限运行此脚本！\033[0m" exit 1 fi if [ ! -f /etc/yum.repos.d/centos.repo ]; then # 如果文件不存在，打印创建信息 echo "创建 /etc/yum.repos.d/centos.repo文件..." # 使用网络传输下载阿里云yum源 curl http://mirrors.aliyun.com/repo/Centos-7.repo -o /etc/yum.repos.d/centos.repo # 将文件内的http改成https，使用安全访问 sed -i 's/http/https/g' /etc/yum.repos.d/centos.repo # 更新 yum clean all && yum repolist else # 如果文件已存在，打印警告信息 echo -e "\033[32m警告：/etc/yum.repos.d/centos.repo 文件已存在，不会进行修改。\033[0m" fi if [ ! -f /etc/yum.repos.d/docker.repo ]; then # 如果文件不存在，打印创建信息 echo "创建 /etc/yum.repos.d/docker-ce.repo 文件..." # 安装 wget 工具（如果尚未安装） yum -y install wget # 从阿里云镜像下载 Docker CE 的 yum 仓库配置文件 wget -O /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 更新 yum 缓存 yum makecache else # 如果文件已存在，打印警告信息 echo -e "\033[0m 警告：/etc/yum.repos.d/docker.repo 文件已存在，不会进行修改。\033[0m" fi ########## # 输出提示信息 a="如果之前有安装docker的话，先删除docker" echo -e "\033[31m$a\033[0m" # 检查是否安装了 Docker if [ -x "$(command -v docker)" ]; then # 停止 Docker 服务 echo -e "\033[32m正在停止 Docker 服务...\033[0m" if systemctl is-active --quiet docker; then sudo systemctl stop docker else echo -e "\033[33mDocker 服务未运行，跳过停止步骤。\033[0m" fi # 停止 Docker 套接字 if systemctl is-active --quiet docker.socket; then echo -e "\033[32m正在停止 Docker 套接字...\033[0m" sudo systemctl stop docker.socket else echo -e "\033[33mDocker 套接字未运行，跳过停止步骤。\033[0m" fi # 禁用 Docker 服务 if systemctl is-enabled --quiet docker; then echo -e "\033[32m正在禁用 Docker 服务...\033[0m" sudo systemctl disable docker else echo -e "\033[33mDocker 服务未启用，跳过禁用步骤。\033[0m" fi # 禁用 Docker 套接字 if systemctl is-enabled --quiet docker.socket; then echo -e "\033[32m正在禁用 Docker 套接字...\033[0m" sudo systemctl disable docker.socket else echo -e "\033[33mDocker 套接字未启用，跳过禁用步骤。\033[0m" fi # 卸载 Docker 相关包 echo -e "\033[32m正在卸载 Docker 相关包...\033[0m" sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine \ docker-ce \ docker-ce-cli \ ontainerd.io \ docker-buildx-plugin \ docker-socket \ docker-compose-plugin \ docker-ce-rootless-extras # 删除 Docker 数据目录 echo -e "\033[32m正在删除 Docker 数据目录 /var/lib/docker...\033[0m" sudo rm -rf /var/lib/docker # 删除 Docker 配置目录 echo -e "\033[32m正在删除 Docker 配置目录 /etc/docker...\033[0m" sudo rm -rf /etc/docker # 删除 Docker.sock数据目录 echo -e "\033[32m正在删除 Docker.sock 数据目录/var/run/docker.sock\033[0m" sudo rm -rf /var/run/docker.sock # 删除 Docker 用户组 if getent group docker > /dev/null; then echo -e "\033[32m正在删除 Docker 用户组...\033[0m" sudo groupdel docker fi echo -e "\033[32mDocker 已成功删除。\033[0m" else echo -e "\033[31mDocker 未安装，无需删除。\033[0m" fi ########## b=使用yum安装docker echo -e "\033[31m$b\033[0m" echo -e "Usage : $0 \033[1;31m 1(安装最新版) 2(选择docker版本) 3(不安装docker,只安装docker compose)\033[0m" read -p "选择: " a case $a in 1) echo -e "\033[32m 正在安装最新版docker... \033[0m" yum -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin systemctl start docker systemctl enable docker echo -e "\033[32m 已经安装并且启动最新版docker. \033[0m" systemctl status docker ;; 2) #获取所有可用Docker CE版本 get_docker_versions() { yum list docker-ce --showduplicates | sort -r | awk '{print $2}' | grep -oP '(?<=:)[^:]+$' | uniq } install_specific_docker() { install_docker_repo echo -e "\033[31m请选择你想要安装的Docker版本号：\033[0m" } versions=$(get_docker_versions) PS3="请输入版本号(或者输入'q'退出): " select version in $versions "q"; do if [[ $version == "q" ]]; then echo -e "\033[31m 退出选择。\033[0m" break elif [[ -n "$version" ]]; then echo -e "\033[32m 正在安装Docker $version版本...\033[0m" yum -y install docker-ce-$version docker-ce-cli-$version containerd.io-$version systemctl start docker systemctl enable docker echo -e "\033[32m Docker版本$version已经安装完毕并且启动。 \033[0m" systemctl status docker break else echo -e "\033[31m 无效选择，请重新输入。 \033[0m" fi done ;; 3) echo -e "\033[31m 退出docker安装。\033[0m" ;; *) 不符合以上模式执行的命令 esac ########## if ! command -v docker &> /dev/null ; then echo -e "\033[31m没有安装docker服务 \033[0m" elif [ ! -f /etc/docker/daemon.json ] ; then echo -e "\033[32m创建 /etc/docker/daemon.json 文件... \033[0m" cat <<EOF > /etc/docker/daemon.json { "registry-mirrors": [ "https://docker.registry.cyou", "https://docker-cf.registry.cyou", "https://dockercf.jsdelivr.fyi", "https://docker.jsdelivr.fyi", "https://dockertest.jsdelivr.fyi", "https://mirror.aliyuncs.com", "https://dockerproxy.com", "https://mirror.baidubce.com", "https://docker.m.daocloud.io", "https://docker.nju.edu.cn", "https://docker.mirrors.sjtug.sjtu.edu.cn", "https://docker.mirrors.ustc.edu.cn", "https://mirror.iscas.ac.cn", "https://docker.rainbond.c" ] } EOF systemctl daemon-reload && systemctl restart docker else echo -e "\033[31m 警告：/etc/docker/daemon.json 文件已存在，不会进行修改。\033[0m" fi ########## echo -e "\033[31m如果之前有安装docker compose的话，先删除docker compose\033[0m" # 尝试停止并移除所有由Docker Compose管理的服务 if command -v docker-compose &> /dev/null; then # 查找包含 docker-compose.yml 或 docker-compose.yaml 的目录 compose_dir=$(find . -type f -name 'docker-compose.yml' -o -name 'docker-compose.yaml' -exec dirname {} \; | head -n 1) if [ -z "$compose_dir" ]; then echo -e "\033[33m未找到 docker-compose.yml 或 docker-compose.yaml 文件，跳过 docker-compose down 步骤。\033[0m" else echo -e "\033[32m正在停止并移除Docker Compose服务... \033[0m" cd "$compose_dir" docker-compose down -v fi else echo -e "\033[33m未找到docker-compose命令，跳过docker-compose down步骤。\033[0m" fi #Author: 小宇学IT ##Website: https://blog.csdn.net/2402_82681173?type=blog # 清理Docker系统 echo -e "\033[31m正在清理Docker系统...\033[0m" docker system prune -f # 删除Docker Compose二进制文件 echo -e "\033[32m正在删除Docker Compose二进制文件... \033[0m" rm -rf /usr/local/bin/docker-compos ########## # 获取 Docker Engine 的版本 docker_version=$(docker --version | grep -oP '(\d+\.\d+\.\d+)' || echo "0.0.0") # 检查 Docker 是否已安装 if ! [ -x "$(command -v docker)" ]; then echo -e "\033[31m没有安装docker服务，先安装docker服务. \033[0m" exit 1 fi # 输出当前 Docker 版本 echo "Current Docker Engine version: $docker_version" # 定义安装函数 install_compose() { local compose_version=$1 echo -e "\033[32m正在下载docker compose版本${compose_version}... \033[0m" # 删除旧的软链接（如果存在） echo -e "\033[32m正在删除Docker Compose之前的软链接... \033[0m" sudo unlink /usr/local/bin/docker-compose sudo unlink /usr/bin/docker-compose # 下载指定版本的 Docker Compose wget https://mirror.ghproxy.com/https://github.com/docker/compose/releases/download/${compose_version}/docker-compose-$(uname -s)-$(uname -m) -O /usr/local/bin/docker-compose # 设置执行权限 chmod +x /usr/local/bin/docker-compose # 创建软链接 sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose } # 根据 Docker 版本来选择并安装对应的 Docker Compose 版本 if [[ "$docker_version" > "25.9.9" && "$docker_version" < "27.1.0" ]]; then install_compose "v2.26.0" elif [[ "$docker_version" > "24.9.9" && "$docker_version" < "26.1.0" ]]; then install_compose "v2.25.0" elif [[ "$docker_version" > "21.9.9" && "$docker_version" < "25.1.0" ]]; then install_compose "v2.2.3" elif [[ "$docker_version" > "20.9.9" && "$docker_version" < "22.0.0" ]]; then install_compose "1.29.0" elif [[ "$docker_version" > "19.9.9" && "$docker_version" < "21.0.0" ]]; then install_compose "1.27.0" elif [[ "$docker_version" > "18.9.9" && "$docker_version" < "20.0.0" ]]; then install_compose "1.24.0" elif [[ "$docker_version" > "17.9.9" && "$docker_version" < "19.0.0" ]]; then install_compose "1.22.0" elif [[ "$docker_version" > "16.9.9" && "$docker_version" < "18.0.0" ]]; then install_compose "1.18.0" else echo -e "\033[31m不支持的Docker版本: $docker_version \033[0m " exit 1 fi # 验证 Docker Compose 安装 docker_compose_version=$(docker-compose --version | grep -oP '(\d+\.\d+\.\d+)' || echo "0.0.0") # 检查 Docker Compose 是否安装成功 if command -v docker-compose &> /dev/null; then echo -e "\033[32mDocker Compose ${docker_compose_version} 安装成功。\033[0m" d=$(docker-compose --version) echo -e "\033[32m$d\033[0m" else echo -e "\033[31mDocker Compose安装失败。\033[0m" exit 1 fi
完整脚本,建议保存为docker-proxy.sh #!/bin/bash # ===================== 用户配置区 ===================== # ▼▼▼ 以下变量必须修改 ▼▼▼ HTTP_PROXY="http://192.168.1.118:7890/" # 改为你的代理IP和端口 HTTPS_PROXY="http://192.168.1.118:7890/" # 同上 NO_PROXY="localhost,127.0.0.1,.corp.com" # 内网域名白名单 # ▲▲▲ 修改结束 ▲▲▲ # ===================== 执行逻辑 ===================== if [ $# -eq 0 ]; then echo "错误：请指定操作模式" echo "用法：sudo $0 {set|remove}" exit 1 fi # 创建配置目录 sudo mkdir -p /etc/systemd/system/docker.service.d/ case "$1" in "set") echo "▶ 正在注入代理配置（目标地址：${HTTP_PROXY}）..." # 生成代理配置文件 sudo tee /etc/systemd/system/docker.service.d/proxy.conf > /dev/null <<EOF [Service] Environment="HTTP_PROXY=${HTTP_PROXY}" Environment="HTTPS_PROXY=${HTTPS_PROXY}" Environment="NO_PROXY=${NO_PROXY}" EOF # 重载服务配置 sudo systemctl daemon-reload sudo systemctl restart docker echo "✔ 代理已生效！" echo " 验证命令：docker info | grep -i proxy" ;; "remove") echo "▶ 正在清除代理配置..." sudo rm -f /etc/systemd/system/docker.service.d/proxy.conf sudo systemctl daemon-reload sudo systemctl restart docker echo "✔ 已恢复原始环境" ;; *) echo "错误：无效参数，支持 set 或 remove" exit 1 ;; esac echo " 注意：若容器网络异常，请尝试重启容器！" 操作指南 chmod +x docker-proxy.sh 修改配置 将192.168.1.118:7890替换为实际代理地址 白名单按需添加（如.alibaba.com、.docker.io） 执行命令 # 设置代理 ./docker-proxy.sh set # 清除代理 ./docker-proxy.sh remove
ASCII-Generator.site 是一个 Django 网站，用于从图像或文本中生成 ASCII 艺术字符图 GitHub.可以自己进行定制 什么是 Django ？ Django 是用 Python 写的一个自由和开放源码的 WEB 程序框架，采用了MTV 的框架模式，即模型 M ，视图 V 和 模版 T。能帮助你更快、更容易地开发 WEB 站点 官方体验地址 安装 以 Docker 方式安装。搜索 wbsu2003/asciigen [root@taboo ~]# docker search wbsu2003/asciigen NAME DESCRIPTION STARS OFFICIAL AUTOMATED wbsu2003/asciigen 从图像或文本中生成 ASCII 艺术字符图的 Django… 0 直接部署 [root@taboo ~]# docker run -d --restart=always -p 1234:1234 --name asciigen wbsu2003/asciigen 测试运行 在浏览器中输入 http://IP:1234 就能看到主界面，下面是隐私策略，点 I Agree 即可 顶部可以选择 Image to ASCII 或者 Text to ASCII，默认是 Image to ASCII Text to ASCII 只要输入转变的文字即可，但是并不支持中文
背景: 公司一体机服务器上运行着大量容器、镜像，可装系统磁盘分区的时候又没给系统根目录分太大的空间，导致磁盘空间经常被占满。所以决定把docker的存储目录更换到新的挂载点 查看整体磁盘使用情况及docker 磁盘使用情况 # 查看磁盘占用情况 # df -h # 查看docker磁盘占用情况 # docker system df 如图: 清理磁盘 # 命令可以用于清理磁盘，删除关闭的容器、无用的数据卷和网络，以及无tag的镜像，此处有些帖子会加-a参数，-a参数会将本地尚未使用的镜像干掉，慎用 # docker system prune 如图: 停止docker服务 # systemctl stop docker # 这里大多数帖子都没有提到，docker会有守护进程docker.socket运行，停了docker服务后，如果还有docker命令输入，docker服务会被自动唤醒，我们只需要将docker.socker服务也停掉就好 # systemctl stop docker.socket # 之后查看docker服务状态 # systemctl status docker 如图: 迁移数据目录 # 通过yum安装的docker,默认数据路径都是/var/lib/docker，此处从默认目录迁移到/home/docker/lib目录下，目标路径不存在则需手动创建 # rsync -avz /var/lib/docker /home/docker/lib/ # 之后就开始迁移了，迁移速度取决于你原本数据目录的大小 如图: 重新查看磁盘占用 # df -h 如图: 发现已经迁移成功 修改docker启动文件 # 通过yum安装的docker，配置文件路径/usr/lib/systemd/system/docker.service # vim /usr/lib/systemd/system/docker.service # 在ExecStart=/usr/bin/dockerd后添加--graph /home/docker/lib/docker 如图: 重新更新一下docker服务 # 取消开机自启 # systemctl disable docker # 设置开机自启 # systemctl enable docker # 刷新启动配置 # systemctl daemon-reload # 重启docker # systemctl start docker # 查看docker信息 # docker info 如图: 可以看到已经更换成功，之后可以执行docker images查看之前的镜像是否还存在，至此结束