Docker容器实战【三】搭建Docker镜像私服Harbor

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 每个企业都有自己的镜像私服仓库,和nexus一样,公司内部的镜像制品都存放在自己的私服仓库中,今天我们来学习Harbor

目前主流的Docker4种私有仓库

  1. docker-registry:docker hub 提供的一直私有仓库解决方案。没有图形化界面
  2. Harbor:带有图形化界面的工具,用户管理,及查看更加方便
  3. Nexus:一般我们Maven和Gradle用得比较多,管理jar包,也能存储docker镜像,由于一个版本一个版本的保存和叠加,所以清理起来比较麻烦。
  4. 云平台容器服务(如阿里云,常用于生产环境)

这里我主要介绍2种相对较友好的镜像私服,harbor和阿里云容器服务

系统环境说明:
 Centos 7
 Docker Version: 20.10.14

Harbor

简介

Harbor Registry(又称 Harbor 云原生制品仓库或 Harbor 镜像仓库)由 VMware 公司中国研发中心云原生实验室原创,并于 2016 年 3 月开源。Harbor 在 Docker Distribution的基础上增加了企业用户必需的权限控制、镜像签名、安全漏洞扫描和远程复制等重要功能,还提供了图形管理界面及面向国内用户的中文支持,开源后迅速在中国开发者和用户社区流行,成为中国云原生用户的主流容器镜像仓库。

特性

  1. 基于角色的访问控制 :用户与Docker镜像仓库通过“项目”进行组织管理,用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
  2. 镜像复制 : 镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
  3. 图形化用户界面 : 用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。
  4. AD/LDAP 支持 : Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。
  5. 审计管理 : 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
  6. 国际化 : 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
  7. RESTful API : RESTful API 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。
  8. 部署方便 : 提供在线和离线两种安装工具, 也可以安装到vSphere平台(OVA方式)虚拟设备。

下载安装包

Harbor 提供了多种途径来帮助用户快速搭建 Harbor 镜像仓库服务,包括:

  • 离线安装包:通过docker-compose编排运行。安装包除了包含相关的安装脚本外,还包含了所有安装所需要的Harbor组件镜像,可以在离线环境下安装使用。
  • 在线安装包:与离线安装包类似,唯一的区别就是不包含harbor组件镜像,安装时镜像需要从网络上的仓库服务拉取。
  1. 手动下载:官方源码戳我,找到最新Tag拉到底部进行下载,建议采用迅雷

    image.png

  2. 采用wget下载(较慢):wget https://github.com/goharbor/harbor/releases/download/v2.5.0/harbor-offline-installer-v2.5.0.tgz
  3. 这里我们选择离线版。

安装docker-compose

Harbor由多个组件组成,其每个组件都是以Docker容器的形式构建的,官方采用Docker Compose来对它进行部署。用于部署HarborDocker Compose模板位于 harbor/docker-compose.yml中,这个模板文件中有多个镜像定义,常见如:harbor-log,harbor-db,registry,harbor-core,nginx,harbor-portal,harbor-jobservice等,版本不一样所依赖的容器熟练不一样。

所以我们需要提前安装好docker compose。

# 下载 http://github.com/docker/compose/releases 网络原因可能会失败
$ curl -L "https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

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

# 也可以手动下载
https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64
# 重命名
$ mv docker-compose-linux-x86_64 docker-compose
# 授权
$ chmod +x /usr/local/bin/docker-compose
 
# 可定义全局变量或者软链接,方便执行:
$ ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
 
# 验证
$ docker-compose --version
Docker Compose version v2.5.0

# 注意如果运行docker-compose出现Segmentation fault错误,可以做如下操作
1. 重启docker服务
2. 删除docker-compose文件重新下载

生产HTTPS证书

由于我们是在本地或虚拟机,可以不用安装,大家也可以采用其他免费证书

# 官方下载地址
https://goharbor.io/docs/1.10/install-config/configure-https/

安装Harbor

  1. 解压配置

    $ tar xvf harbor-offline-installer-v2.5.0.tgz -C /usr/local/
    $ cd harbor/
    
    # 编辑harbor.yml(老版本是harbor.cfg),修改hostname、https证书路径、admin密码(可选)
    # 先复制一份harbor.yml
    $ cp -f harbor.yml.tmpl harbor.yml
    $ vim harbor.yml
    
    -- 示例如下
    # 用于访问用户界面和 register 服务。它应该是目标机器的 IP 地址或完全限 定的域名。例如 192.168.2.195 或 hub.it235.com。不要使用 localhost 或 127.0.0.1 为主机名。
    hostname: 192.168.2.195
    http:
      # port避免和nginx冲突,改成非80即可,本文改为9080
      port: 8098
    # 注意,如果不开启https,则需要把https节点的内容注释掉,否则安装会报错,在老版本中由enable属性控制
    https:
      port: 443
      # ssl证书地址 仅当协议设置为 https 时才应用。
      certificate: /your/certificate/path
      private_key: /your/private/key/path
    # harbor默认用户名密码  
    harbor_admin_password: Harbor12345
    
    # harborDB 用于db_auth 的MySQL数据库root 用户的密码。
    database:
      password: root123
      max_idle_conns: 100
      max_open_conns: 900
    
    # The default data volume
    data_volume: /data
    
    
    # 运行
    $ sh /usr/local/harbor/install.sh 或进入到harbor目录执行 ./install.sh 
    
    # 安装成功的结果
    ✔ ----Harbor has been installed and started successfully.----
    
    # 注意,如果失败,修改相关配置后再次执行./install.sh即可(一般失败原因大多是端口冲突)
  2. 重启docker-compose

    # 关闭
    $ docker-compose down -v
    
    # 启动
    $ docker-compose up -d
    
    # 如果出现以下错误,请启动docker,或重启docker
    $ docker-compose ps
    no configuration file provided: not found
    
    $ systemctl start docker 
    $ systemctl restart docker 
  3. 查看harbor安装情况

    # 查看已经拉取的镜像
    $ docker images
    
    # 查看所有容器
    $ docker ps -a
    
    # 查看compose容器相关运行情况
    $ docker-compose ps
  4. 清空所有容器和镜像

    docker rm -f $(docker ps -aq)
    
    docker rmi -f $(docker images -aq)
  5. 访问harbor

    如果使用了https出现检查证书的情况,说明证书失效或配置存在问题,可点击继续访问

    image.png

    默认账号密码: admin/Harbor12345,可在harbor.yml中修改

    image.png

    作为开发人员,与harbor打交道最多的就是项目模块,其他模块可以暂时忽略

