zoukankan      html  css  js  c++  java
  • centos 7离线安装harbor

    Harbor介绍

    harbor是一个docker私有镜像仓库,虽然docker官方提供了公共的镜像仓库(Docker Hub),但是从安全和效率等方面考虑,部署私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的Docker Registry管理项目。

    docker官方提供了一个私有镜像仓库 docker Registry,安装部署容易,安装一个Registry容器就可以使用了。

    但是Registry有以下缺点:

    # 没有图形界面

    # 没有项目管理

    # 没有用户权限控制

    # 看不到镜像操作记录
     

    Harbor的优势:

    图形管理界面。

    按项目管理镜像。

    独立的用户管理,不同用户可以操作不同镜像,细粒度的权限控制,包含create、push 、pull、delete。

    镜像管理。

    标签管理。

    操作日志管理。

    【Harbor 安装步骤】:

    第1步:安装harbor前期做准备

    使用harbor要先安装docker及docker-compose, docker及docker-compose安装教程请参考 【centos 7使用国内源安装docker及docker-compose

    docker与docker-compose安装教程地址:https://www.cnblogs.com/yyee/p/12905165.html

    第2步:下载 Harbor离线安装包

    从harbor官网下载离线安装包,下载地址:https://github.com/goharbor/harbor/releases

    下载当前最新版本harbor 1.10.1,离线包大小为658M 。

      下载完离线包之后,将离线安装包【harbor-offline-installer-v1.10.1.tgz】上传到centos服务器。比如将文件上传到 centos的 /tools/harbor/harbor-offline-installer-v1.10.1.tgz 

    第3步,创建https证书

    # 创建证书目录,并赋予权限
    mkdir -p /cert/harbor
    chmod -R 777 /cert/harbor
    cd /cert/harbor
    
    # whereis openssl 检查是否有安装openssl,如果没有先安装openssl组件,如果有就不用安装了
    whereis openssl
    yum install openssl
    
    # 创建服务器证书密钥文件harbor.key
    openssl genrsa -des3 -out harbor.key 2048
    # 输入密码,确认密码,自己随便定义,但是要记住,后面会用到。
    
    # 创建服务器证书的申请文件harbor.csr
    openssl req -new -key harbor.key -out harbor.csr
    # 输入密钥文件的密码, 然后一路回车
    
    # 备份一份服务器密钥文件
    cp harbor.key harbor.key.org
    
    # 去除文件口令
    openssl rsa -in harbor.key.org -out harbor.key
    # 输入密钥文件的密码
    
    # 创建一个自当前日期起为期十年的证书 harbor.crt
    openssl x509 -req -days 3650 -in harbor.csr -signkey harbor.key -out harbor.crt

      

    第4步,解压软件包,修改配置文件

     先进入harbor离线包上传的目录,解压离线包到/usr/local/harbor下

    tar zxf /tools/harbor/harbor-offline-installer-v1.10.1.tgz  -C /usr/local/
    ls /usr/local/harbor

     解压软件包之后有这些文件及目录:

     配置harbor.yml 文件

    vi /usr/local/harbor/harbor.yml

    主要修改以下地方:

    # 将hostname改成本机IP或域名,不要用localhost,127.0.0.10.0.0.0,冒号后面都有一个空格
    hostname: 192.168.0.101
    ui_url_protoc0l: https
    # 将http端口改成10080,因为默认用的80端口已经被占用,http可以指定任意端口 http: port: 10080 # 配置https的端口,只能使用443端口,更改证书路径,证书路径为刚刚生成的https证书的实际路径 https: port: 443 certificate: /cert/harbor/harbor.crt private_key: /cert/harbor/harbor.key # 修改后台管理密码 harbor_admin_password: harbor12345 # harbor的内部数据库密码 database: password: root123 # 修改harbor数据存储路径与日志存储路径,目录要先创建好并赋予777权限 data_volume: /data/harbor-data # 修改日志存放路径,默认路径为/var/log/harbor log: local: localtion: /data/harbor-log

        

     第5步,安装harbor

    执行harbor安装脚本

    cd /usr/local/harbor
    ./install.sh

    安装的时候如果出现下面的异常,是因为关闭防火墙导致,需要重启docker

    ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:  (iptables failed: iptables --wait -t nat -I DOCKER -i br-61f0da3c6876 -j RETURN: iptables: No chain/target/match by that name.

    出现上面这种错误,要重启docker,然后重新安装harbor

    systemctl daemon-reload
    systemctl restart docker.service
    cd /usr/local/harbor 
    ./install.sh

    安装成功后输出下面的信息:

     在浏览器地址输入:https://192.168.0.101:10443,打开harbor登录页面

    用户名:admin,密码:harbor12345

     登录成功后进入后台主页:

       

    第6步,docker信任配置

     要让docker可以访问harbor,需要将harbor域名或IP设置为docker的受信任仓库,修改配置文件 /etc/docker/daemon.json ,增加docker受信任IP或域名。

    vi  /etc/docker/daemon.json

    追加内容:

    {
        "insecure-registries": ["192.168.0.101:10080"]
    }

    拷贝https证书文件harbor.crt到 /etc/docker/certs.d/serverIp 文件夹。每个docker都要拷贝证书文件。

    mkdir –p /etc/docker/certs.d/192.168.0.101
    cp /cert/harbor/harbor.crt  /etc/docker/certs.d/192.168.0.101/ca.crt
    #注意,拷贝过去的证书文件名为 ca.crt 
    

    重启docker

    #重启docker
    systemctl daemon-reload
    systemctl restart docker.service

    重启harbor

    cd /usr/local/harbor
    ./prepare
    docker-compose down
    docker-compose up -d

     第7步,将本地业务镜像push到harbor

    首先在harbor中新建一个项目,项目名称为【eshop】

      用docker登录harbor

    docker login 192.168.0.101:10080
    #输入用户名 admin
    #输入密码

    登录成功输出以下信息: 

    给本地镜像打上tag标记,打标记的时候要加上项目名称

    # docker tag 本地镜像名:版本号 ip:port/项目名称/远程镜像名:版本号,如果不加版本号表示最新版本
    docker tag demo1.mvcone:v1.0.1 192.168.0.101:10080/eshop/demo1.mvcone:v1.0.1
    # 上传镜像到harbor
    docker push 192.168.0.101:10080/eshop/demo1.mvconev:v1.0.1

    push成功输入以下信息:

       

    在harbor后台管理中查看eshop项目下的镜像

      

    点击镜像名称,查看镜像版本号

       

    【上传镜像遇到的坑: 】

    如果不在harbor中新建项目,或者创建tag的时候不加项目名称,在上传镜像时会发生错误:received unexpected HTTP status: 500 Internal Server Error ,所以docker tag 打标签的时候要一定要加上项目名称。

    #push不加项目名称的镜像出现错误,下面是错误方法:
    # docker tag 本地镜像名:v1.0.1 ip:port/远程镜像名:v1.0.1
    docker tag demo1.mvcone:v1.0.1 192.168.0.101:10080/demo1.mvcone:v1.0.1
    # 上传镜像到harbor
    docker push 192.168.0.101:10080/demo1.mvcone:v1.0.1

    这样在push镜像时出现500 Internal Server Error错误: 

      

    第8步,为刚才上传到harbor的镜像创建一个容器  

    eshop/demo1.mvcone镜像已经上传到harbor,现在要用eshop/demo1.mvcone镜像创建一个容器,测试一下容器是否跑得起来。

    步骤:

    (1) 删除本地镜像 192.168.0.101:10080/eshop/demo1.mvcone 

    docker rmi 192.168.0.101:10080/eshop/demo1.mvcone:v1.0.1

    (2)从harbor上 拉取eshop/demo1.mvcone 镜像到本地

    docker pull 192.168.0.101:10080/eshop/demo1.mvcone:v1.0.1
    
    #从harbor上拉取像镜要写全路径, IP地址:端口/项目名称/镜像名:版本号

    (3) 创建 192.168.0.101:10080/eshop/demo1.mvcone 镜像的容器,以8001端口运行

    docker run -d --name my.eshop.demo1.mvcone -p 8001:50001 -v /appdata/mvcone 192.168.0.101:10080/eshop/demo1.mvcone:v1.0.1

    --name 容器名 

    -d 后台运行容器

    -p 参数:8001是docker对外暴露的端口,可以任意指定,50001是Dockerfile文件配置的docker内部运行端口,不可以随意指定。

    -v 参数,数据卷,容器的数据存放路径。

    192.168.0.101:10080/eshop/demo1.mvcone:v1.0.1 是镜像名

    (4) 查看docker中是否运行着刚刚创建的容器

    docker ps 

       从截图上可以看出 my.ehop.demo1.mvcone 容器已经创建并于处运行状态。

    (5) 用浏览器验证容器运行项目的效果

         

     第9步,harbor停止/重启/御载

     重启harbor:

    cd /usr/local/harbor
    docker-compose down
    ./prepare   #配置文件有改动时需要执行
    docker-compose up -d

    关闭harbor

    cd /usr/local/harbor
    docker-compose down -v
    # 或者
    docker-compose stop

    卸载Harbor

    cd /usr/local/harbor
    docker-compose stop
    rm -rf /usr/local/harbor
  • 相关阅读:
    asp.net2.0中App_GlobalResources的使用
    KPI(Key Performance Indicators )
    Dictionary集合
    SQL连接查询1 内联接查询
    如何在Web.config中注册用户控件和自定义控件
    JavaScript中【数据类型】和【数组类型】的区别
    递归求斐波拉数列函数
    SQL连接查询2 外连接(左右联接查询)
    启示
    “帽子戏法”从何而来?
  • 原文地址:https://www.cnblogs.com/yyee/p/13121272.html
Copyright © 2011-2022 走看看