GVKun编程网logo

Docker 镜像仓库 Harbor 之搭建及配置(docker配置镜像仓库地址)

13

对于Docker镜像仓库Harbor之搭建及配置感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解docker配置镜像仓库地址,并且为您提供关于03:使用docker搭建Harbor私有镜像仓

对于Docker 镜像仓库 Harbor 之搭建及配置感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解docker配置镜像仓库地址,并且为您提供关于03: 使用docker搭建Harbor私有镜像仓库、Centos7安装Docker镜像仓库Harbor1.5.3、harbor垃圾回收(物理删除)、CentOS7部署Docker-Harbor1.10.0镜像仓库、DOCKER 08:搭建本地镜像仓库 Harbor的宝贵知识。

本文目录一览:

Docker 镜像仓库 Harbor 之搭建及配置(docker配置镜像仓库地址)

Docker 镜像仓库 Harbor 之搭建及配置(docker配置镜像仓库地址)

目录

Harbor 介绍
环境、软件准备
Harbor 服务搭建
Harbor 跨数据复制配置
FAQ
1、Harbor 介绍

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

2、环境、软件准备

本次演示环境,我是在虚拟机 Linux Centos7 上操作,以下是安装的软件及版本:

Docker:version 1.13.1
Docker-compose: version 1.22.0-rc1
Harbor: version 1.6
注意:Harbor 的所有服务组件都是在 Docker 中部署的,所以官方安装使用 Docker-compose 快速部署,所以我们需要安装 Docker、Docker-compose。由于 Harbor 是基于 Docker Registry V2 版本,所以就要求 Docker 版本不小于 1.10.0,Docker-compose 版本不小于 1.6.0。

1)Docker 安装

官网安装 Docker for CentOS

 

yum 安装 yum install docker

 

2) Docker-compose 安装

1、下载指定版本的 docker-compose

curl -L https://github.com/docker/compose/releases/download/1.22.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/bin/docker-compose

  

2、对二进制文件赋可执行权限

$ sudo chmod +x /usr/local/bin/docker-compose

  

3、测试下 docker-compose 是否安装成功

docker-compose version
docker-compose version 1.22.0-rc1, build e7de1bc3
docker-py version: 3.4.0
CPython version: 3.6.5
OpenSSL version: OpenSSL 1.1.0f  25 May 2017

  

3、Harbor 服务搭建

1)下载 Harbor 安装文件
从 github harbor 官网 release 页面下载指定版本的安装包。

1、离线安装包

wget https://storage.googleapis.com/harbor-releases/release-1.6.0/harbor-offline-installer-v1.6.0-rc3.tgz 

  tar zxvf harbor-offline-installer-v1.6.0-rc3.tgz

  

2)配置 Harbor
解压缩之后,目录下回生成 harbor.conf 文件,该文件就是 Harbor 的配置文件。

## Configuration file of Harbor

# hostname设置访问地址,可以使用ip、域名,不可以设置为127.0.0.1或localhost
hostname = 172.16.1.99

# 访问协议,默认是http,也可以设置https,如果设置https,则nginx ssl需要设置on
ui_url_protocol = http

# mysql数据库root用户默认密码root123,实际使用时修改下
db_password = root123

max_job_workers = 3 
customize_crt = on
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key
secretkey_path = /data
admiral_url = NA

# 邮件设置,发送重置密码邮件时使用
email_identity = 
email_server = smtp.mydomain.com
email_server_port = 25
email_username = sample_admin@mydomain.com
email_password = abc
email_from = admin <sample_admin@mydomain.com>
email_ssl = false

# 启动Harbor后,管理员UI登录的密码,默认是Harbor12345
harbor_admin_password = Harbor12345

# 认证方式,这里支持多种认证方式,如LADP、本次存储、数据库认证。默认是db_auth,mysql数据库认证
auth_mode = db_auth

# LDAP认证时配置项
#ldap_url = ldaps://ldap.mydomain.com
#ldap_searchdn = uid=searchuser,ou=people,dc=mydomain,dc=com
#ldap_search_pwd = password
#ldap_basedn = ou=people,dc=mydomain,dc=com
#ldap_filter = (objectClass=person)
#ldap_uid = uid 
#ldap_scope = 3 
#ldap_timeout = 5

# 是否开启自注册
self_registration = on

# Token有效时间,默认30分钟
token_expiration = 30

# 用户创建项目权限控制,默认是everyone(所有人),也可以设置为adminonly(只能管理员)
project_creation_restriction = everyone

verify_remote_cert = on

  

3)启动 Harbor
修改完配置文件后,在的当前目录执行./install.sh,Harbor 服务就会根据当期目录下的 docker-compose.yml 开始下载依赖的镜像,检测并按照顺序依次启动各个服务,Harbor 依赖的镜像及启动服务如下:

# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
vmware/harbor-jobservice v1.1.2 ac332f9bd31c 10 days ago 162.9 MB
vmware/harbor-ui v1.1.2 803897be484a 10 days ago 182.9 MB
vmware/harbor-adminserver v1.1.2 360b214594e7 10 days ago 141.6 MB
vmware/harbor-db v1.1.2 6f71ee20fe0c 10 days ago 328.5 MB
vmware/registry 2.6.1-photon 0f6c96580032 4 weeks ago 150.3 MB
vmware/harbor-notary-db mariadb-10.1.10 64ed814665c6 10 weeks ago 324.1 MB
vmware/nginx 1.11.5-patched 8ddadb143133 10 weeks ago 199.2 MB
vmware/notary-photon signer-0.5.0 b1eda7d10640 11 weeks ago 155.7 MB
vmware/notary-photon server-0.5.0 6e2646682e3c 3 months ago 156.9 MB
vmware/harbor-log v1.1.2 9c46a7b5e517 4 months ago 192.4 MB
photon 1.0 e6e4e4a2ba1b 11 months ago 127.5 MB

  

# docker-compose ps
Name Command State Ports 
------------------------------------------------------------------------------------------------------------------------------
harbor-adminserver /harbor/harbor_adminserver Up 
harbor-db docker-entrypoint.sh mysqld Up 3306/tcp 
harbor-jobservice /harbor/harbor_jobservice Up 
harbor-log /bin/sh -c crond && rm -f ... Up 127.0.0.1:1514->514/tcp 
harbor-ui /harbor/harbor_ui Up 
nginx nginx -g daemon off; Up 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp 
registry /entrypoint.sh serve /etc/ ... Up 5000/tcp

 

启动完成后,我们访问刚设置的 hostname 即可 http://172.16.1.99/,默认是 80 端口,如果端口占用,我们可以去修改 docker-compose.yml 文件中,对应服务的端口映射。

 

4) 登录 Web Harbor
输入用户名 admin,默认密码(或已修改密码)登录系统。

 

我们可以看到系统各个模块如下:

项目:新增 / 删除项目,查看镜像仓库,给项目添加成员、查看操作日志、复制项目等
日志:仓库各个镜像 create、push、pull 等操作日志
系统管理
用户管理:新增 / 删除用户、设置管理员等
复制管理:新增 / 删除从库目标、新建 / 删除 / 启停复制规则等
配置管理:认证模式、复制、邮箱设置、系统设置等
其他设置
用户设置:修改用户名、邮箱、名称信息
修改密码:修改用户密码
注意:非系统管理员用户登录,只能看到有权限的项目和日志,其他模块不可见。

5)新建项目


我们新建一个名称为 wanyang 的项目,设置不公开。注意:当项目设为公开后,任何人都有此项目下镜像的读权限。命令行用户不需要 “docker login” 就可以拉取此项目下的镜像。

 

新建项目完毕后,我们就可以用 admin 账户提交本地镜像到 Harbor 仓库了。例如我们提交本地 nginx 镜像:

1、admin 登录

$ docker login 172.16.1.99
Username: admin
Password:
Login Succeeded

  

2、给镜像打 tag

$ docker tag nginx 172.16.1.99/wanyang/nginx:latest
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 958a7ae9e569 2 weeks ago 109 MB
172.16.1.99/wanyang/nginx latest 958a7ae9e569 2 weeks ago 109 MB

  

3、push 到仓库

$ docker push 172.16.1.99/wanyang/nginx
The push refers to a repository [172.16.1.99/wanyang/nginx]
a552ca691e49: Pushed
7487bf0353a7: Pushed
8781ec54ba04: Pushed
latest: digest: sha256:41ad9967ea448d7c2b203c699b429abe1ed5af331cd92533900c6d77490e0268 size: 948

  

上传完毕后,登录 Web Harbor,选择项目,项目名称 wanyang,就可以查看刚才上传的 nginx image 了

 

03: 使用docker搭建Harbor私有镜像仓库

03: 使用docker搭建Harbor私有镜像仓库

1.1 harbor介绍

  1、Harbor简介

      1. Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器

      2. 镜像的存储harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。

      3. harbor在docker distribution的基础上增加了一些安全、访问控制、管理的功能以满足企业对于镜像仓库的需求。

      4. harbor以docker-compose的规范形式组织各个组件,并通过docker-compose工具进行启停。

      5. docker的registry是用本地存储或者s3都是可以的

      6. Harbor的镜像拷贝功能是通过docker registry的API去拷贝,这种做法屏蔽了繁琐的底层文件操作

  2、Harbor架构图

       

  3、主要组件

      

 1.2 Harbor安装

  1、参考文档及安装步骤梳理

      下载v1.4.0版本harbor:https://github.com/goharbor/harbor/releases?after=v1.5.0-rc5

      安装参考文档:https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md

      配置证书:https://github.com/goharbor/harbor/blob/master/docs/configure_https.md

      1、  下载离线安装包

      2、  安装docker

      3、  安装docker-compose

      4、  自签TLS证书

      5、  Harbor安装与配置

      6、  Docker主机访问Harbor

  2、安装docker和docker-compose(192.168.56.14)