镜像推送

  1. harbor创建项目

    image.png

  2. 找另外一台Linux机器

    • 安装docker环境
    • 配置docker的镜像仓库为harbor的机器

      # 注意,这里不再是其他的国内镜像仓库,而是要使用我们的私服harbor
      $ cat /etc/docker/daemon.json
      {
          "registry-mirrors" : ["http://hub-mirror.c.163.com"], # 国内镜像代理
          "insecure-registries" : ["192.168.2.195:8098"], # harbor私服
          "live-restore": true # 重载docker守护进程而不重启容器
      }
    • 在我们另外另外一台机器上把harbor的密码存下来,写到一个文件中
    • 使用命令行的方式登录到harbor

      # 在我们另外另外一台机器上把harbor的密码存下来,写到一个文件中
      $ echo Harbor12345 > /etc/docker_passwd
      
      # 登录,因为harbor对密码有一定的要求,所以要采用这种方式
      $ cat /etc/docker_passwd | docker login -u admin --password-stdin http://192.168.2.195:8098
      
      Login Succeeded
      
      # 注意:如果出现了https问题,那么请检查daemon.json配置是否与我上面描述的一致
  3. 随意从官方仓库下载一个镜像

    $ docker pull nginx
  4. 给镜像打标签

    # docker tag SOURCE_IMAGE[:TAG] 192.168.2.195:8098/it235/REPOSITORY[:TAG]
    $ docker tag redis:latest 192.168.2.195:8098/it235/nginx:v1
  5. 推送到harbor仓库

    # docker push 192.168.2.195:8098/it235/REPOSITORY[:TAG]
    $ docker push 192.168.2.195:8098/it235/nginx:v1
  6. 进入ui页面查看

    image.png

  7. 删除已存在的镜像,并从harbor拉取镜像

    $ docker rmi nginx
    
    $ docker pull 192.168.2.195:8098/it235/nginx:v1
  8. 启动容器并验证

    $ docker run -d -p 8888:80 192.168.2.195:8098/it235/nginx:v1
    
    浏览器访问:http://192.168.2.194:8888
    
    # 注意,如果是在云服务器上,需要在安全组中配置8888端口或使用nginx代理才可以在外网访问
    # 本地如果有防火墙未直接暴露8888端口,则需要将8888端口加入到防火墙中
  9. IDEA容器插件自动推送
  10. 使用Maven或Gradle集成自动推送
  11. 使用jenkins打包构建推送

总结

Harbor是目前企业中应用较为广泛的镜像仓库,虽然各云厂商推出了私有镜像仓库,但是云下的应用场景Harbor有着不可撼动的地位

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。   相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
8天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
4天前
|
关系型数据库 MySQL API
|
4天前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
4天前
|
缓存 Linux 网络安全
docker的镜像无法下载如何解决?
【10月更文挑战第31天】docker的镜像无法下载如何解决?
133 28
|
6天前
|
存储 监控 Linux
docker构建镜像详解!!!
本文回顾了Docker的基本命令和管理技巧,包括容器和镜像的增删改查操作,容器的生命周期管理,以及如何通过端口映射和数据卷实现容器与宿主机之间的网络通信和数据持久化。文章还详细介绍了如何使用Docker部署一个简单的Web应用,并通过数据卷映射实现配置文件和日志的管理。最后,文章总结了如何制作自定义镜像,包括Nginx、Python3和CentOS镜像,以及如何制作私有云盘镜像。
61 2
|
6天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
32 1
|
7天前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
17 1
|
8天前
|
Docker 容器
docker 修改容器内的系统时间
【10月更文挑战第27天】docker 修改容器内的系统时间
145 2
|
9天前
|
存储 Java 开发者
成功优化!Java 基础 Docker 镜像从 674MB 缩减到 58MB 的经验分享
本文分享了如何通过 jlink 和 jdeps 工具将 Java 基础 Docker 镜像从 674MB 优化至 58MB 的经验。首先介绍了选择合适的基础镜像的重要性,然后详细讲解了使用 jlink 构建自定义 JRE 镜像的方法,并通过 jdeps 自动化模块依赖分析,最终实现了镜像的大幅缩减。此外,文章还提供了实用的 .dockerignore 文件技巧和选择安全、兼容的基础镜像的建议,帮助开发者提升镜像优化的效果。
|
14天前
|
Web App开发 iOS开发 Docker
Docker 容器的日志
【10月更文挑战第31天】
26 5