本次课程将带领大家一步一步完成Harbor私有仓库的搭建,通过一系列的系统优化、软件安装和配置,最终实现一个可以正常使用的Harbor私有仓库,并将镜像推送至该仓库。
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
在搭建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
:使新的配置生效。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
:重启系统使新的配置生效。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开机自启并立即启动。为了保证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,提高安全性。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
。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 ...
:解压oras
和harbor
安装包到指定目录。rm -f harbor.yml
:删除原有的harbor.yml
文件。cp harbor.yml.tmpl harbor.yml
:复制模板文件为harbor.yml
。sed -i
命令:修改harbor.yml
文件中的配置项,如主机名、证书路径、管理员密码等。./install.sh --with-trivy
:执行安装脚本并启用trivy
。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容器。echo 'Tech@12345' | docker login 192.168.10.10:443 -u admin --password-stdin
echo 'Tech@12345' | docker login ...
:使用管理员账号admin
和密码Tech@12345
登录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-slim
和python:3.10-alpine
)进行打标签、推送和删除操作。通过本次课程,我们学习了如何搭建Harbor私有仓库,包括系统优化、软件安装、证书创建、配置修改等步骤,最后成功将镜像推送至Harbor私有仓库。希望大家能够掌握这些知识,在实际工作中灵活运用。