# 1)安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2

# 2)添加Docker软件包源(否则doker安装的不是新版本)
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

# 3)安装Docker CE
yum install -y docker-ce

# 4)启动Docker服务并设置开机启动
systemctl start docker
systemctl enable docker

# 5)安装docker compose
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version  # 测试docker-compose是否安装好

   2、安装Harbor

''''''安装Harbor镜像仓库''''''
# 1、下载离线安装包
https://github.com/goharbor/harbor/releases

# 2、解压并配置访问地址''''''
cd /home/work
tar zxvf harbor-offline-installer-v1.8.1.tgz cd /home/work/harbor vi harbor.yml '''''' hostname = 192.168.56.14 harbor_admin_password = 123456 '''''' # 3、准备配置 ./prepare # 4、导入镜像并启动 ./install.sh # 5、查看容器状态 docker-compose ps 安装完成后可以登录Harbor:http://192.168.56.14

 1.3 为Harbor配置Https

  1、简介      

      1. 配置ssl证书https://github.com/goharbor/harbor/blob/master/docs/configure_https.md

      2. 由于Harbor没有附带任何证书,所以它默认使用HTTP来服务注册表请求,但是,强烈建议为任何生产环境启用安全性。

      3. 在测试或开发环境中,您可以选择使用自签名证书,而不是来自受信任的第三方CA的证书。

  2、获得CA证书颁发机构(CN为域名)

mkdir /home/work/harbor/ssl/  # 创建一个ssl目录用来存放要创建的证书
cd /home/work/harbor/ssl

# 获得CA证书颁发机构(CN为域名,最好为主机名)
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 \
    -subj "/C=TW/ST=Taipei/L=Taipei/O=example/OU=Personal/CN=linux-node4.example.com" \
    -key ca.key \
    -out ca.crt

  3、获取服务器证书

      1. 假设注册表的主机名是linux-node4.example.com,其DNS记录指向运行Harbor的主机。

      2. 在生产环境中,您首先应该从CA获得证书,在测试或开发环境中,您可以使用自己的CA。

      3. 证书通常包含一个.crt文件和一个.key文件,例如linux-node4.example.com.crt和linux-node4.example.com.key。

# 创建自己的私钥
openssl genrsa -out linux-node4.example.com.key 4096
# 生成部署请求认证
# 如果使用像linux-node4.example.com这样的FQDN连接注册表主机,则必须使用linux-node4.example.com作为CN(通用名称)。
openssl req -sha512 -new \
  -subj "/C=TW/ST=Taipei/L=Taipei/O=example/OU=Personal/CN=linux-node4.example.com" \
  -key linux-node4.example.com.key \
  -out linux-node4.example.com.csr

  4、为注册的主机生成证书

      1. 无论您使用的是像linux-node4.example.com这样的FQDN还是IP来连接注册表主机

      2. 都可以运行这个命令来生成符合Subject Alternative Name (SAN)和x509 v3扩展要求的注册表主机证书

# 生成v3.ext文件
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth 
subjectAltName = @alt_names

[alt_names]
DNS.1=linux-node4.example.com
DNS.2=linux-node4.example
DNS.3=example
EOF

# 生成证书
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in linux-node4.example.com.csr \
-out linux-node4.example.com.crt

  5、为Harbor配置服务器证书和密钥

# 在获得linux-node4.example.com.crt和linux-node4.example.com.key文件之后,可以将它们放入/data/cert/这样的目录中
mkdir -p /data/cert
cp linux-node4.example.com.crt /data/cert/
cp linux-node4.example.com.key /data/cert/

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

# Docker守护进程将.crt文件解释为CA证书,将.cert文件解释为客户机证书
# 将服务器linux-node4.example.com.crt转换为linux-node4.example.com.cert
openssl x509 -inform PEM -in linux-node4.example.com.crt -out linux-node4.example.com.cert

# 为docker部署 linux-node4.example.com.cert、linux-node4.example.com.key和ca.crt
mkdir -p /etc/docker/certs.d/linux-node4.example.com/
cp linux-node4.example.com.cert /etc/docker/certs.d/linux-node4.example.com/
cp linux-node4.example.com.key /etc/docker/certs.d/linux-node4.example.com/
cp ca.crt /etc/docker/certs.d/linux-node4.example.com/

  7、配置Harbor

# 编辑文件端口,更新主机名并取消对https块的注释,更新属性证书和private_key
#set hostname
hostname: linux-node4.example.com
harbor_admin_password: 123456

http:
  port: 80

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

  8、为Harbor重新生成配置文件

#1、为Harbor重新生成配置文件
./prepare

