docker镜像仓库

一、公有仓库

1.1 docker hub仓库(了解)

Docker Hub是Docker公司维护的公共Registry。用户可以将自己的镜像保存到Docker Hub免费的repository中。如果不希望比尔访问自己的镜像,也可以购买私有repository。

1.1.1 上传镜像到docker hub公有仓库
  1. https://hub.docker.com/注册一个Docker Hub账号。

  2. 在Docker host上登陆docker hub

     docker login
  3. Docker Hub为了区分不同用户的同名镜像,镜像名中要包含用户名,完整格式为username/xxx:tag,通过docker tag命令重命名镜像名字

     docker tag [image] username/xxx:tag
  4. 通过docker push命令把本地镜像推送到公共仓库Docker Hub中

     docker push username/xxx:tag
  5. 登录 https://hub.docker.com,在Public Repository中就可以看到本地上传的镜像,如果要删除镜 像,只能登陆web界面删除。

1.2 阿里云公有仓库

阿里云容器镜像服务为我们提供了镜像加速器和免费的镜像仓库。

  1. 登录https://cr.console.aliyun.com/cn-hangzhou/instances/repositories阿里云控制台首页。创建镜像仓库。这里将命名空间命名为ldhwlkq,仓库名称命名为edu。我们上传的镜像就是要上传到ldhwlkq/edu中。

  2. 在Docker host主机上登陆阿里云仓库

     docker login --username=ldhwlkq crpi-tlkz49dhxv25w94d.cn-hangzhou.personal.cr.aliyuncs.com
     # 用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
  3. 上传镜像到阿里云仓库

     # 先重命名
     docker tag [ImageId] crpi-tlkz49dhxv25w94d.cn-hangzhou.personal.cr.aliyuncs.com/ldhwlkq/edu:[镜像版本号]
     ​
     # 上传镜像
     docker push crpi-tlkz49dhxv25w94d.cn-hangzhou.personal.cr.aliyuncs.com/ldhwlkq/edu:[镜像版本号]
  4. 查看edu仓库的镜像版本,可以看到之前上传的镜像,如果要删除镜像,只能在web管理界面上操作。

二、私有仓库

2.1 registry仓库(了解)

在Docker中,当我们执行docker pull的时候,它实际上是从registry.hub.docker.com这个地址去查找,这就是Docker公司为我们提供的公共仓库。在工作中,我们不可能把企业项目镜像push到公有仓库进行管理。所以为了更好的管理镜像,Docker不仅提供了一个中央仓库,同时也允许我们搭建本地私有仓库,Docker官方提供了一个搭建私有仓库的镜像registry

  1. 下载registry镜像,运行容器并暴露5000端口,同时添加--restart always参数,可使容器随着Docker host的启动而启动

     # 下载registry镜像
     docker pull registry:2
     ​
     # 运行容器
     docker run -itd -p 5000:5000 --restart always --name ldhregistry registry:2
  2. registry默认是不需要身份验证就能直接上传镜像,但是需要修改镜像名来指定仓库地址,镜像格式为ip:port/xxx:tag,再通过docker push将该镜像推送到私有仓库。

     docker [image] 192.168.100.5:5000/xxx:tag
  3. 设置docker的私有仓库地址,并上传镜像

     vim /etc/docker/daemon.json
     ​
     {
         "registry-mirrors": [
             "https://docker.m.daocloud.io",
             "https://dockerproxy.com",
             "https://docker.mirrors.ustc.edu.cn",
             "https://docker.nju.edu.cn"
         ],"insecure-registries": ["192.168.100.5:5000"]
     }
     ​
     systemctl daemon-reload
     systemctl restart docker
     ​
     # 上传镜像
     docker push 192.168.100.5:5000/xxx:tag
     ​
     # 查看私有仓库的镜像
     curl http://192.168.100.5:5000/v2/_catalog

    2.2 harbor仓库

    Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必须的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。

    2.2.1 harbor的组件
    1.Harbor依赖的外部组件
    1. Nginx(即proxy代理层):Nginx前端代理,主要用于分发前端页面UI访问和镜像上传和下载流量。

    2. Registry v2:镜像仓库,负责存储镜像文件。

    3. Database(Mysql或者Postgresql):为core services提供数据库服务,负责存储用户权限、审计日志、Docker image分组信息等数据。

    2.Harbor自有组件

    1、Core services(Admin Server):这是Harbor的核心功能,主要提供以下服务:

    • UI:提供图形化界面,帮助用户管理registry上的镜像,并对用户进行授权。

    • webhook:为了及时获取registry上image状态变化的情况,在Registry上配置webhook,把状态传递给UI模块。

    • Auth服务:负责根据用户权限给每个docker push/pull命令签发token。Docker客户端向Registry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向Registry进行请求。

    • API:提供Harbor RESTful API。

    2、Replication Job Service:

    提供多个Harbor实例之间的镜像同步功能。

    3、Log collector:

    为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。

    2.2.2 创建Harbor仓库
    1. 下载Harbor压缩包,上传主机并解压

       tar -zxvf harbor-offline-installer-v1.10.10.tgz
       ​
       cd harbor/
       ​
       [root@ldh harbor]# ls
       common.sh               harbor.yml  LICENSE
       harbor.v1.10.10.tar.gz  install.sh  prepare
    2. 修改harbor.yml文件中的hostname,监听本主机IP,将https等内容注释掉,同时还能通过该文件定义harbor的登陆密码,默认密码为Harbor12345

       vim harbor.yml
       ​
       hostname: 192.168.100.5
       ​
       # http related config
       http:
         # port for http, default is 80. If https enabled, this port will redirect to https port
         port: 80
       ​
       # https related config
       #https:
         # https port for harbor, default is 443
        # port: 443
         # The path of cert and key files for nginx
         #certificate: /your/certificate/path
         #private_key: /your/private/key/path
    3. 安装docker-compose,harbor是被其控制的

       yum -y install docker-compose
       ​
       ​
       # 修改/etc/docker/daemon.json文件
       vim /etc/docker/daemon.json
       ​
       {
           "registry-mirrors": [
               "https://docker.m.daocloud.io",
               "https://dockerproxy.com",
               "https://docker.mirrors.ustc.edu.cn",
               "https://docker.nju.edu.cn"
           ],"insecure-registries": ["192.168.100.5"]
       }
       ​
       systemctl daemon-reload
       systemctl restart docker
    4. 运行install.sh脚本

       ./install.sh
    5. 安装完毕后,访问http://192.168.100.5/harbor即可显示harbor图形化管理界面,账号密码为admin/Harbor12345

    6. 新建仓库

    7. 上传镜像

       # 登录harbor
       docker login http://192.168.100.5 -u admin -p  Harbor12345
       ​
       # 重命名镜像
       docker tag saolei:v1 192.168.100.5/edu/saolei
       ​
       # 上传镜像
       docker push 192.168.100.5/edu/saolei
      
      
      

管理仓库在图形化界面。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