首页 > 系统相关 >搭建Docker镜像仓库Harbor管理镜像(shell编写)

搭建Docker镜像仓库Harbor管理镜像(shell编写)

时间:2024-12-13 10:29:22浏览次数:6  
标签:daemon shell Harbor ip echo harbor https 镜像 docker

搭建docker私有仓库harbor管理镜像

一、案例问题:

可能会出现的问题:

1.网络连接问题,下载harbor软件包以及依赖包时下载失败

2.系统版本兼容性问题

3.初始化数据库时遇到浏览器访问问题(不用https)以及容器名重复问题

二、案例分析:

1.若遇到网络连接超时等网络问题,使用离线下载方式

2.优化shell脚本,使版本达到最优配置

3.修改配置文件,列出所有容器以及产看是否存在端口冲突等问题

三、案例流程:

四、案例实现:

#!/bin/bash

# 关闭防火墙和 SELinux

config_environment666 () {

    systemctl stop firewalld

    systemctl disable firewalld

    sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

    setenforce 0

}

# 安装 YUM 源

install_yumyuan () {

    status1=1   #初始化变量,Status被初始化为1,表示初始状态是未设置yum源

    while (( $status1 == 1 )); do

        read -p "输入1,未安装yum源; 输入2,已经安装了yum源; 请输入你需要的数字: " a

        case $a in

            1)

                echo "未配置yum源,接下来进行配置"

                curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo 2>>error.log

                yum clean all

                yum makecache 2>>error.log

                break

                ;;

            2)

                echo "yum已经配置了"

                break

                ;;

            *)

                echo "检测到输入未列出字符,请重新输入"

                ;;

        esac

    done

}

# 安装 Docker

docker_script () {

    status2=1

    while (( $status2 == 1 )); do

        read -p "输入1,未安装docker; 输入2,已经安装了docker; 请输入你需要的数字: " b

        case $b in

            1)

                echo "该宿主机没有安装docker,接下来进行配置"

                touch /etc/yum.repos.d/docker-ce.repo

                curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 2>>error.log

                yum makecache fast

                yum install docker-ce docker-ce-cli containerd.io -y 2>>error.log

                check1=$?

                while (( $check1 > 0 )); do

                    echo "未安装成功,将再次重试"

                    yum install docker-ce docker-ce-cli containerd.io -y 2>>error.log

                    check1=$?

                done

                systemctl start docker

                systemctl enable docker

                break

                ;;

            2)

                echo "已经安装了docker"

                break

                ;;

            *)

                echo "检测到输入未列出字符,请重新输入"

                ;;

        esac

    done

}

# 配置 Docker 加速器

config_accelerator () {

    status3=1

    while (( $status3 == 1 )); do

        read -p "输入1,未配置daemon.json文件; 输入2,已经配置了daemon.json文件; 请输入你需要的数字: " c

        case $c in

            1)

                cat >>/etc/docker/daemon.json <<OK

{

    "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.cc"

    ]

}

OK

                systemctl daemon-reload

                systemctl restart docker

                echo "加速器配置完成"

                break

                ;;

            2)

                echo "已经配置了daemon.json文件,无需再进行配置"

                break

                ;;

            *)

                echo "检测到输入未列出字符,请重新输入"

                ;;

        esac

    done

}

# 获取 IP 地址

ip_address=$(ip a | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | awk "NR==2")

# 配置私有仓库地址

oneself_registry () {

    status4=1

    while (( $status4 == 1 )); do

        echo "下面进行添加我自己的私有仓库地址,后续拉取镜像会更快"

        sleep 3

        read -p "输入1,需要配置我的私有仓库地址; 输入2,不需要配置; 请输入你需要的数字: " d

        case $d in

            1)

                registry_access=$(grep "insecure-*" /etc/docker/daemon.json)

                if [ ! -z "$registry_access" ]; then

                    sed -i "/insecure-*/d" /etc/docker/daemon.json

                    sed -i "/],/a \"insecure-registries\": [\"$ip_address\"]" /etc/docker/daemon.json

                    systemctl daemon-reload

                    systemctl restart docker

                    check3=$?

                    if [ $check3 -eq 0 ]; then

                        echo "私有仓库地址添加完成"

                    else

                        echo "请检查/etc/docker/daemon.json文件,docker未重启成功"

                        exit 1

                    fi

                else

                    sed -i "s/]/],/" /etc/docker/daemon.json

                    sed -i "/],/a \"insecure-registries\": [\"$ip_address\"]" /etc/docker/daemon.json

                    systemctl daemon-reload

                    systemctl restart docker

                    check4=$?

                    if [ $check4 -eq 0 ]; then

                        echo "私有仓库地址添加完成"

                    else

                        echo "请检查/etc/docker/daemon.json文件,docker未重启成功"

                        exit 1

                    fi

                fi

                break

                ;;

            2)

                echo "提醒由于没有配置我的私有仓库地址,直接进行拉取会多耗费5~10分钟不等"

                break

                ;;

            *)

                echo "检测到输入未列出字符,请重新输入"

                ;;

        esac

    done

}

