Harbor私有仓库搭建一键版

Harbor私有仓库搭建一键版

本次课程将带领大家一步一步完成Harbor私有仓库的搭建,通过一系列的系统优化、软件安装和配置,最终实现一个可以正常使用的Harbor私有仓库,并将镜像推送至该仓库。

课程内容

一、系统软件准备

系统要求
  • 操作系统:CentOS 9
  • 硬件配置:2核CPU / 4GB内存 / 50GB硬盘
所需软件
  • docker-compose

    curl -L "https://github.com/docker/compose/releases/download/v2.33.0/docker-compose-$(uname -s)-$(uname -m)" \
    -o /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose
    
  • harbor-offline-installer-v2.12.2.tgz

    wget https://github.com/goharbor/harbor/releases/download/v2.12.2/harbor-offline-installer-v2.12.2.tgz
    tar zxvf harbor-offline-installer-v2.12.2.tgz -C /opt
    
  • oras_1.2.2_linux_amd64.tar.gz

    wget https://github.com/oras-project/oras/releases/download/v1.2.2/oras_1.2.2_linux_amd64.tar.gz
    tar xzf oras_1.2.2_linux_amd64.tar.gz -C /usr/local/bin/
    
病毒库
  • trivy-db:2

    oras pull ghcr.nju.edu.cn/aquasecurity/trivy-db:2
    
  • trivy-java-db:1

    oras pull ghcr.nju.edu.cn/aquasecurity/trivy-java-db:1
    

二、详细步骤

1. 系统优化

在搭建Harbor私有仓库之前,我们需要对系统进行一些优化操作,以提高系统的性能和稳定性。

hostnamectl set-hostname harbor.example.com
cat >> /etc/sysctl.conf << EOF
# 网络优化
net.core.somaxconn = 65535
net.core.default_qdisc = fq
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_congestion_control = bbr
# 文件系统
fs.file-max = 2097152
fs.inotify.max_user_watches = 524288
vm.swappiness = 0
EOF
sysctl -p
  • 解释
    • hostnamectl set-hostname harbor.example.com:设置主机名。
    • cat >> /etc/sysctl.conf << EOF ... EOF:将网络和文件系统的优化配置追加到/etc/sysctl.conf文件中。
    • sysctl -p:使新的配置生效。
2. 启用Cgroups v2

Cgroups(Control Groups)是Linux内核提供的一种机制,用于限制、记录和隔离进程组所使用的物理资源(如CPU、内存、磁盘I/O等)。我们需要启用Cgroups v2。

# 修改 GRUB 配置  
sudo sed -i 's/GRUB_CMDLINE_LINUX=".*"/GRUB_CMDLINE_LINUX="systemd.unified_cgroup_hierarchy=1"/g' /etc/default/grub  
sudo  grub2-mkconfig -o /boot/grub2/grub.cfg  # 适用于 CentOS 7/8/9  需 Linux 5.4+ 内核
reboot  
  • 解释
    • sed -i:用于修改/etc/default/grub文件中的GRUB配置,将systemd.unified_cgroup_hierarchy=1添加到内核启动参数中。
    • grub2-mkconfig -o /boot/grub2/grub.cfg:生成新的GRUB配置文件。
    • reboot:重启系统使新的配置生效。
3. 安装Docker

Docker是一个开源的应用容器引擎,我们需要安装Docker来支持Harbor私有仓库的运行。

yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
yum install -y docker-ce docker-ce-cli containerd.io
systemctl enable --now docker
  • 解释
    • yum install -y yum-utils:安装yum-utils工具,用于管理yum软件源。
    • yum-config-manager --add-repo:添加Docker的yum软件源。
    • yum install -y docker-ce docker-ce-cli containerd.io:安装Docker相关组件。
    • systemctl enable --now docker:设置Docker开机自启并立即启动。
4. 创建证书

为了保证Harbor私有仓库的安全性,我们需要创建SSL证书。

# 创建证书目录
mkdir -p /data/certs && cd /data/certs
# 生成证书(有效期365天)
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout tls.key -out tls.crt \
  -subj "/CN=harbor.example.com" \
  -addext "subjectAltName=IP:192.168.10.10"
 
# 设置文件权限
chmod 400 tls.*
  • 解释
    • mkdir -p /data/certs && cd /data/certs:创建证书目录并进入该目录。
    • openssl req ...:使用openssl工具生成自签名的SSL证书,有效期为365天。
    • chmod 400 tls.*:设置证书文件的权限为400,提高安全性。
