CentOS7部署Docker-Harbor1.7.5镜像仓库

1 背景介绍

由于Docker官方镜像仓库服务器是在国外,访问时速度比较慢,国内的网易蜂巢等镜像仓库又无法创建私有的镜像仓库,根据公司业务的创建的镜像不可能存放在公开的镜像仓库上;因此想通过搭建私有的镜像仓库用于存储公司业务创建的镜像,目前vmware公司开源的Harbor仓库是国内首选的私有镜像仓库,本文将使用Harbor进行部署安装。

2 软件需求

2.1 官方建议Harbor安装底层需求

Python需要使用2.7或更高版本

Docker引擎需要使用1.10或更高版本

Docker Compose需要使用1.6.0或更高版本

2.2 本文系统和软件版本

System version: CentOS Linux release 7.7.1908 (Core)

Python version: Python 2.7.5(CentOS7系统默认2.7以上)

Docker version: Docker version 19.03.5, build 633a0ea

Docker-compose version: docker-compose version 1.25.0, build 0a186604

Harbor version: v1.7.5

3 部署Harbor

3.1 安装底层依赖

(1) 安装python2.7.5

默认CentOS7以上的操作系统自带python2.7以上的版本,若是其他版本的操作系统,请自行Google解决安装。

(2) 安装docker-ce19.03.5

更新系统到最新版并重启生效

1
2
yum update -y
reboot

关闭防火墙firewalld和selinux

1
2
3
4
systemctl stop firewalld
systemctl disable firewalld
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
setenforce 0

安装iptables并启动

1
2
3
4
5
yum install -y iptables-services
systemctl start iptables
systemctl enable iptables
iptables -F
service iptables save

使用rpm包方式安装docker-ce,使用以下网址下载docker-ce对应版本的rpm安装包和依赖组件包

下载网址:https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

1
2
3
4
5
6
7
8
9
10
mkdir /opt/docker
cd /opt/docker

wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-19.03.5-3.el7.x86_64.rpm
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-19.03.5-3.el7.x86_64.rpm

yum install -y containerd.io-1.2.6-3.3.el7.x86_64.rpm
yum install -y docker-ce-cli-19.03.5-3.el7.x86_64.rpm
yum install -y docker-ce-19.03.5-3.el7.x86_64.rpm

启动dockerd进程

1
2
systemctl start docker
systemctl enable docker

验证docker是否正常安装并启动

1
docker run hello-world

(3) 安装docker-compose1.25.0

下载对应系统版本的docker-compose可执行文件放置到系统环境变量/usr/local/bin下,然后赋予可执行权限

下载网址:https://github.com/docker/compose/releases

1
2
3
4
5
cd /opt/docker
wget https://github.com/docker/compose/releases/download/1.25.0/docker-compose-Linux-x86_64
cp -a docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
cd /usr/local/bin/
chmod +x docker-compose

验证docker-compose是否安装成功

1
docker-compose -v

3.2 安装Harbor

harbor官方上提供offline和online两个版本,其中offline是带有底层镜像的离线版;online是不包含镜像的在线版,安装的时候会自动去官网拉取镜像;本文建议下载offline版本,减少安装时拉取镜像的时间(网速太慢)。

Harbor官方下载地址:https://github.com/vmware/harbor/releases

下载并解压harbor软件包

1
2
3
4
cd /opt/docker
wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.5.tgz
tar xf harbor-offline-installer-v1.7.5.tgz
mv harbor /usr/local

配置harbor.cfg文件

1
2
3
4
5
6
7
8
9
10
11
cd /usr/local/harbor
vim harbor.cfg
#必选参数
hostname: hub.opsunion.com #目标的主机名或者完全限定域名
ui_url_protocol: https #默认为http,docker官方hub使用https,此处建议和官方一致更改为https
db_password: root123 #用于db_auth的MySQL数据库的根密码。更改此密码进行任何生产用途
max_job_workers: 3 #默认值为3,复制镜像到其他仓库时允许采用的最大线程数
customize_crt: on #默认为on,此属性打开时,prepare脚本将为注册表令牌的生成/验证创建私钥和根证书
ssl_cert: /data/cert/server.crt #SSL证书的路径,仅当协议设置为https时才应用
ssl_cert_key: /data/cert/server.key #SSL密钥的路径,仅当协议设置为https时才应用
secretkey_path: /data #用于在复制策略中加密或解密远程注册表的密码的密钥路径

创建https服务端证书和密钥

1
2
3
4
5
6
7
8
mkdir -p /data/cert
cd /data/cert
openssl genrsa -des3 -out server.key 2048 #生成2048位的证书加密私钥,需要设置密钥的密码
openssl req -new -key server.key -out server.csr #生成证书的申请文件,需要输入前面设置的密钥密码,并且Common Name字段输入你要添加证书的域名hub.opsunion.com,即harbor.cfg配置文件中的主机名

cp server.key server.key.org #备份证书私钥
openssl rsa -in server.key.org -out server.key #去除证书密钥的密码,需要输入前面设置的密码
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt #生成证书

运行harbor安装脚本

1
2
cd /usr/local/harbor
./install.sh

测试访问harbor仓库web页面

以Windows为例,先配置hosts解析,编辑 C:\Windows\System32\drivers\etc\hosts 文件,添加如下内容:

注:如果域名有dns解析,这一步可以省略

1
192.168.1.222   hub.opsunion.com

浏览器输入https://hub.opsunion.com测试访问(将hub.opsunion.com更改为你的harbor.cfg配置文件中的主机名),其中管理员默认用户名为admin,默认密码为Harbor12345,如下图所示:

附:停止或启动harbor仓库命令

1
2
3
cd /usr/local/harbor  #切换到harbor安装目录下
docker-compose stop #停止harbor仓库
docker-compose up -d #后台启动harbor仓库

4 客户端配置并测试私有仓库

配置hosts解析

以CentOS系统为例,修改/etc/hosts配置文件,执行以下命令,如下所示:

注:如果域名有dns解析,这一步可以省略

1
echo '192.168.1.222   hub.opsunion.com' >>/etc/hosts

设置私有镜像仓库地址

1
2
3
4
vim /etc/docker/daemon.json
{
"insecure-registries":["hub.opsunion.com"]
}

重新加载配置并重启docker服务

1
2
systemctl daemon-reload
systemctl restart docker

下载测试镜像

1
docker pull hello-world

给镜像重新打标签

1
docker tag hello-world:latest hub.opsunion.com/base/hello-world:v1.0

注:其中 hello-world:latest 为源镜像名:版本号

hub.opsunion.com/base/hello-world:v1.0 为目标仓库地址/仓库名/镜像名:版本号

登录私有镜像仓库上传镜像

1
2
docker login https://hub.opsunion.com   #需要输入仓库的用户名和密码
docker push hub.opsunion.com/base/hello-world:v1.0 #推送到私有仓库的镜像

登录harbor仓库web页面查看上传的镜像,如下图所示,镜像上传成功。