搭建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