注意:搭建harbor需要有docker和docker Compose
安装docker
docker配置从自建harbor拉取镜像
修改 /etc/docker/daemon.json 文件,以下是我的配置文件。
注意:下面都是可选项!!!本片文章只需要在insecure-registries
里添加 harbor的域名或者ip
如果是https就在registry-mirrors添加。我的harbor地址是 http://harbor.od.com 所以只在insecure-registries
添加。
{
# 设置 Docker 数据根目录。这个目录用于存储 Docker 的所有数据,包括镜像、容器等。(可选)
"data-root": "/data/docker",
# 配置存储驱动。在此使用 "overlay2" 作为存储驱动,它是 Docker 推荐的驱动,提供较好的性能。(可选)
"storage-driver": "overlay2",
# 配置 Docker 可以接受的非安全镜像仓库地址。在这些地址上,Docker 会信任并允许从这些地址拉取镜像。(可选)
"insecure-registries": [
"registry.access.redhat.com", // RedHat 官方镜像仓库
"quay.io", // Quay.io 是一个公共镜像仓库,通常用于容器镜像存储
"harbor.od.com" // 内部私有镜像仓库,域名可能属于特定企业或组织
],
# 配置 Docker 镜像的加速器地址。这些地址可以提高拉取镜像时的速度,特别是对于中国地区用户。(可选)
"registry-mirrors": [
"https://proxy.1panel.live",
"https://dockerproxy.cn",
"https://hub1.nat.tf"
],
# 配置 Docker 的网络设置,指定 Docker 网络桥接接口的 IP 地址范围。这里设置的是 172.7.200.1/24 网络。(可选)
# 它表示 Docker 将会使用这个 IP 范围为容器分配 IP 地址。
"bip": "172.7.200.1/24",
# 配置 Docker 使用 systemd 作为 cgroup 驱动程序。默认情况下,Docker 使用 cgroupfs,但如果你使用的是 systemd 管理系统,
# 可以通过此选项将 cgroup 驱动程序切换为 systemd,确保与系统的其他部分兼容。(可选)
"exec-opts": [
"native.cgroupdriver=systemd"
],
# 配置 Docker 容器在 Docker 引擎停止或重新启动时仍然继续运行。启用这个选项可以确保 Docker 引擎重新启动时,
# 容器状态不会丢失,也就是说容器在 Docker 引擎重启后会尽可能恢复运行。(可选)
"live-restore": true
}
安装harbor
github地址:Releases · goharbor/harbor(建议服务器内存大点毕竟软件本身需要保存镜像)
下载offline
服务器创建目录
mkdir -p /data/src
把这个下载好的文件放到/opt/src里(我这使用的是xftp)
使用命令解压并且解压到opt
tar zxvf harbor-offline-installer-v2.12.0.tgz -C /opt/
cd /opt/
# 重命名
mv harbor/ harbor-v2.12.0
先创建/data/harbor/目录
mkdir -p /data/harbor
修改harbor的配置文件
cd /opt/harbor-v2.12.0
# 将 harbor.yml.tmpl 文件复制为 harbor.yml 文件
cp harbor.yml.tmpl harbor.yml
# 修改harbor.yml
nano harbor.yml
harbor.yml 文件修改的地方
把软件包做版本标识,做一个软链接,便于以后升级
cd /opt/
# 做一个软链接
ln -s /opt/harbor-v2.12.0/ /opt/harbor
# 查看软连接
ls -l
这两个东西 第一个是软连接的指向,第二个是源目录。
启动harbor
/opt/harbor/install.sh
使用docker-compose ps 查看启动的容器,下面的是正常启动了
如果是 (health:starting)就重新启动
# 记得在dockerfile下执行
docker-compose down
docker-compose up -d
安装nginx
apt install nginx -y
配置harbor代理
# 创建或修改harbor.od.com.conf文件
nano /etc/nginx/conf.d/harbor.od.com.conf
# 复制以下内容到harbor.od.com.conf文件里
server {
listen 80; # 监听 80 端口,HTTP 默认端口
server_name harbor.od.com; # 配置虚拟主机的域名为 harbor.od.com
client_max_body_size 1000m; # 设置客户端请求的最大允许体积为 1000 MB(适用于上传文件的大小限制)
location / { # 定义对根路径("/")的请求的处理方式
proxy_pass http://127.0.0.1:180; # 将请求代理转发到本地的 127.0.0.1:180 上
}
}
# 测试nginx文件是否有误
nginx -t
nginx命令
启动nginx并设置自启
systemctl start nginx
systemctl enable nginx
遇到的问题
如果访问浏览器访问 harbor.od.com 触发了默认配置,我们在conf.d 配置的没生效
查看/etc/ngnix/nginx.conf 里面主要导入了两个配置项,路由触发了sites-enabled里的默认配置,我偷懒了直接把两个导入的配置优先级换一下就行了
# 这个是主要的配置,我们把配置都放在这里面了
include /etc/nginx/conf.d/*.conf;
# 这个是做软链接启动的站点配置,这里面会有一个default文件,目前触发了这个配置。
include /etc/nginx/sites-enabled/*;
sites-available
的作用
目录位置:通常位于
/etc/nginx/sites-available/
。作用:
sites-available
目录用于存放所有站点的完整配置文件,但存放在这里的配置文件不会被自动加载。用途:这个目录中保存的是“候选”站点配置,系统管理员可以在这里创建和编辑站点配置文件,然后决定是否启用这些站点配置。
sites-available
和 sites-enabled
的关系
sites-available
:用于存放所有站点的配置文件,无论启用与否都可以存放在这里,便于统一管理。sites-enabled
:用于存放启用的站点配置文件的“符号链接”。只有放在sites-enabled
中的符号链接(指向sites-available
中的配置文件)才会被 Nginx 加载。
如何使用 sites-available
和 sites-enabled
启用或禁用站点
创建站点配置文件: 在 sites-available
中创建一个新的站点配置文件。例如创建一个 example.com
的站点:
sudo nano /etc/nginx/sites-available/example.com
启用站点: 要启用这个站点,创建一个符号链接,将 sites-available
中的配置文件链接到 sites-enabled
中:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
禁用站点: 要禁用站点,只需删除 sites-enabled
中的符号链接:
sudo rm /etc/nginx/sites-enabled/example.com
重新加载 Nginx: 启用或禁用站点后,重新加载 Nginx 以应用更改:
sudo systemctl reload nginx
以下内容适合自建DNS解析
自建的DNS在192.168.153.11上,目前harbor部署到192.168.153.200上,resolv.conf指向的dns是192.168.153.11上,所以我需要增加对192.168.153.200 dns A记录
# 修改文件
nano /var/cache/bind/od.com.zone
# 增加
192.168.153.200 A记录
这是我修改的配置文件,
# 重启192.168.153.11上自建dns服务
systemctl restart named
使用 nslookup 或者类似的工具查看域名的A记录,出现你配置的记录就成功了
测试harbor
测试推送镜像到harbor的public里
# 随便拉取一个镜像
docker pull nginx
# 查找刚下载好的镜像然后手动复制 IMAGE ID
docker images | grep nginx
# 将镜像 60c8a892f36f 打上新的标签 harbor.od.com/public/nginx:latest,使其能够推送到指定的 Docker 仓库,并且可以通过新的标签来引用这个镜像
docker tag 60c8a892f36f harbor.od.com/public/nginx:latest
# 查看镜像,在里面就会看到 harbor.od.com/public/nginx:latest 镜像
docker images
# 尝试推送镜像到harbor
docker push harbor.od.com/public/nginx:latest
出现以下未登录的问题
# 登录远程镜像仓库,输入harbor的账号密码
docker login harbor.od.com
登录成功,再重新 push。
网站上打开推送harbor的仓库地址就看到已经存在镜像了
评论区