#2、如果Harbor已经运行,则停止并删除现有实例,镜像数据仍然保存在文件系统中
docker-compose down -v

#3、重启harbor
docker-compose up -d

#4、此时可以通过浏览器访问https: https://192.168.56.14/harbor/projects

#5、可以在linux-node4.example.com本机上测试docker登录
docker login linux-node4.example.com

  9、在其他docker机器中配置登录harbor(192.168.56.13)

mkdir -p /etc/docker/certs.d/linux-node4.example.com/
scp -r root@192.168.56.14:/home/work/harbor/ssl/linux-node4.example.com.cert /etc/docker/certs.d/linux-node4.example.com/
scp -r root@192.168.56.14:/home/work/harbor/ssl/linux-node4.example.com.key /etc/docker/certs.d/linux-node4.example.com/
scp -r root@192.168.56.14:/home/work/harbor/ssl/ca.crt /etc/docker/certs.d/linux-node4.example.com/
vi /usr/lib/systemd/system/docker.service # 添加--insecure-registry 192.168.56.14 '''''' ExecStart=/usr/bin/dockerd --insecure-registry 192.168.56.14 ''''''
systemctl restart docker.service # 重启docker

 

 

 

 

 

 

 

 

 111111

 

 

 

 

 

 

 

 

 

 

1111111111111111

Centos7安装Docker镜像仓库Harbor1.5.3、harbor垃圾回收(物理删除)

Centos7安装Docker镜像仓库Harbor1.5.3、harbor垃圾回收(物理删除)

Harbor 详细介绍

Harbor安装指南
Harbor官网配置CA认证
Kubernetes Harbor安装教程

1、容器应用的开发和运行离不开可靠的镜像管理。从安全和效率等方面考虑,部署在私有环境内的 Registry 是非常必要的。

2、Harbor 是由 VMware 公司中国团队为企业用户设计的 Registry server 开源项目,包括了权限管理(RBAC)、LDAP、审计、管理界面、自我注册、HA 等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能,欢迎使用和反馈意见。

3、作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全。提升用户使用 Registry 构建和运行环境传输镜像的效率。Harbor 支持安装在多个 Registry 节点的镜像资源复制,镜像全部保存在私有 Registry 中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor 也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。

1)基于角色的访问控制

用户与 Docker 镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。

2)镜像复制

镜像可以在多个 Registry 实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。

4)AD/LDAP 支持

Harbor 可以集成企业内部已有的 AD/LDAP,用于鉴权认证管理。

5)审计管理

所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。

6)国际化

已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。

7)RESTful API

RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。

8)部署简单

提供在线和离线两种安装工具, 也可以安装到 vSphere 平台(OVA 方式)虚拟设备

 

Harbor 架构介绍

Harbor在架构上主要由五个组件构成:

1、Proxy:

Harbor的registry, UI, token等服务,通过一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端不同的服务。

2、Registry:

负责储存Docker镜像,并处理docker push/pull 命令。由于我们要对用户进行访问控制,即不同用户对Docker image有不同的读写权限,Registry会指向一个token服务,强制用户的每次docker pull/push请求都要携带一个合法的token, Registry会通过公钥对token 进行解密验证。

3、Core services:

这是Harbor的核心功能,主要提供以下服务:

1)UI:提供图形化界面,帮助用户管理registry上的镜像(image), 并对用户进行授权。

2)webhook:为了及时获取registry 上image状态变化的情况, 在Registry上配置webhook,把状态变化传递给UI模块。

3)token 服务:负责根据用户权限给每个docker push/pull命令签发token. Docker 客户端向Regiøstry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向Registry进行请求。

4、Database:

为core services提供数据库服务,负责储存用户权限、审计日志、Docker image分组信息等数据。

5、Log collector:

为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。
各个组件之间的关系如下图所示:

 

实验环境:

系统版本:centos7x3.10.0-514.el7.x86_64

Docker版本:1.13.1(yum安装)

harbor版本:harbor-offline-installer-v1.5.3.tgz(离线版)

注:由于Harbor是基于Docker Registry V2版本,所以就要求Docker版本不小于1.10.0,Docker-compose版本不小于1.6.0。

关闭防火墙并禁止开机自启

systemctl stop firewalld.service
systemctl disable firewalld

关闭selinux

sed -i ''s/SELINUX=enforcing/SELINUX=disabled/g'' /etc/sysconfig/selinux

修改主机名

vi /etc/hostname
harbor.123.com

域名绑定IP

vi /etc/hosts
192.168.152.170 harbor.123.com

重启 reboot

 

【温馨提示:上面标红几个步骤一定要注意设置了,否则后面会访问不通】

插播一条排查问题的方法,如果访问不通,可以安装nmap,检查下服务器露出的都有哪些端口

#安装nmap
yum -y install nmap
#该ip露出的端口
nmap 43.55.42.25

