Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。

安装服务

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 创建数据存储目录
mkdir /data/

# 进入目录
cd /data/

# 下载软件
wget https://storage.googleapis.com/harbor-releases/release-1.9.0/harbor-offline-installer-v1.9.4.tgz

# 解压软件
tar xvzf harbor-offline-installer-v1.9.4.tgz
cd harbor

# 修改配置
vi harbor.yml
# The IP address or hostname to access admin UI and registry service.
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
# 自行更改为公网的域名地址
hostname: xxxx.com 

# 运行安装脚本
./install.sh

如果需要修改配置可以执行下面的命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 删除旧的容器
docker-compose down -v

# 修改配置文件
vi harbor.yml

# 准备和清理文件
./prepare

# 启动容器
docker-compose up -d

# 重启容器
docker-compose restart

登录系统

1
2
3
地址:xxxx.com 
用户名:admin 
密码:Harbor12345 # 如果不使用默认密码,请在harbor.yml 文件中修改

公网配置

配置证书,可以申请免费的证书,导出证书nginx的配置

解压到系统目录中:/data/certificate

更新harbor.yml配置内容如下:

1
2
3
4
5
6
7
# https related config
https:
  # https port for harbor, default is 443
  port: 443
  # The path of cert and key files for nginx
  certificate: /data/certificate/docker.pem
  private_key: /data/certificate/docker.key

如果是使用nginx代理的,也需要配置nginx的证书

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
server {
    listen       443;
    server_name  xxxx.com;

    access_log  /var/log/nginx/host.access.log  main;
    
    # 这里的证书是和harbor一样的证书
    ssl_certificate       cert/docker.pem;
    ssl_certificate_key   cert/docker.key;
     
    # 如果出现错误,请求的包太大,可以加上这个配置
    client_max_body_size 0;


    location / {
        proxy_pass https://172.26.100.68; # harbor的服务
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_redirect http:// $scheme://;
    }
}

使用配置

客户端拉取和推送镜像,需要配置下地址

1
2
3
4
5
6
7
8
vim /etc/docker/daemon.json

{
  "insecure-registries":["xxxx.com"]
}

# 重启docker服务
systemctl daemon-reload && systemctl restart docker

开始使用

1
2
3
# 推送和拉取可以登录下用户
# 如果项目设置成了公开的权限,拉取的地方可以不登录,使用匿名拉取
docker login https://xxxx.com -u admin -p Harbor12345