zoukankan      html  css  js  c++  java
  • centos7 部署镜像仓库 harbor

    ===============================================

     2018/4/16_第2次修改                       ccb_warlock

     

    更新说明:

    2018/4/16:在4.3中增加后台启动容器以实现harbor开机自启的内容;

    ===============================================

    最近一直在用docker容器相关的东西,经常需要使用迁移镜像,在没有私有的镜像仓库前,需要到docker hub上创建用户还要设置镜像加速。

    于是先用registry搭建了一个仓库,但是使用的时候发现下面的几个问题:

    1.没有界面(这个不排除我的使用方法不对,我只能用url看镜像的信息);

    2.配置之后是http的,在json配置后只能使用1个私有库(如果私有库有多个的情况下得来回改配置文件,太麻烦);

     

    因为存在上面2个问题,使得我不得不查找更合理的镜像仓库,由于之前看《京东基础架构建设之路》时看到jdos 2.0的持续集成时使用harbor作为镜像仓库,于是尝试部署了harbor发现其功能确实能满足目前对镜像仓库的需求。

     


     一、基础设置

     1.1 安装vim、wget

    yum install -y vim wget

     1.2 卸载home、扩大root

     如果考虑镜像仓库是给研发团队使用,需要配置较大容量的,因为centos安装是默认只给root目录配置50G的空间。

     可以根据我之前的笔记(http://www.cnblogs.com/straycats/p/7769105.html),扩大root空间。

     

     1.3 关闭防火墙

     内部镜像库使用,为了部署方便直接关了防火墙。

    systemctl stop firewalld
    systemctl disable firewalld

     1.4 增加域名解析

     ps.由于基于https的harbor需要使用域名,故本次部署的harbor域名为bakreg.cn

     # 修改host文件 

    vim /etc/hosts

     # 修改下面的内容,wq保存。 

    127.0.0.1   localhost bakreg.cn localhost4 localhost4.localdomain4

     1.5 设置主机名

     # 这里将主机名设置和内部域名一样。

    hostnamectl --static set-hostname bakreg.cn

     

     1.6 重启OS

    reboot

      


     二、安装docker、docker-compose

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

     

     2.1 安装docker

    yum install -y docker

     2.2 设置docker镜像加速

     墙的缘故,访问docker hub不够稳定,故需要设置镜像加速器来解决这个问题。
     这里使用的是阿里云的镜像加速器。登录阿里云后,访问https://cr.console.aliyun.com/#/accelerator

     2.3 启动、开机启动docker 

    systemctl start docker
    systemctl enable docker

     2.4 安装epel 

    yum install -y epel-release

     2.5 安装pip 

    yum install -y python-pip

     2.6 安装docker-compose 

    pip install docker-compose

     2.7 查看版本 

    docker --version
    docker-compose --version

      


     三、添加CA证书

     ps.如果需要搭建基于https的harbor需要添加ca证书,如果搭建的是基于http可以跳过该步骤。

     

     # 创建目录/root/cert/ 

    mkdir -p /root/cert/

     # 进入目录/root/cert/ 

    cd /root/cert/

     # 生成证书请求文件csr(域名bakreg.cn自行修改) 

    openssl req -nodes -subj "/CN=bakreg.cn" -newkey rsa:2048 -keyout bakreg.cn.key -out bakreg.cn.csr

     # 生成有效期10年的CA证书crt 

    openssl x509 -req -days 3650 -in bakreg.cn.csr -signkey bakreg.cn.key -out bakreg.cn.crt 

     # 获取CA私钥srl 

    openssl x509 -req -in bakreg.cn.csr -CA bakreg.cn.crt -CAkey bakreg.cn.key -CAcreateserial -out bakreg.cn.crt -days 10000

      


     四、部署harbor

     4.1 获取安装包

      官方(https://github.com/vmware/harbor/releases)提供了2种部署包(在线、离线),我选了在线安装包(配了docker加速的情况下,在线包下载镜像的时间要比离线包快很多)。

     

      # 下载在线安装包(下载地址根据官网自行选择,我部署的时候最新是1.4.0)

    cd
    wget https://storage.googleapis.com/harbor-releases/release-1.4.0/harbor-online-installer-v1.4.0.tgz

      # 解压 

    tar xvf harbor-online-installer-v1.4.0.tgz

     4.2 修改配置文件

     # 编辑harbor.cfg

    vim /root/harbor/harbor.cfg

     # /root/harbor/harbor.cfg文件是Harbor的配置文件,下面列一些可能会修改的项(下面的配置是基于https的harbor,因为https配置后只要在客户机添加证书和域名解析,可以连接多个镜像仓库;如果是http,daemon.json里配置后只能连接一个自己的私有仓库)。

    ## Configuration file of Harbor
    
    # hostname设置访问地址。可以使用ip、域名、主机名,不可以设置为127.0.0.1或localhost。(如果部署的是备份库,填写ip而不是域名,否则会导致仓库管理连接失败,host无法识别原因不明)
    hostname = bakreg.cn
    
    # 访问协议。默认是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

     4.3 harbor启动、开机启动

    cd /root/harbor
    ./install.sh

    由于使用了docker-compose,可以使用后台启动的方式来实现harbor的开机启动功能。

    cd /root/harbor

    # 停止容器

    docker-compose stop

    # 后台启动容器

    docker-compose up -d

      


     五、登录

     由于服务部署在192.168.3.1,可以根据IP直接访问。

     http访问web:http://192.168.3.1

     https访问web:https://192.168.3.1

     使用管理员(admin)登录(没有修改harbor_admin_password的话,密码是Harbor12345)。

      


     六、向基于http的harbor上传下载镜像

     6.1 客户机配置

     Docker从1.3.X之后,与docker registry交互默认使用的是https,然而harbor只提供http服务。为了解决这个问题需要在启动docker时增加启动参数为默认使用http访问。

     这里提供2种可行的操作。

     1)修改daemon.json

      # 编辑daemon.json 

    vim /etc/docker/daemon.json

     # 添加下面的内容,wq保存。 

    {
      "insecure-registries":["192.168.3.1"]
    }

     # 重启docker 

    systemctl restart docker

     2)修改docker.service

     # 编辑docker.service 

    vim /usr/lib/systemd/system/docker.service

     # 添加下面的内容,wq保存。 

    在“ExecStart=”中添加
    --insecure-registry 192.168.3.1 

     # 重新载入systemd 

    systemctl daemon-reload

     # 重启docker 

    systemctl restart docker 

     6.2 上传下载镜像

     # docker登录harbor

    docker login 192.168.3.1

     # 标记镜像nginx:v1为192.168.3.1/你的用户名/nginx:v1 

    docker tag nginx:v1 192.168.3.1/你的用户名/nginx:v1

     # 推送镜像到harbor 

    docker push 192.168.3.1/你的用户名/nginx:v1

     # 拉取镜像

    docker pull 192.168.3.1/你的用户名/nginx:v1

     # docker退出登录harbor

    docker logout 192.168.3.1

     七、向基于https的harbor上传下载镜像

     7.1 客户机配置

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

     将192.168.3.1中的/root/cert/bakreg.cn.crt迁移到客户机的/root目录中。

     

     # 将bakreg.cn的证书追加到客户机的证书库中 

    cat /root/bakreg.cn.crt >>/etc/pki/tls/certs/ca-bundle.crt

     # 重启docker

    systemctl restart docker

     # 修改客户机的hosts

    vim /etc/hosts

     # 增加下面的内容,wq保存。

    192.168.3.1 bakreg.cn

     7.2 上传下载镜像 

     # docker登录harbor

    docker login bakreg.cn

     # 标记镜像nginx:v1为bakreg.cn/你的用户名/nginx:v1 

    docker tag nginx:v1 bakreg.cn/你的用户名/nginx:v1

     # 推送镜像到harbor 

    docker push bakreg.cn/你的用户名/nginx:v1

     # 拉取镜像

    docker pull bakreg.cn/你的用户名/nginx:v1

     # docker退出登录harbor

    docker logout bakreg.cn

      


     参考资料:

     1. http://blog.csdn.net/aixiaoyang168/article/details/73549898

     2. https://github.com/vmware/harbor/blob/master/docs/installation_guide.md

     3. http://www.bubuko.com/infodetail-1524567.html

     4. https://github.com/vmware/harbor/issues/2208

     5. http://blog.51cto.com/aaronsa/1897891

     6. https://github.com/vmware/harbor/blob/master/docs/configure_https.md

     7. http://dockone.io/question/376

  • 相关阅读:
    jQuery 往table添加新内容有以下四个方法:
    Postgresql 截取字符串
    如何取得select结果数据集的前10条记录。postgresql
    postgreSQL除法保留小数
    Java面试——微服务
    Vue面试中,经常会被问到的面试题/Vue知识点整理
    Java面试之五大框架的理解
    Session共享的四种方法
    ES6参考---三点运算符实质
    VUE实例课程---40、counter实例
  • 原文地址:https://www.cnblogs.com/straycats/p/8850693.html
Copyright © 2011-2022 走看看