如果关了前面的防火墙,则会露出443

 

安装harbor(IP:192.168.152.170)

1、安装harbor依赖环境

1)安装docker

yum -y install docker

注:建议安装最新稳定版docker!

 

2)安装docker-compose

yum -y install docker-compose

注:如果安装不上就先安装epel-release源,然后安装docker-compose!

 

3)依赖软件安装

yum install -y yum-utils device-mapper-persistent-data lvm2

 

2、下载离线安装包harbor-offline-installer-v1.5.3.tgz

1)使用下载命令wget或者aria2c下载harbor

wget https://storage.googleapis.com/harbor-releases/harbor-offline-installer-v1.5.3.tgz

注:因为我这里网络不太好所以使用aria2c下载的,以上截图表示下载成功!

 

2)解压harbor到本地

tar zxf harbor-offline-installer-v1.5.3.tgz

 

3)将解压目录移动到/data目录

//创建harbor数据存储目录

mkdir /data

注:可能有的童鞋不太理解这一步的意思,简单来说就是harbor默认的数据存储目录就是/data目录,所以我先创建好,并将harbor解压目录移动到这里,当然如果不创建,后期启动harbor时也会自动创建的!

//移动harbor解压目录

mv harbor /data/

注:这一步操作是为了方便管理和防止误删除(可做可不做)!

 

【我本人不喜欢 /data 目录,很乱,对Harbor默认的数据存储路径从 /data 调整为  /data/harbor-data了,相当于所有后面执行官了./install.sh 生成的文件统一放在指定路径管理】

调整Harbor默认数据存储路径,修改内容如下:

1.harbor.cfg

修改"secretkey"的路径

#The path of secretkey storage
secretkey_path = /data/harbor-data # 默认是 /data

2.docker-compose.yml

修改原先所有默认为"/data"的volume的挂载路径

version: ''2''
services:
  log:
    image: goharbor/harbor-log:v1.6.1
    container_name: harbor-log 
    restart: always
    volumes:
      - /var/log/harbor/:/var/log/docker/:z
      - ./common/config/log/:/etc/logrotate.d/:z
    ports:
      - 127.0.0.1:1514:10514
    networks:
      - harbor
  registry:
    image: goharbor/registry-photon:v2.6.2-v1.6.1
    container_name: registry
    restart: always
    volumes:
      - /data/harbor-data/registry:/storage:z
      - ./common/config/registry/:/etc/registry/:z
    networks:
      - harbor
    environment:
      - GODEBUG=netdns=cgo
    depends_on:
      - log
    logging:
      driver: "syslog"
      options:  
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "registry"
  postgresql:
    image: goharbor/harbor-db:v1.6.1
    container_name: harbor-db
    restart: always
    volumes:
      - /data/harbor-data//database:/var/lib/postgresql/data:z
    networks:
      - harbor
    env_file:
      - ./common/config/db/env
    depends_on:
      - log
    logging:
      driver: "syslog"
      options:  
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "postgresql"
  adminserver:
    image: goharbor/harbor-adminserver:v1.6.1
    container_name: harbor-adminserver
    env_file:
      - ./common/config/adminserver/env
    restart: always
    volumes:
      - /data/harbor-data/config/:/etc/adminserver/config/:z
      - /data/harbor-data/secretkey:/etc/adminserver/key:z
      - /data/harbor-data/:/data/:z
    networks:
      - harbor
    depends_on:
      - log
    logging:
      driver: "syslog"
      options:  
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "adminserver"
  ui:
    image: goharbor/harbor-ui:v1.6.1
    container_name: harbor-ui
    env_file:
      - ./common/config/ui/env
    restart: always
    volumes:
      - ./common/config/ui/app.conf:/etc/ui/app.conf:z
      - ./common/config/ui/private_key.pem:/etc/ui/private_key.pem:z
      - ./common/config/ui/certificates/:/etc/ui/certificates/:z
      - /data/harbor-data/secretkey:/etc/ui/key:z
      - /data/harbor-data/ca_download/:/etc/ui/ca/:z
      - /data/harbor-data/psc/:/etc/ui/token/:z
    networks:
      - harbor
    depends_on:
      - log
      - adminserver
      - registry
    logging:
      driver: "syslog"
      options:  
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "ui"
  jobservice:
    image: goharbor/harbor-jobservice:v1.6.1
    container_name: harbor-jobservice
    env_file:
      - ./common/config/jobservice/env
    restart: always
    volumes:
      - /data/harbor-data/job_logs:/var/log/jobs:z
      - ./common/config/jobservice/config.yml:/etc/jobservice/config.yml:z
    networks:
      - harbor
    depends_on:
      - redis
      - ui
      - adminserver
    logging:
      driver: "syslog"
      options:  
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "jobservice"
  redis:
    image: goharbor/redis-photon:v1.6.1
    container_name: redis
    restart: always
    volumes:
      - /data/harbor-data/redis:/var/lib/redis
    networks:
      - harbor
    depends_on:
      - log
    logging:
      driver: "syslog"
      options:  
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "redis"
  proxy:
    image: goharbor/nginx-photon:v1.6.1
    container_name: nginx
    restart: always
    volumes:
      - ./common/config/nginx:/etc/nginx:z
    networks:
      - harbor
    ports:
      - 80:80
      - 443:443
      - 4443:4443
    depends_on:
      - postgresql
      - registry
      - ui
      - log
    logging:
      driver: "syslog"
      options:  
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "proxy"
networks:
  harbor:
    external: false

