美文网首页
05 Docker 私有仓库

05 Docker 私有仓库

作者: 托瓦斯克一 | 来源:发表于2021-01-05 22:16 被阅读0次

    概念关系

    注册服务器(Registry)和仓库(Repository)概念的区别:注册服务器是存放仓库的实际服务器,而仓库则可以被理解为一个具体的项目或者目录;注册服务器可以包含多个仓库,而每个仓库又可以包含多个镜像。
    举例:镜像地址为 docker.io/centos,docker.io 是注册服务器,centos 是仓库名。

    注册服务器、仓库和镜像关系

    公共镜像仓库

    公共镜像仓库一般是 Docker 官方或者其他第三方组织(阿里云,腾讯云,网易云等)提供的,允许所有人注册和使用的镜像仓库。可以进入 Docker Hub 官网注册账号并创建仓库,然后通过 docker login 默认命令请求登录 Docker Hub。

    $ docker login
    Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
    Username: mydocker
    Password:
    Login Succeeded
    

    私有镜像仓库

    Docker 官方提供了一个搭建私有仓库的镜像 registry ,只需把该镜像下载下来,运行容器并暴露 5000 端口,默认访问地址为 localhost

    $ docker run -d -p 5000:5000 --name registry registry:2.7
    Unable to find image 'registry:2.7' locally
    2.7: Pulling from library/registry
    cbdbe7a5bc2a: Pull complete
    47112e65547d: Pull complete
    46bcb632e506: Pull complete
    c1cc712bcecd: Pull complete
    3db6272dcbfa: Pull complete
    Digest: sha256:8be26f81ffea54106bae012c6f349df70f4d5e7e2ec01b143c46e2c03b9e551d
    Status: Downloaded newer image for registry:2.7
    d7e449a8a93e71c9a7d99c67470bd7e7a723eee5ae97b3f7a2a8a1cf25982cc3
    

    推送镜像

    在本地镜像推送到自定义仓库前,我们需要先把镜像 "重命名" 一下,才能正确推送到自己创建的镜像仓库中,使用 docker tag 命令将镜像 "重命名",然后通过 docker push 命令推送镜像到本地仓库中:

    $ docker tag busybox localhost:5000/busybox
    
    $ docker push localhost:5000/busybox
    

    持久化镜像存储

    容器是无状态的,而私有仓库的启动方式可能会导致镜像丢失,因为我们并没有把仓库的数据信息持久化到主机磁盘上,当然还支持其他多种存储类型。
    下面我们可以使用以下命令将镜像持久化到主机目录,保证容器被重建后数据不丢失:

    ### -v参数冒号前面为主机目录,冒号后面为容器内目录
    $ docker run -v /var/lib/registry/data:/var/lib/registry -d -p 5000:5000 --name registry registry:2.7
    

    构建可外访的镜像仓库

    Docker 要求非 localhost 访问的镜像仓库必须使用 HTTPS 或者配置 insecure-registry,否则在另一台机器上是无法直接访问到本地镜像仓库的,在这说明下如何构建一个支持 HTTPS 访问的安全镜像仓库:
    ● 拥有一个合法的域名,并且可以正确解析到镜像服务器;
    ● 从证书颁发机构(CA)获取一个证书。

    命令说明:域名为 regisry.mydocker.io,把主机上的证书文件挂载到了容器的 /certs 目录下,同时通过 -e 参数设置 HTTPS 相关的环境变量参数,最后让仓库在主机上监听 443 端口。

    $ docker run -d \
      --name registry \
      -v "/var/lib/registry/data:/var/lib/registry \
      -v "/var/lib/registry/certs:/certs \
      -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
      -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/regisry.mydocker.io.crt \
      -e REGISTRY_HTTP_TLS_KEY=/certs/regisry.mydocker.io.key \
      -p 443:443 \
      registry:2.7
    
    ### 远程主机推送镜像
    $ docker tag busybox regisry.mydocker.io/busybox
    $ docker push regisry.mydocker.io/busybox
    

    私有仓库进阶

    Docker 官方开源的镜像仓库仅满足了镜像存储和管理的功能,用户权限管理相对较弱,并且缺少管理界面;此处推荐一个基于 Distribution 项目开发的一款企业级镜像管理软件为 Harbor,拥有 RBAC(基于角色的访问控制)、管理用户界面以及审计等非常完善的功能。

    相关文章

      网友评论

          本文标题:05 Docker 私有仓库

          本文链接:https://www.haomeiwen.com/subject/jtawoktx.html