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

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.10.0

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://github.com/goharbor/harbor/releases/download/v1.10.0/harbor-offline-installer-v1.10.0.tgz
tar xf harbor-offline-installer-v1.10.0.tgz
mv harbor /usr/local

配置harbor.yml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
cd /usr/local/harbor
vim harbor.yml
#必选参数
#set hostname
hostname: hub.itunion.com #目标的主机名或者完全限定域名

# http related config
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 80

# https related config
https:
# https port for harbor, default is 443
port: 443
# The path of cert and key files for nginx
certificate: /data/cert/service.crt
private_key: /data/cert/service.key

# Harbor DB configuration
database:
# The password for the root user of Harbor DB. Change this before any production use.
password: root123

为Harbor创建https服务端证书和密钥

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
mkdir -p /data/cert
cd /data/cert

#获取CA证书
openssl genrsa -out ca.key 4096
#获取CA证书密钥,其中CN的值为你要申请证书的域名(hub.itunion.com换成你的域名)
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=itunion/OU=Personal/CN=hub.itunion.com" \
-key ca.key \
-out ca.crt

#创建服务端证书密钥
openssl genrsa -out service.key 4096
#生成服务端证书申请文件,其中CN的值为你要申请证书的域名(hub.itunion.com换成你的域名)
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=itunion/OU=Personal/CN=hub.itunion.com" \
-key service.key \
-out service.csr

#生成注册表主机证书
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=hub.itunion.com
DNS.2=hub.itunion
DNS.3=hostname
EOF

#通过CA证书密钥和服务端证书申请文件生成服务端证书
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in service.csr \
-out service.crt

为Docker配置服务端证书、密钥和CA证书

1
2
3
4
5
#将服务端证书service.crt转换为service.cert
openssl x509 -inform PEM -in service.crt -out service.cert
#创建docker存放服务端证书的目录并复制自定义证书、密钥和CA证书到指定目录下,该目录hub.itunion.com和harbor.yml配置文件中的hostname必须一致
mkdir -p /etc/docker/certs.d/hub.itunion.com
cp service.cert service.key ca.crt /etc/docker/certs.d/hub.itunion.com

运行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.itunion.com

浏览器输入https://hub.itunion.com测试访问(将hub.itunion.com更改为你的harbor.yml配置文件中的主机名),其中管理员默认用户名为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.221   hub.itunion.com' >>/etc/hosts

设置私有镜像仓库地址

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

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

1
2
systemctl daemon-reload
systemctl restart docker

下载测试镜像

1
docker pull hello-world

给镜像重新打标签

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

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

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

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

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

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