改完后可通过grep检查下是否都改全了

cat docker-compose.yml | grep harbor-data

完成上述修改后执行下述命令重新部署容器即可:

./prepare
docker-compose up -d

 

//创建CA证书存放目录

mkdir /data/cert

注:可以在这个目录里创建证书!

 

创建CA证书

1、创建CA的证书

//进入存放证书目录

cd /data/cert/

//创建自己的CA证书

openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt

注:因为出于安全的考虑,所以强烈建议搭建基于https的harbor,那么就需要添加ca证书!

 

2、生成CA证书签名请求

openssl req -newkey rsa:4096 -nodes -sha256 -keyout harbor.123.com.key -out harbor.123.com.csr

 

3、生成注册主机的证书

方式一:使用域名生成注册主机证书

openssl x509 -req -days 365 -in harbor.123.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out harbor.123.com.crt

注:以上这步操作是和wangfeiyu.com.csr在同一目录操作的,如果不在同一目录,需要写绝对路径,否则可能会报错!

 

方式二:使用IP生成注册主机证书

//echo subjectAltName = IP:192.168.152.170 > extfile.cnf

//openssl x509 -req -days 365 -in wangfeiyu.com.csr -CA ca.crt -CAkey

ca.key -CAcreateserial -extfile extfile.cnf -out harbor.123.com.crt

注:执行以上两条命令即可实现IP注册主机证书!

 

4、编辑harbor配置文件

编辑harbor.cfg文件

vi /data/harbor/harbor.cfg
#hostname设置访问地址。可以使用ip、域名、主机名,不可以设置为127.0.0.1或localhost。(如果部署的是备份库,填写ip而不是域名,否则会导致仓库管理连接失败,host无法识别原因不明)
hostname = harbor.123.com
#访问协议。默认是http,如果搭建https的仓库就改为https。
ui_url_protocol = https
#可选的https证书配置地址 
ssl_cert = /root/cert/bakreg.cn.crt 
ssl_cert_key = /root/cert/bakreg.cn.key
#用于在复制策略中加密或解密远程注册表的密码的密钥路径。secretkey_path不需要修改。如果必须修改它,你需要在/root/harbor/docker-compose.yml中手动调整路径,因为它们是硬编码。
secretkey_path = /data
#邮件设置,发送重置密码邮件时使用 
#email_identity作为用户名
email_identity = 
email_server = 邮箱的smtp服务器域名
email_server_port = 25
email_username = 
email_password = 
email_from = 
email_ssl = false
email_insecure = false
#管理员admin的登录密码。默认是Harbor12345
harbor_admin_password = Harbor12345
#认证方式。默认是db_auth,支持多种认证方式,如数据库认证(db_auth)、LADP(ldap_auth)。
auth_mode = db_auth
#LDAP认证时配置项(这项可以登录后配置也可以)。
ldap_url = # LDAP URL
ldap_searchdn = # LDAP 搜索DN
ldap_search_pwd = # LDAP 搜索DN的密码
ldap_basedn = # LDAP 基础DN
ldap_filter = # LDAP 过滤器
ldap_uid = # LDAP 用户uid的属性
ldap_scope = 2
ldap_timeout = 5
#是否开启注册。on开启,off关闭。
self_registration = off
#Token有效时间。默认30分钟。
token_expiration = 30
#标记用户创建项目权限控制。默认是everyone(允许所有人创建),也可以设置为adminonly(只能管理员才能创建)
project_creation_restriction = everyone

注:暂时先更改这几行即可启动,其他功能按照需求更改!

 

5、启动harbor服务

1)启动docker并设置开机自启

systemctl start docker
systemctl enable docker

2)进入harbor解压目录

cd /data/harbor/

3)安装harbor

./install.sh

注:以上截图说明harbor的https协议加密成功!

 

3)harbor的启动和关闭方式

//关闭harbor服务(先进入harbor目录)

docker-compose stop

//开启harbor服务(先进入harbor目录)

docker-compose up -d

 

6、验证harbor服务是否正常运行(建议使用Firefox浏览器测试)

1)访问地址:https://harbor.123.com

