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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 每个企业都有自己的镜像私服仓库,和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
目录
相关文章
|
17天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
157 77
|
25天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
25天前
|
Docker 容器
将本地的应用程序打包成Docker镜像
将本地的应用程序打包成Docker镜像
|
3天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
29 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
9天前
|
NoSQL PHP MongoDB
docker push推送自己搭建的镜像
本文详细介绍了如何搭建和复盘两个Web安全挑战环境:人力资源管理系统和邮件管理系统。首先,通过Docker搭建MongoDB和PHP环境,模拟人力资源管理系统的漏洞,包括nosql注入和文件写入等。接着,复盘了如何利用这些漏洞获取flag。邮件管理系统部分,通过目录遍历、文件恢复和字符串比较等技术,逐步绕过验证并最终获取flag。文章提供了详细的步骤和代码示例,适合安全研究人员学习和实践。
33 3
docker push推送自己搭建的镜像
|
9天前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
29 3
实战~如何组织一个多容器项目docker-compose
|
3天前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
16 4
|
13天前
|
Docker 容器
|
19天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
60 3
|
25天前
|
数据库 Docker 容器
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
48 9