# 下载和安装 Harbor

download_and_install_harbor () {

    cd ~

    curl -O http://192.168.104.18:8080/registry/docker-compose.zip

    curl -O http://192.168.104.18:8080/registry/harbor-offline-installer-v2.4.3.tgz

    yum install unzip -y

    unzip docker-compose.zip

    chmod +x docker-compose

    mv docker-compose /usr/bin

    docker-compose --version

    tar -zxvf harbor-offline-installer-v2.4.3.tgz

    cd harbor

    docker load -i harbor.v2.4.3.tar.gz

    cp harbor.yml.tmpl harbor.yml

    rm -rf docker-compose.zip && rm -rf harbor-offline-installer-v2.4.3.tgz

    change_yml

}

# 修改 Harbor 配置文件

change_yml () {

    file_yml="file.txt"

    if [ ! -f "$file_yml" ]; then

        https_start=$(grep -n "# https related config" harbor.yml | awk -F "[ : ]" '{print $1}')

        https_stop=$((https_start + 6))

        sed -i "${https_start},${https_stop}s/^/#/" harbor.yml

        sed -i "s/^hostname:.*$/hostname: $ip_address/" harbor.yml

        ./install.sh

        docker-compose down

        docker-compose up -d

        touch $file_yml

    fi

}

# 主函数

main () {

    config_environment666         #调用环境函数

    install_yumyuan

    docker_script

    config_accelerator

    oneself_registry

    download_and_install_harbor

    echo "请去浏览器输入: http://$ip_address"

    echo "账户:admin,密码:Harbor12345"

}

# 执行主函数

main


五、案例解析:

# 获取 IP 地址

ip_address=$(ip a | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | awk "NR==2")

#解析:

grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'

-E:表示使用扩展正则表达式

-o:表示只输出匹配的部分

[0-9]{1,3}:匹配1到3位的数字

\.:匹配点号

整个正则表达式匹配四段由点号分隔的数字,即ipv4地址

awk "NR==2":从grep输出的结果中选择第二行

ip_address=$(...)

$(...):是命令替换语法,用于将命令的输出赋值给变量

#解析:

ip_address=$(ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')

ip -4 addr show eth0:

-4:表示只显示ipv4地址

addr show eth0:表示显示eth0接口的地址信息

grep -oP '(?<=inet\s)\d+(\.\d+){3}':

-P:使用prel兼容的正则表达式(PCRE)

(?<=inet\s):是一个正向肯定预查,表示匹配前面有inet的部分。

\d+:匹配一个或多个数字

(\.\d+){3}:匹配三个由点号分隔的数字段

完整命令解析:

显示eth0接口的ipv4地址信息

从输出中提供ipv4地址

将提取到的ipv4地址赋值给变量ip_address

注:

网络接口名称:确保eth0是你要查询的网络接口名称,如果使用的是其他接口(如ens33、enp0s3)

解析:

获取HTTPS配置部分的行号

https_start=$(grep -n "# https related config" harbor.yml | awk -F "[ : ]" '{print $1}')

https_stop=$((https_start + 6))

解析:

awk -F "[ : ]" '{print $1}:使用:和空格作为分隔符,提取行号

https_stop=$((https_start + 6)):计算HTTPS配置部分结束的行号,假设该部分有7行

解析:sed -i "${https_start},${https_stop}s/^/#/" harbor.yml

使用sed命令注释掉从https_start到https_stop行的所有行,s/^/#/表示在每行开头添加#符号

sed -i "s/^hostname:.*$/hostname: $ip_address/" harbor.yml

使用sed命令将hostname配置项的值更新为变量ip_address的值

六、案例验证:

1.使用docker上传镜像到harbor

2.使用docker进行登录和推送

3.下载镜像进行测试

4.将镜像打标签

5.上传镜像到Harbor

6.在Harbor界面查看

标签:daemon,shell,Harbor,ip,echo,harbor,https,镜像,docker
From: https://blog.csdn.net/2301_82330629/article/details/144415003

相关文章

  • 超详细!!关于Docker的使用镜像操作
    需要搭建帮助的可以去taobao搜索许风继续吹技术服务,谢谢!!!需要搭建帮助的可以去taobao搜索许风继续吹技术服务,谢谢!!!一、获取镜像之前提到过,DockerHub上有大量的高质量的镜像可以用,这里我们就说一下怎么获取这些镜像。从Docker镜像仓库获取镜像的命令是dockerpull。其命......
  • shell编程(完结)
    shell编程(完结)声明!学习视频来自B站up主​泷羽sec​​有兴趣的师傅可以关注一下,如涉及侵权马上删除文章笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下......
  • Shell浅浅谈(七)echo 命令使用指南
    echo是一个非常常见的Shell命令,用于将输出显示到终端,也可以将输出定向到文件。它支持多种输出格式化选项,如换行、不换行、转义字符处理等,以下是对其常用功能的阐述:1.显示普通字符串默认情况下,echo用于输出一个普通字符串。可以使用双引号或单引号来括起来字符串。示......
  • win11家庭版使用Windows PowerShell来安装wsl输入命令wsl --install报错 :无法启动服务
    本人不是技术员,只是个小白,只能说久病成医,至于写下这篇文章纯属怕自己以后忘记,给自己一个备份提醒,若有错误的地方,欢迎各位大佬指错第一步:控制面板--程序--卸载程序---左键这个界面左侧的“启用或关闭Windows功能”---勾选红箭头三样---确定---重启电脑     -------......
  • windows 下载docker镜像并上传的到镜像
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言总结前言在当前的软件开发与运维实践中,容器化技术已成为一种不可或缺的工具。Docker作为容器技术的代表,其轻量级、可移植的特点极大地简化了应用部署和管理的复杂性。然而,在某些特定的......
  • 在 Windows 中,您可以通过 CMD 或 PowerShell 实现对 Windows Media Player 播放列表的
    在Windows中,您可以通过CMD或PowerShell实现对WindowsMediaPlayer播放列表的管理和操作。不过,直接通过这些命令行工具来创建媒体库播放列表、媒体流等功能是有一定局限的,因为WindowsMediaPlayer并没有直接的命令行接口来创建播放列表。尽管如此,我们可以使用一些间接......
  • 在 PowerShell 中实现您要求的多个网络修复功能,可以通过运行多个脚本和命令来完成。这
    ResetInternetProtocols(TCP/IP)RepairWinsock(ResetCatalog)RenewInternetConnectionsFlushDNSResolverCache(DomainNameSystem)FlushARPCache(AddressResolutionProtocol)RepairInternetExplorer11ClearWindowsUpdateHistoryRepairWindows/Automat......
  • Shell脚本基础语法教程
    提示:该文章由我上一个CSDN【梦想拯救世界】拿过来的,上一个号已注销,若有小伙伴们收藏过此文章,应该会看不到了。目录前言一、Shell变量(一)定义(二)变量定义规则(三)变量的定义方式1.基本方式2.命令结果赋值给变量3.交互式定义变量4.定义有类型的变量(四)变量的分类1、本地变......
  • shell基础知识(一)
    shell脚本的基础(一)#本次分享的是有关于shell脚本的基础知识,包括基本的命令、符号等。大家在学习shell脚本的时候需要多去练习,掌握基础知识为后面学习shell案例以及写shell脚本做好铺垫。1.shell的含义shell是系统跟计算机硬件交互时使用的中间介质,只是一个系统的工具,实......
  • Shell浅浅谈(六)轻松掌握基本运算符
    Shell支持多种运算符,包括:算术运算符关系运算符布尔运算符字符串运算符文件测试运算符以下是各类运算符的详细说明和实例。一.算术运算符特点使用expr命令计算表达式。表达式和运算符之间需要空格⭐。用反引号``包裹表达式。运算符说明运算符说明示例+加法expr......