部署Harbor私有仓库
在现代软件开发中,容器化应用已经成为主流,而容器镜像仓库则是确保容器镜像安全、管理和分发的重要工具。Harbor 作为一款开源的企业级容器镜像仓库管理工具,不仅支持多种认证方式,还提供镜像复制、漏洞扫描和用户访问控制等功能,为企业提供了一个安全、高效的镜像管理方案。
本文将详细介绍如何在本地环境中搭建Harbor,并演示如何使用Harbor进行镜像的推送、拉取和管理操作。无论你是容器技术的新手,还是经验丰富的开发者,这篇指南都将为你提供实用的帮助。
准备工作
服务器:一台运行Ubuntu Linux操作系统的服务器
硬件配置:至少2个CPU核心,4GB内存和40GB硬盘空间,硬盘空间取决于你有多少镜像。
生成root证书信息
根证书(Root Certificate)是证书链的起点,它由受信任的证书颁发机构(CA)签发,起到认证其他证书的作用。这里我们生成一个名为Root的CA
1 2 3 4
| openssl genrsa -out /etc/ssl/private/selfsignroot.key 4096 openssl req -x509 -new -nodes -sha512 -days 3650 -subj "/C=CN/ST=Shanghai/L=Shanghai/O=Company/OU=SH/CN=Root" \ -key /etc/ssl/private/selfsignroot.key \ -out /usr/local/share/ca-certificates/selfsignroot.crt
|
生成服务器私钥以及证书请求文件
这里我们生成一个为xiaohui.cn域名颁发证书的请求
1 2 3 4 5
| openssl genrsa -out /etc/ssl/private/registry.key 4096 openssl req -sha512 -new \ -subj "/C=CN/ST=Shanghai/L=Shanghai/O=Company/OU=SH/CN=xiaohui.cn" \ -key /etc/ssl/private/registry.key \ -out registry.csr
|
生成openssl cnf扩展文件
为刚才的证书颁发请求扩充请求内容,额外增加registry.xiaohui.cn
的验证域名
1 2 3 4 5 6 7 8 9 10 11 12
| cat > certs.cnf << EOF [req] req_extensions = v3_req distinguished_name = req_distinguished_name [req_distinguished_name] [v3_req ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = registry.xiaohui.cn EOF
|
签发证书
用刚才我们创建的CA机构为我们的证书颁发请求做最终的证书颁发,本次为他们颁发10年有效的证书
1 2 3 4 5
| openssl x509 -req -in registry.csr \ -CA /usr/local/share/ca-certificates/selfsignroot.crt \ -CAkey /etc/ssl/private/selfsignroot.key -CAcreateserial \ -out /etc/ssl/certs/registry.crt \ -days 3650 -extensions v3_req -extfile certs.cnf
|
信任根证书
由于我们的CA机构是自建的,所以在所有使用此CA颁发的证书位置,都需要信任此CA,才能自动信任由它颁发的证书
部署Harbor仓库
先部署Docker CE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| sudo apt-get update sudo apt-get install -y \ ca-certificates \ curl \ gnupg \ lsb-release
sudo mkdir -p /etc/apt/keyrings curl -fsSL https://mirror.nju.edu.cn/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirror.nju.edu.cn/docker-ce/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
|
再添加Docker 镜像加速器,这里只限在国内部署时才需要加速,在国外这样加速反而缓慢
容器镜像加速器可以从这里获得:https://registry.credclouds.com/
1 2 3 4 5 6
| sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://xxx.xxx.xxx"] } EOF
|
添加Compose支持,并启动Docker服务
1 2 3 4
| curl -L "https://github.com/docker/compose/releases/download/v2.29.7/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose sudo systemctl daemon-reload sudo systemctl restart docker
|
下载安装Harbor
1 2 3 4
| wget https://github.com/goharbor/harbor/releases/download/v2.11.1/harbor-offline-installer-v2.11.1.tgz tar xf harbor-offline-installer-v2.11.1.tgz -C /usr/local/bin cd /usr/local/bin/harbor docker load -i harbor.v2.11.1.tar.gz
|
在harbor.yml中,修改以下参数,定义了网址、证书、密码
生成服务文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| cat > /etc/systemd/system/harbor.service <<EOF [Unit] Description=Harbor After=docker.service systemd-networkd.service systemd-resolved.service Requires=docker.service Documentation=http://github.com/vmware/harbor [Service] Type=simple Restart=on-failure RestartSec=5 ExecStart=/usr/local/bin/docker-compose -f /usr/local/bin/harbor/docker-compose.yml up ExecStop=/usr/local/bin/docker-compose -f /usr/local/bin/harbor/docker-compose.yml down [Install] WantedBy=multi-user.target EOF sudo systemctl daemon-reload systemctl enable harbor --now
|
测试Harbor功能
在客户端上,将registry.xiaohui.cn以及其对应的IP添加到/etc/hosts,然后将随便一个镜像改名为带上DOMAIN:PORT形式,尝试上传我们的镜像到本地仓库
1 2 3
| docker login registry.xiaohui.cn docker tag httpd:v1 registry.xiaohui.cn/library/httpd:v1 docker push registry.xiaohui.cn/library/httpd:v1
|
这样,我们就把镜像改名好,并上传到我们的仓库了
版权声明: 本博客中的内容未经允许不得转载和引用,转载和引用需获得作者同意, 作者微信: Lxh_Chat