一、准备一台Linux主机
我用了一台VMware虚拟机,配置如下:
IP:192.168.1.79
安装时注意一定要将最大的空间分给/data,因为Harbor默认会使用这个分区
官网硬件要求
1、开SSH
systemctl enable sshd
2、关闭SELINUX
vi /etc/sysconfig/selinux
修改下边红字部分
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
3、安装rz
yum -y install lrzsz
之后上传文件一定要用-be参数(其中-b是--binary用二进制的方式上传,-e是--escape强制escape所有控制字符),否则上传的文件不完整
rz –be
4、安装wget
yum -y install wget
5、更换yum源,用于提速yum
(1)备份yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
(2)下载新的CentOS-Base.repo 到/etc/yum.repos.d/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
清理缓存
yum clean all
重新生成缓存
yum makecache
6、关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
二、安装Harbor
官网教程:https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md
1、安装必须的组件
官网软件要求见下,实际安装最新版本即可
安装python
CentOS7默认自带已安装好
安装docker
由于Docker已分为社区版和企业版,要装最新版本只能选择社区版,所以不要直接用yum install docker –y安装,否则安装的是旧版的Docker
(1)安装所需的软件包 yum-utils、device-mapper-persistent-data和 lvm2
yum remove docker-latest-logrotate docker-logrotate docker-selinux dockdocker-engine
yum install -y yum-utils device-mapper-persistent-data lvm2
(2)国内部分用户可能无法连接docker官网提供的源,这里提供阿里云的镜像节点供测试使用
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
rpm --import http://mirrors.aliyun.com/docker-ce/linux/centos/gpg
yum makecache fast
yum -y install docker-ce
启动docker和检查运行状态
systemctl start docker
systemctl status docker
将服务加入到启动项
systemctl enable docker
查看版本
安装docker-compose
编译安装pip
https://pypi.org/project/setuptools/
yum install unzip -y
unzip setuptools-40.4.3.zip
cd setuptools-40.4.3
python setup.py install
https://pypi.org/project/pip/
tar -xf pip-18.1.tar.gz
cd pip-18.1
python setup.py install
加速pip
cd ~
mkdir .pip
ls ~/.pip
vi ~/.pip/pip.conf
写入
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
pip安装docker-compose
pip install docker-compose
pip install --upgrade docker-compose
查看版本
docker-compose -v
2、安装Harbor
(1)从这里下载:https://github.com/goharbor/harbor/releases。PS:不×××无法下载
一定要下载offline离线安装包:https://storage.googleapis.com/harbor-releases/harbor-offline-installer-v1.6.1.tgz
(2)解压
tar xvf harbor-offline-installer-v1.6.1.tgz
移动解压后的harbor目录到/data/app/,因为/data分区是划分出来的
mv harbor /data/app/
(3)编辑vi harbor.cfg文件
cd /data/app/harbor
cp harbor.cfg harbor.cfg.bak
vi harbor.cfg
内容:
hostname = 192.168.1.79
ui_url_protocol = http
max_job_workers = 10
customize_crt = off
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key
secretkey_path = /data
admiral_url = NA
log_rotate_count = 50
log_rotate_size = 200M
http_proxy =
https_proxy =
no_proxy = 127.0.0.1,localhost,ui,registry
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
email_insecure = false
harbor_admin_password = *******
auth_mode = ldap_auth
self_registration = off
token_expiration = 60
project_creation_restriction = everyone
db_host = postgresql
db_password = root123
db_port = 5432
db_user = postgres
redis_host = redis
redis_port = 6379
redis_password =
redis_db_index = 1,2,3
clair_db_host = postgresql
clair_db_password = root123
clair_db_port = 5432
clair_db_username = postgres
clair_db = postgres
clair_updaters_interval = 12
uaa_endpoint = uaa.mydomain.org
uaa_clientid = id
uaa_clientsecret = secret
uaa_verify_cert = true
uaa_ca_cert = /path/to/ca.pem
registry_storage_provider_name = filesystem
registry_storage_provider_config =
registry_custom_ca_bundle =
解释:
原来没注释的参数不要注释掉,否则下边一步不通过。留默认即可
hostname:配置主机名称,不可以设置127.0.0.1,localhost这样的主机名,可以是IP或者域名
ui_url_protocol:指定使用HTTP协议还是HTTPS协议
Email settings:邮箱设置,option配置,只在首次启动生效,可以登陆UI后修改
harbor_admin_password:设置管理员的初始密码,只在第一次登录时使用
auth_mode:用户认证模式,默认是db_auth,也可以使用ldap_auth验证。
db_password:使用db需要指定连接数据库的密码
self_registration:是否允许自行注册用户,默认是on,新版本可以在图形界面中修改。
max_job_workers:最大工作数,默认是10个
customize_crt:是否为token生成证书,默认为on
ssl_cert:nginx cert与key文件的路径, 只有采用https协议是才有意义
ssl_cert:nginx cert与key文件的路径, 只有采用https协议是才有意义
secretkey_path:The path of secretkey storage
admiral_url:Admiral's url, comment this attribute, or set its value to NA when Harbor is standalone
clair_db_password:未启用calir服务,但解压目录下的"./prepare"文件中要检查以下相关参数配置,不能注释,否则环境准备检查不能通过,报"ConfigParser.NoOptionError: No option u'clair_db_password' in section: u'configuration' "相关错误;或者在"./prepare"中注释相关检查与定义,但需要注意,文件中的关联太多,推荐修改"harbor.cfg"文件即可
ldap_url:ladp相关设置,如未采用ldap认证,但解压目录下的"./prepare"文件中要检查以下相关参数配置,不能注释,否则环境准备检查不能通过,报"ConfigParser.NoOptionError: No option u'ldap_timeout' in section: u'configuration' "相关错误;或者在"./prepare"中注释相关检查与定义,但需要注意,文件中的关联太多,推荐修改"harbor.cfg"文件即可
ldap_scope:
self_registration:默认开启自注册,off为关闭
token_expiration:token有效时间,默认30minutes
project_creation_restriction:创建项目权限控制,默认是"everyone"(所有人),可设置为"adminonly"(管理员)
verify_remote_cert:与远程registry通信时是否采用验证ssl
其他使用默认值
(4)确认无误后,使用./install.sh命令开始安装
4、启动和停止(必须在docker-compose.yml目录下运行命令,如/data/app/Harbor目录)
停止Harbor
docker-compose stop
启动Harbor
docker-compose start
5、登录测试
http://192.168.1.79
初始密码:admin/Harbor12345
登录后的页面
使用普通用户登录后创建一个新项目
项目名称:sonarqube-xywg
创建完毕
6、上传镜像
在需要上传镜像的服务器上修改docker仓库连接方式为http,否则默认https无法连接。这里以192.168.1.155上我修改的sonarqube镜像为例
vi /etc/docker/daemon.json
加入
{
"insecure-registries" : ["192.168.1.79"]
}
重启Docker生效
systemctl restart docker
重启Docker之前记得先停止所有容器,如果忘了停止容器,则在重启完Docker后使用docker restart <CONTAINER ID>命令启动容器,不要docker rm <CONTAINER ID>,否则容器修改的内容都被删除了
再次登录试试
docker login 192.168.1.79
开始上传操作
docker commit -m 'xywg' 4da3dcf3c046 sonarqube-xywg
docker tag sonarqube-xywg 192.168.1.79/operation/sonarqube-xywg
docker push 192.168.1.79/operation/sonarqube-xywg
特别举例:将Python官方dokcer镜像上传到本地仓库
docker tag docker.io/python:3.7.2 192.168.1.79/public/python:3.7.2
docker push 192.168.1.79/public/python:3.7.2
解释:
docker commit -m 镜像信息 <CONTAINER ID> 新镜像名[:版本号等tag标签]
#从现有容器中生成新镜像
docker tag 源镜像名[:版本号等tag标签] Docker仓库Host/项目名/目标镜像名[:版本号等tag标签]
#改变镜像标签,标记本地镜像是已经被归入Docker仓库的镜像。可以在docker commi的时候直接标记为Docker仓库的镜像
docker push 镜像名[:版本号等tag标签] #将本地的镜像上传到镜像仓库,注意每次push前需docker login 192.168.1.79确认是否已经登录了私有仓库,push后需docker logout 192.168.1.79登出私有仓库。如果push到公共项目必须登录admin账号才可以,如果用了非admin账户push到公共项目会出如下错误:denied: requested access to the resource is denied
不指定版本号等tag标签时,Docker会自动帮我们补上latest的tag。这个latest其实在使用中不是最新的意思,而是默认值(defalut)的意思。
执行结果:
进入Harbor的项目中查看
查看已上传的sonarqube镜像
PS:Harbor有分级概念:
(1)最上边是项目(项目名):实际操作中按照每个不同的项目名称来建项目,交由不同项目的负责人维护
(2)接下来是项目中的镜像仓库(镜像名):镜像仓库中的镜像名按照项目名或者jar包war名来命名,但要求命名一次不能随意更改
(3)最后是仓库中不同版本的镜像(tag版本标签):必须标明版本号,不能空或者用lastest(下图lastest是演示)