5. 解压病毒库
mkdir -p /data/harbor/trivy-adapter/trivy/{db,java-db,fanal}
tar xzf /root/db.tar.gz -C /data/harbor/trivy-adapter/trivy/db/
tar xzf /root/javadb.tar.gz -C /data/harbor/trivy-adapter/trivy/java-db/
chown -R root:root /data/harbor/trivy-adapter/
  • 解释
    • mkdir -p ...:创建病毒库的存储目录。
    • tar xzf ...:解压病毒库文件到指定目录。
    • chown -R root:root ...:设置病毒库目录的所有者和所属组为root
6. 解压并修改harbor.yml
tar vxzf oras_1.2.2_linux_amd64.tar.gz -C /usr/local/bin/
tar vxzf harbor-offline-installer-v2.12.2.tgz -C /opt
cd /opt/harbor/
rm -f harbor.yml
cp harbor.yml.tmpl harbor.yml
sed -i -e 's/^hostname:.*/hostname: 192.168.10.10/g' harbor.yml
sed -i -e 's/^  certificate:.*/  certificate: \/data\/certs\/tls.crt/g' harbor.yml
sed -i -e 's/^  private_key:.*/  private_key: \/data\/certs\/tls.key/g' harbor.yml
sed -i -e 's/^  skip_update:.*/  skip_update: true/g' harbor.yml
sed -i -e 's/^  skip_java_db_update:.*/  skip_java_db_update: true/g' harbor.yml
sed -i -e 's/^  offline_scan:.*/  offline_scan: true/g' harbor.yml
sed -i -e 's/^harbor_admin_password: Harbor12345/harbor_admin_password: Tech@12345/g' harbor.yml
sed -i -e 's/^data_volume: \/data/data_volume: \/data\/harbor/g' harbor.yml
./install.sh --with-trivy
  • 解释
    • tar vxzf ...:解压orasharbor安装包到指定目录。
    • rm -f harbor.yml:删除原有的harbor.yml文件。
    • cp harbor.yml.tmpl harbor.yml:复制模板文件为harbor.yml
    • 一系列sed -i命令:修改harbor.yml文件中的配置项,如主机名、证书路径、管理员密码等。
    • ./install.sh --with-trivy:执行安装脚本并启用trivy
7. 配置Docker守护进程
cat > /etc/docker/daemon.json << EOF
{
  "insecure-registries": [
  "192.168.10.10:443"
  ],
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://hub.urlsa.us.kg",
    "https://docker.urlsa.us.kg"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}
EOF
systemctl restart docker
docker start $(docker ps -aq)
  • 解释
    • cat > /etc/docker/daemon.json << EOF ... EOF:将Docker守护进程的配置写入/etc/docker/daemon.json文件,包括不安全的注册表、镜像源、日志驱动等。
    • systemctl restart docker:重启Docker服务使新的配置生效。
    • docker start $(docker ps -aq):启动所有已停止的Docker容器。
8. 登录Harbor私有仓库
echo 'Tech@12345' | docker login 192.168.10.10:443 -u admin --password-stdin
  • 解释
    • echo 'Tech@12345' | docker login ...:使用管理员账号admin和密码Tech@12345登录Harbor私有仓库。
9. 推送镜像到Harbor私有仓库
for imag in `docker images -a |egrep -v "192.168|TAG"|awk '{print $1":"$2}'`;
do
rname=`echo ${imag}|sed 's/.*\///g'`;
docker tag ${imag} 192.168.10.10:443/library/${rname};
docker push 192.168.10.10:443/library/${rname};
docker rmi -f 192.168.10.10:443/library/${rname};
done
  • 解释
    • for imag in ...:遍历所有本地镜像(排除Harbor私有仓库的镜像)。
    • docker tag ...:为每个镜像添加Harbor私有仓库的标签。
    • docker push ...:将镜像推送到Harbor私有仓库。
    • docker rmi -f ...:删除本地的Harbor私有仓库镜像。
# 上传的 python:3.10-alpine
inimag=python:3.10-alpine
for imag in `docker images | awk '{print $1":"$2}' | egrep "${inimag}"`;
do
rname=`echo ${imag}|sed 's/.*\///g'`;
docker tag ${imag} 192.168.10.10:443/library/${rname};
docker push 192.168.10.10:443/library/${rname};
#docker rmi -f 192.168.10.10:443/library/${rname};
done
  • 解释
    • 这部分代码是针对特定镜像(如python:3.10-slimpython:3.10-alpine)进行打标签、推送和删除操作。

课程总结

通过本次课程,我们学习了如何搭建Harbor私有仓库,包括系统优化、软件安装、证书创建、配置修改等步骤,最后成功将镜像推送至Harbor私有仓库。希望大家能够掌握这些知识,在实际工作中灵活运用。

你可能感兴趣的:(Linux,#,服务器容器,docker,运维,容器)