简单介绍:
私有镜像仓库优点
节省网络带宽,针对于每个镜像不用每个人都去网络仓库上面去下载,只需要从私有仓库中下载即可;
提供镜像资源利用,针对于公司内部使用的镜像,推送到本地私有仓库中,以供公司内部相关人员使用。
Dokcer Compose
docker-compose是用于定义和运行多容器 Docker 应用程序的工具。Harbor的每个组件都是以Docker容器的形式构建的,所以使用Docker Compose来对它进行部署。
http方式部署harbor
配置步骤
第一步:配置yum源,可以用国内阿里或者华为源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
第二步:准备安装harbor仓库所需软件
安装docker-compose (官网下载地址:https://github.com/docker/compose/releases/)
这里我是用的是自己下载好的包上传到机器,官网下载太慢,应该来说国内访问国外服务器慢是通病
[root@harbor ~]# mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
[root@harbor ~]# chmod +x /usr/local/bin/docker-compose
第三步:安装docker-ce 并设置开机自启动 (配置相关docker yum源即可下载,可以使用华为或者阿里docker源)
[root@harbor harbor]# wget -O /etc/yum.repos.d/docker-ce.repo https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo
[root@harbor harbor]# sudo sed -i 's+download.docker.com+repo.huaweicloud.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
[root@harbor ~]# yum -y install docker-ce
[root@harbor ~]# systemctl enable docker --now
第四步:harbor主机开机路由转发
[root@harbor ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@harbor ~]# sysctl -p
第五步: 安装配置harbor
官网下载地址:https://github.com/goharbor/harbor/releases
这里我是用的是已经下载好的包上传到机器,官网下载太慢
[root@harbor harbor]# tar -xf harbor-offline-installer-v2.2.3.tgz -C /usr/local/
[root@harbor harbor]# cd /usr/local/harbor
修改配置文件
[root@harbor harbor]# cp harbor.yml.tmpl harbor.yml #拷贝harbor配置文件
[root@harbor harbor]# vim harbor.yml
hostname: 192.168.1.12 #访问harbor管理界面的地址,改为本机IP地址
#以下配置加上注释,否则需要证书
#https: #加上注释
# https port for harbor, default is 443
#port: 443 #加上注释
# The path of cert and key files for nginx
#certificate: /your/certificate/path #加上注释
#private_key: /your/private/key/path #加上注释
安装harbor
[root@harbor harbor]# ./install.sh
[root@harbor harbor]# ss -antpu | grep 80
访问Harbor界面(http://主机ip地址:80),用户名:admin 密码:Harbor12345
第六步: 使用其他主机作为harbor客户端测试拉取与推送
使用k8s 的master主机用于测试上传和下载;当然使用其他主机作为测试也行,只要安装docker并修改配置文件如下就行
(此时的master已经安装docker-ce软件并配置docker启动为systemd如下)
master主机安装docker-ce软件包,更改配置文件
[root@master ~]# yum -y install docker-ce
[root@matser ~]# systemctl enable docker --now
[root@master ~]# vim /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"], "
registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"], "insecure-registries":["192.168.1.12:80"]
}
[root@master ~]# systemctl restart docker
[root@master ~]# docker login http://192.168.1.12:80 #测试登录Harbor镜像仓库
Username: admin Password: Harbor12345
#密码信息会存储在/root/.docker/config.json
测试master主机上传镜像至私有仓库
[root@master ]# docker tag nginx:latest 192.168.1.12:80/library/nginx:latest
[root@master ]# # docker push 192.168.1.12:80/library/nginx:latest
#向私有仓库推送镜像
在界面中查看刚刚上传的镜像文件。
测试master主机从私有仓库下载镜像
将master主机的nginx镜像删除
[root@master ~]# docker rmi -f 192.168.1.12:80/library/nginx:latest
[root@master ~]# docker pull 192.168.1.12:80/library/nginx:latest #下载镜像
此时可以看到下载数为1
点击左侧导航栏,可以看到日志信息
命令行窗口查看harbor仓库镜像有哪些
curl http://192.168.1.12:80/v2/_catalog -u admin
命令行窗口查看harbor仓库镜像的标签
curl http://192.168.1.12:80/v2/library/centos/tags/list -u admin
harbor带有认证功能,不管是公开项目还是私有项目,上传镜像都需要用户认证。下载镜像时,公开项目不需要用户认证,私有项目下载需要认证。
如果harbor停止了,在harbor主机可以使用如下命
[root@harbor ~]# docker-compose up -d
https的方式部署harbor
在http方式部署的基础上做如下操作
第一步:生成CA证书私钥。
[root@harbor ~]# cd /usr/local/harbor/
[root@harbor harbor]# mkdir certs
[root@harbor harbor]# cd certs/
[root@harbor certs]# openssl genrsa -out ca.key 4096
第二步:生成 CA 证书。
[root@harbor certs]# openssl req -x509 -new -nodes -sha512 -days 3650 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=xh.harbor.com" -key ca.key -out ca.crt
第三步:生成服务器私钥
[root@harbor certs]# openssl genrsa -out xh.harbor.com.key 4096
第四步:生成证书签名请求
[root@harbor certs]# openssl req -sha512 -new -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=xmtx.harbor.com" -key xh.harbor.com.key -out xh.harbor.com.csr
第五步:生成一个x509 v3扩展文件(内容如下)。
无论您使用FQDN还是IP地址连接到Harbor主机,都必须创建此文件,以便可以为您的Harbor主机生成符合主题备用名称(SAN)和x509 v3的证书扩展要求。替换DNS条目以反映您的域。
[root@harbor certs]# vim v3.txt
[root@harbor certs]# cat v3.txt
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=xh.harbor.com
第六步:使用v3.txt为Harbor主机生成证书
[root@harbor certs]# openssl x509 -req -sha512 -days 3650 -extfile v3.txt -CA ca.crt -CAkey ca.key -CAcreateserial -in xh.harbor.com.csr -out xh.harbor.com.crt
第七步:提供证书给Harbor和Docker
[root@master ~]# mkdir -p /etc/docker/certs.d/ #创建docker证书目录,注意目录是在 客户端而不是harbor主机上创建
[root@harbor certs]# openssl x509 -inform PEM -in xh.harbor.com.crt -out xh.harbor.com.cert
#转换 .crt为 .cert,供Docker使用
[root@harbor certs]# scp ./ca.crt ./xh.harbor.com.cert ./xh.harbor.com.key 192.168.1.100:/etc/docker/certs.d/
#将服务器证书,密钥和CA证书文件复制到harbor客户端的Docker证书文件
第八步:需改harbor配置文件(主要是取消https部分的注释并修改证书文件路径,修改了图中的部分)
第九步: 重新使配置文件生效
[root@harbor harbor]#docker-compose down
[root@harbor harbor]# ./prepare
[root@harbor harbor]#docker-compose up -d
第十步: 将harbor主机及客户端的私有仓库更改为自己定义域名
同时将/etc/hosts修改域名映射(在harbor客户端而不是harbor主机做操作)
[root@master ~]# cat /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"],
"insecure-registries":["xh.harbor.com"]
}
[root@master ~ ]# echo 192.168.1.12 xh.harbor.com >>/etc/hosts
最后:测试登录及镜像拉取推送
[root@node-0001 ~]# docker logout xh.harbor.com #测试登录
测试镜像推送
[root@node-0001 ~]# docker tag nginx:latest xh.harbor.com/library/nginx:latest
[root@node-0001 ~]# docker push xh.harbor.com/library/nginx:latest
此时查看镜像推送成功
删除镜像测试重新拉取(成功)
[root@node-0001 ~]# docker rmi -f xh.harbor.com/library/nginx:latest
[root@node-0001 ~]# docker rmi -f nginx:latest
[root@node-0001 ~]# docker pull xh.harbor.com/library/nginx:latest