注:有童鞋可能不理解为啥不用IP地址访问,因为我们是针对域名做的https证书,所以只能使用域名访问才能使用自签的证书!但是问题又来了,为啥浏览器会这样呢?原因是windows没有针对这个域名做域名解析,怎么才能让他访问到呢?

设置方式:(windows系统)

//打开windows路径

C:\Windows\System32\drivers\etc

//点击这个特殊的hosts文件,并用记事本方式打开

注:将harbor服务器的域名和IP记录到windows系统中,即可实现域名访问网页!

 

2)再访问这个地址:https://harbor.123.com

注:以上截图访问方式使用的是https加密访问但是需要我们将证书导入浏览器才行!

导入方式:

//点击高级

//点击添加列外

//点击确认安全列外

注:以上截图已经可以访问到网页,说明nginx加密成功或者证书导入成功!其他的浏览器导入证书方式不一样,但是超级简单,自行百度即可!

3)使用默认用户密码登陆

//输入用户名密码

注:默认的用户名admin,密码Harbor12345。

//点击登陆

 

Harbor服务端上传下载镜像

1、创建普通上传镜像用户

注:创建用户时按照密码复杂要求设置密码!

 

2、harbor服务器本地登陆

docker login harbor.123.com

报错:Error response from daemon: Get https://harbor.123.com/v1/users/: x509: certificate signed by unknown authority

解决方式

1、centos7系统以上报错的原因是因为自签的证书没有加入到系统级别信任,只需要将harbor.123.com.crt拷贝到/etc/pki/ca-trust/source/anchors/reg.你的域名.crt,然后需要执行命令update-ca-trust,最后重启harbor和docker即可!

cp harbor.123.com.crt /etc/pki/ca-trust/source/anchors/reg.harbor.123.com.crt

2、ubunt16.04系统以上报错的原因是因为自签的证书没有加入到系统级别信任,只需要将harbor.123.com.crt拷贝到/usr/local/share/ca-certificates/reg.你的域名.crt,然后执行命令update-ca-certificates,最后重启harbor和docker即可!

 

3、为镜像打标记

docker tag 原镜像名 harbor.123.com /项目名/打标记的镜像名

注:如果是普通用户推送镜像,切记需要创建项目,不然上传给默认的library项目没有权限,只有admin用户有推送library项目的权利。

 

4、推送镜像到harbor仓库

//先登录镜像库

docker login harbor.123.com
Username: admin
Password:

//推送镜像到仓库

docker push harbor.123.com/library/tomcat:v1

注:如果是普通用户推送镜像,那么以上的library项目名换成自己的项目名即可!

假设建的用户为,helen,则需要在仓库新建一个名为 helen 的项目,否则会推送失败

 

5、拉取镜像

//删除打标记的镜像

docker rmi -f harbor.123.com/library/tomcat:v1

//拉取仓库的tomcat镜像

docker pull 镜像的完整路径

注:可能有童鞋会说,如果不知道怎么填写完整路径怎么办,也不知道怎么下载镜像的,那么就登录上网页harbor,然后点击你要下载的那个镜像后边pull命令提醒,例如:

 

6、docker退出harbor登陆

docker logout harbor的域名

 

Harbor客户端上传下载镜像

由于通过openssl创建的是不可信的,直接拉取或登录时会报“x509: certificate signed by unknown authority”,故需要让客户机信任该证书。

1、从CA服务器将证书拷贝到客户端/root/目录下

scp /data/cert/harbor.123.com.crt root@192.168.152.91:/root/

 

2、客户端将证书追加到自己的ca-bundle.crt认证文件中

cat harbor.123.com.crt >> /etc/pki/tls/certs/ca-bundle.crt

 

3、客户端/etc/hosts文件里追加服务端的IP和域名

echo "192.168.152.170 harbor.123.com" >>/etc/hosts

 

4、关闭harbor服务

//进入harbor目录

cd /data/harbor/

//关闭harbor服务

docker-compose stop

 

5、重启docker

systemctl restart docker

 

6、启动harbor服务

//进入harbor目录

cd /data/harbor/

//启动harbor服务

docker-compose up –d

 

7、docker登陆harbor

docker login harbor.123.com

注:废话就不多说了,其他的打标记、上传、下载,方式都一样!

 

8、相关问题

Error: Status 404 trying to push repository test/app: "{\"timestamp\":1555033311968,\"status\":404,\"error\":\"Not Found\",\"message\":\"No message available\",\"path\":\"/v1/repositories/test/app/\"}"

这个问题,需要重新对前端页面和后台配置,做https证书

 

案例:普通Linux客户端应该怎么做才能从Harbor服务器拉去镜像?

需要两步:

1、vi /etc/hosts 新增Harbor服务器的ip和域名的配置

2、解决前面说的509问题

Error response from daemon: Get https://hub.**.cn/v1/users/: x509: certificate signed by unknown authority

处理方法:

[root@test cert]# cat hub.***.cn.crt >> /etc/pki/tls/certs/ca-bundle.crt
[root@test cert]# systemctl restart docker
[root@test cert]# docker login hub.***.cn
Username: xxx
Password: 
Login Succeeded

 

Harbor垃圾回收(物理删除)

无论通过接口或者web界面删除镜像,都只是软删除,虽然查询不到,但是镜像文件还是保存在磁盘上,因此需要通过以下方法进行垃圾回收,清理释放磁盘

#进入导harbor yaml文件所在目录
cd /usr/local/src/harbor 
#停止harbor
docker-compose stop 
#使用清理镜像进行垃圾回收
#使用--dry-run 参数进行预览,不使用则进行清理
docker run -it --name gc --rm --volumes-from registry vmware/registry:1.5.3-photon garbage-collect  /etc/registry/config.yml 
#重新启动harbor
docker-compose start 

建议的方法是,先在web界面全部删除,然后再执行上面gc的方法

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

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

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

DOCKER 08:搭建本地镜像仓库 Harbor

DOCKER 08:搭建本地镜像仓库 Harbor

@H_301_0@

@H_301_0@docker 本身的 docker  hub 我们下载很慢,于是有了国内的阿里云,中科大等提供的镜像下载。

@H_301_0@但这同样还是受到了本地网络限制,而且对于一个公司而言,代码肯定不好随意放到云上面,于是便有了 docker 仓库的私有化。

@H_301_0@docker 本身是提供了一个 registry 的容器的,但是并不好用,比如没用网页访问查看,权限管理等。

@H_301_0@于是又有了基于 registry 的 harbor 私有仓库,本文主要谈谈如何搭建公司自己的私有仓库。

@H_301_0@ 

@H_301_0@ 

安装部署 Harbor

@H_301_0@ 

@H_301_0@为了更快安装 Harbor,一般采用下载离线安装包的方式:

@H_301_0@http://harbor.orientsoft.cn/

@H_301_0@我们这里采用当前的最新版:v1.5.0,准备了一台 CentOS 7.5 的虚拟机。

@H_301_0@1. 安装 docker:

@H_301_0@https://www.cnblogs.com/Dy1an/p/12358044.html

@H_301_0@ 

@H_301_0@2. 安装 docker-compose:

@H_301_0@https://www.cnblogs.com/Dy1an/p/12371406.html

@H_301_0@ 

@H_301_0@3. 由于这里只是测试环境,所以使用自签名的 HTTPS 证书,对于公司而言一般拥有自己的证书,可以少掉这一步生成证书的过程:

# 创建目录
mkdir -p /data/cert/
cd /data/cert/

# 创建证书
openssl genrsa -des3 -out hub.dylan.com.key 2048
openssl req -new -key hub.dylan.com.key -out hub.dylan.com.csr
cp hub.dylan.com.key hub.dylan.com.key.org

# 取消密码
openssl rsa -in hub.dylan.com.key.org -out hub.dylan.com.key
openssl x509 -req -days 3650 -in hub.dylan.com.csr -signkey hub.dylan.com.key -out hub.dylan.com.crt
@H_301_0@结果如图:

@H_301_0@

@H_301_0@注意事项:我这里测试的域名是 hub.dylan.com,所以我生成的证书名字也是这个。

@H_301_0@最后会生成如下文件:

@H_301_0@

@H_301_0@ 

@H_301_0@4. 配置安装配置文件:

tar -zxf harbor-offline-installer-v1.5.0.tgz 
cd harbor/
vim harbor.cfg
@H_301_0@主要修改配置如下:

# 域名
hostname = hub.dylan.com
# 协议
ui_url_protocol = https
# 证书
ssl_cert = /data/cert/hub.dylan.com.crt
ssl_cert_key = /data/cert/hub.dylan.com.key
# 初始密码
harbor_admin_password = 123456
@H_301_0@修改完成后执行安装脚本:

./install.sh
@H_301_0@直到自动安装完成:

@H_301_0@

@H_301_0@查看运行的容器:

@H_301_0@

@H_301_0@ 

@H_301_0@5. 访问测试:

@H_301_0@由于域名是我们自己随便起的,所以需要自己电脑的 host 文件增加这个解析:C:\Windows\System32\drivers\etc

192.168.200.104   hub.dylan.com
@H_301_0@访问:

@H_301_0@

@H_301_0@ 

@H_301_0@到此  Harbor 安装完成!

@H_301_0@ 

关于Docker 镜像仓库 Harbor 之搭建及配置docker配置镜像仓库地址的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于03: 使用docker搭建Harbor私有镜像仓库、Centos7安装Docker镜像仓库Harbor1.5.3、harbor垃圾回收(物理删除)、CentOS7部署Docker-Harbor1.10.0镜像仓库、DOCKER 08:搭建本地镜像仓库 Harbor等相关内容,可以在本站寻找。

本文标签: