zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    又搬回来了233
    2017.10.2解题报告
    2017.10.1解题报告
    Android 百度地图开发(二)--- 定位功能之MyLocationOverlay,PopupOverlay的使用
    Last_IO_Errno: 1236 Last_IO_Error: Got fatal error 1236 from master when reading data from binary lo
    [Warning] Aborted connection 11203 to db: 'ide' user: 'nuc' host: 'prd01.mb.com' (Got an error writi
    浅析地方门户网优化的方法
    xxx==null和xxx.equals(null)的区别
    Java+7入门经典
    《UNIX环境高级编程》笔记--read函数,write函数,lseek函数
  • 原文地址:https://www.cnblogs.com/xiaonq/p/10285808.html
Copyright © 2011-2022 走看看