• Docker注册中心


    一、概念

    1、Docker注册中心和仓库

    Registry(注册中心或注册服务器):存放仓库的地方,一个注册中心往往有很多仓库。

    Repositories(仓库):集中存放镜像文件的地方,一个仓库存放多个镜像文件,每个仓库只存放一类镜像,通过"仓库名:标签"指定特定版本的镜像。

    Docker仓库分类:根据存储的镜像文件是否共享,分为 公开仓库(Public Repositories)、私有仓库(Private Repositories)。

    2、Docker Hub

    Docker Hub 是一个基于云的注册中心,为镜像检索、发布、变更、用户和团队、开发流程的自动化提供集中式的资源服务。

    主要功能:

    1. 镜像仓库:上传和下载容器镜像。
    2. 团队和组织:管理对容器镜像的私有仓库的访问。
    3. 官方镜像:下载和使用由Docker官方提供的高质量容器镜像。
    4. 发布者镜像:下载和使用由外部供应商提供的高质量容器镜像。
    5. 构建:从GitHub和Bitbucket这两个源代码托管平台自动构建容器镜像并将它们上传到Docker Hub。当对源代码库进行修改时,会自动构建一个新镜像。
    6. Webhooks:这是一个自动化构建特性,在一个镜像上传成功后,Webhooks会触发操作,将Docker Hub与其他服务进行整合。

    根据内容分层镜像仓库:

    1. 顶级镜像仓库:基础镜像
    2. 次级镜像仓库:特定命名空间下的镜像仓库,命名空间可能就是用户名。例:gitlab/gitlab-runner

    3、官方仓库

    指的是由厂商和贡献者(比如:Oracle、Redhat)向Docker提供的公开的、经过认证的仓库,能确保仓库及时安全更新。用户可以使用作为基础镜像构建自己的应用。

    官方仓库用途:

    1. 提供必要的基础OS镜像仓库,作为大多数用户构建镜像的起点。
    2. 为流行的编程语言运行时、数据存储和其他服务提供类似于平台即服务(PaaS)所提供的解决方案。
    3. 作为学习Dockerfile的最佳实践,提供清晰的文档供其他Dockerfile作者参考。
    4. 确保及时的安全更新

    4、镜像加速器

    Docker Hub注册中心部署在国外服务器。国内访问会存在问题,Docker 官方提供了中国的加速器,直接使用加速器地址即可使用。

    配置方法:

    # 1.修改配置文件
    vi /etc/docker/daemon.json
    {
      "registry-mirrors":["https://registry.docker-cn.com"]
    }
    # 保存文件
    # 2.重启Docker
    [root@hqs docker]# systemctl daemon-reload
    [root@hqs docker]# systemctl restart docker
    

    这个方法只能加速访问流行的公开镜像,私有镜像仍然要去美国服务器中拉取。

    另外可以配置相应的国内镜像源来提高镜像的下载速度和稳定性。阿里云除了提供Docker Hub镜像加速器之外,还提供与Docker Hub类似的容器镜像服务,方便用户进行镜像全生命周期管理。

    阿里云加速器:

    # 可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://nxwgbmaq.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

    二、注册中心相关操作

    1、push推送

    将镜像推送到由其名称或标签指定的仓库中。与pull命令相对。

    [root@hqs docker-hello]# docker push --help
    Usage:  docker push [OPTIONS选项] NAME仓库名[:TAG标签]
    Push an image or a repository to a registry    # 推送一个镜像或仓库到注册中心
    Options:
          --disable-content-trust   Skip image signing (default true)     # 跳过镜像签名 
    
    # 例子:
    docker push hqs/testdocker:22.03
    

    2、commit提交

    通过 docker commit 命令将现有的容器提交来生成新的镜像。

    [root@hqs docker-hello]# docker commit --help
    Usage:  docker commit [OPTIONS选项] CONTAINER容器 [REPOSITORY仓库名[:TAG标签]]
    Create a new image from a containers changes
    Options:
      -a, --author string    Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")    # 指定作者
      -c, --change list      Apply Dockerfile instruction to the created image             # 允许使用dockerfile的指令
      -m, --message string   Commit message                                  # 提交信息
      -p, --pause            Pause container during commit (default true)    # 创建镜像过程中容器暂停(挂起)
    

    3、login登录 和 logout退出

    使用 docker login 命令登录docker注册中心。

    # 语法
    [root@hqs docker]# docker login --help
    Usage:  docker login [OPTIONS] [SERVER]
    Log in to a Docker registry.
    If no server is specified, the default is defined by the daemon.        # 如果server没有指定,默认从daemon获取。
    Options:
      -p, --password string   Password                   # 密码
          --password-stdin    Take the password from stdin     # 标准输入输入密码
      -u, --username string   Username    # 用户名
    
    # 案例:
    [root@hqs docker-hello]# docker login --username=hqs2212586 registry.cn-hangzhou.aliyuncs.com
    

    使用 docker logout 命令退出注册中心登录。

    # 语法
    [root@hqs docker]# docker logout --help
    Usage:  docker logout [SERVER]
    Log out from a Docker registry.
    If no server is specified, the default is defined by the daemon.
    
    # 示例:
    [root@hqs docker]# docker logout
    Removing login credentials for https://index.docker.io/v1/
    

    三、操作案例

    1、docker hub镜像上传

    # 1.修改镜像镜像加速器
    [root@hqs ~]# cd /etc/docker/
    [root@hqs docker]# vi daemon.json
    {
      "registry-mirrors": ["https://registry.docker-cn.com"]
    }
    [root@hqs docker]# systemctl daemon-reload
    [root@hqs docker]# systemctl restart docker
    
    # 2.登录docker hub官网注册账号:https://hub.docker.com/signup
    
    # 3.登录账户,创建一个仓库
    # “Create Repository”——》输入命名空间和仓库名——》“Description”填写描述信息——》“visibility”中选择是创建public仓库还是private仓库——》点击“Create”创建仓库
    
    # 4.登录Docker Hub
    [root@hqs docker]# docker login
    Login with your Docker ID to push and pull images from Docker Hub. If you dont have a Docker ID, head over to https://hub.docker.com to create one.
    Username: hqs2212586      # 输入创建的用户名
    Password:                 # 输入密码并按回车
    WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
    Configure a credential helper to remove this warning. See
    https://docs.docker.com/engine/reference/commandline/login/#credentials-store
    
    Login Succeeded
    
    # 5.构建镜像
    [root@hqs docker-hello]# docker build -t hqs2212586/testdocker .
    Sending build context to Docker daemon  865.3kB
    Step 1/3 : FROM scratch
     ---> 
    Step 2/3 : COPY hello /
     ---> 2322533b4210
    Step 3/3 : CMD ["/hello"]
     ---> Running in 5994e2099b8d
    Removing intermediate container 5994e2099b8d
     ---> 32fedb0d83ba
    Successfully built 32fedb0d83ba
    Successfully tagged hqs2212586/testdocker:latest
    
    # 6.为已存在的镜像重新设置标签
    [root@hqs docker-hello]# docker tag 32fedb0d83ba hqs2212586/testdocker:22.03
    [root@hqs docker-hello]# docker images
    REPOSITORY              TAG                 IMAGE ID            CREATED              SIZE
    hqs2212586/testdocker   22.03               32fedb0d83ba        About a minute ago   861kB
    hqs2212586/testdocker   latest              32fedb0d83ba        About a minute ago   861kB
    
    # 7.推送镜像
    [root@hqs docker-hello]# docker push  hqs2212586/testdocker:22.03
    The push refers to repository [docker.io/hqs2212586/testdocker]
    88dc11111fec: Pushed 
    22.03: digest: sha256:c9225ad48cb94c8f160e839187e81ce28f85dbff8316e7443879f5169f41cfb0 size: 527
    
    # 8.在docker hub上检查推送的仓库
    [仓库地址](https://hub.docker.com/repository/docker/hqs2212586/testdocker)
    

    2、容器生成镜像提交docker hub

    # 1.登录官网账户,创建一个仓库
    # “Create Repository”——》输入命名空间和仓库名——》“Description”填写描述信息——》“visibility”中选择是创建public仓库还是private仓库——》点击“Create”创建仓库
    
    # 2.容器提交生成镜像
    [root@hqs docker-hello]# docker commit 4decee095428 hqs2212586/ubuntu:22.03
    sha256:a4b85b3fb73e23e75440430252477b77aee8927fdf9495160297b86dcf5f917c
    [root@hqs docker-hello]# docker images
    REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
    hqs2212586/ubuntu       22.03               a4b85b3fb73e        6 seconds ago       72.8MB
    
    # 3.推送镜像
    [root@hqs docker-hello]# docker push hqs2212586/ubuntu:22.03
    The push refers to repository [docker.io/hqs2212586/ubuntu]
    b954f8dfd459: Pushed 
    9f54eef41275: Mounted from library/ubuntu 
    22.03: digest: sha256:573bc189eba09934db466a2344edee5f46cd7d98fb765690b4ba7b1e9dd26624 size: 736
    
    # 4.在docker hub上检查推送的仓库
    [仓库地址](https://hub.docker.com/repository/docker/hqs2212586/ubuntu)
    

    3、第三方Docker注册中心

    阿里云除了提供 Docker Hub 的镜像加速服务,还提供自己的仓库注册服务————容器镜像服务。
    阿里云容器镜像服务(简称 ACR)是面向容器镜像、Helm Chart 等符合 OCI 标准的云原生制品安全托管及高效分发平台。

    阿里云仓库的格式:域名/命名空间/仓库名称:标签。示例:registry.cn-hangzhou.aliyuncs.com/huangqs/docker_test:22.03

    # 1.登录aliyun平台,注册登录
    [阿里云官网地址](https://www.aliyun.com)
    
    # 2.在阿里云控制台创建仓库
    # 打开阿里云控制台——》产品与服务列表——》弹性计算里的容器镜像服务,进入容器镜像服务控制台
    # 点击“个人实例”——》点击左侧“镜像仓库”——》点击“创建镜像仓库”——》输入仓库名称、选择仓库类型、输入仓库的摘要或描述等信息——》点击“下一步”——》选择“本地仓库”——》点击“创建镜像仓库”
    
    # 3.设置registry登录密码
    # 使用docker login通过密码登录镜像服务实例,需要先设置或获取临时密码或固定密码。
    # 容器镜像服务——》个人实例——》仓库管理菜单里的访问凭证——》设置固定密码
    
    # 4.登录阿里云Docker Registry
    [root@hqs docker-hello]# docker logout
    Removing login credentials for https://index.docker.io/v1/
    [root@hqs docker-hello]# docker login --username=hqs2212586 registry.cn-hangzhou.aliyuncs.com
    Password: 
    WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
    Configure a credential helper to remove this warning. See
    https://docs.docker.com/engine/reference/commandline/login/#credentials-store
    Login Succeeded
    
    # 5.构建镜像
    [root@hqs docker-hello]# docker build -t registry.cn-hangzhou.aliyuncs.com/huangqs/docker_test:22.03 .
    Sending build context to Docker daemon  865.3kB
    Step 1/3 : FROM scratch
     ---> 
    Step 2/3 : COPY hello /
     ---> Using cache
     ---> 846e09a540e6
    Step 3/3 : CMD ["/hello"]
     ---> Using cache
     ---> a5dbf1d93254
    Successfully built a5dbf1d93254
    Successfully tagged registry.cn-hangzhou.aliyuncs.com/huangqs/docker_test:22.03
    
    # 6.将镜像推送到Registry
    [root@hqs docker-hello]#  docker push registry.cn-hangzhou.aliyuncs.com/huangqs/docker_test:22.03
    The push refers to repository [registry.cn-hangzhou.aliyuncs.com/huangqs/docker_test]
    88dc11111fec: Pushed 
    22.03: digest: sha256:b1d135c19b018cfbbba32085948cb125507b508549a8296568c25a81f5b0709b size: 527
    
    # 7.验证镜像上传
    # 访问容器镜像服务控制台——》个人实例——》镜像仓库——》点击仓库名docker_test——》点击镜像版本。可以看到我们上传的镜像。
    

    4、自建Docker注册中心

    因为安全和网络问题,用户可以建立自己的注册中心提供镜像仓库注册服务。

    (1)基于容器安装运行Registry

    使用的 Docker Registry工具 已经开源,可以在Docker Hub上下载镜像启动容器。

    [root@hqs ~]# docker pull registry
    Using default tag: latest
    latest: Pulling from library/registry
    3d2430473443: Pull complete 
    5bf98bf80c2f: Pull complete 
    950c199aa45b: Pull complete 
    92504897768b: Pull complete 
    c6488f74dce8: Pull complete 
    Digest: sha256:65be6503496c34ec234e89a831ca248b18c2e04c800d9d74af73866e3cda8578
    Status: Downloaded newer image for registry:latest
    docker.io/library/registry:latest
    [root@hqs ~]# docker run -d -p 5000:5000 --restart=always --name myregistry -v /opt/data/registry:/var/lib/registry registry
    3cac187c798b08d12da5f292a03621e2e27021763481e9313b6f7de57a722354
    [root@hqs ~]# docker ps -a
    CONTAINER ID     IMAGE        COMMAND                  CREATED             STATUS              PORTS                    NAMES
    3cac187c798b     registry     "/entrypoint.sh /etc…"   29 seconds ago      Up 28 seconds       0.0.0.0:5000->5000/tcp   myregistry
    
    # 验证刚建立的注册中心
    [root@hqs ~]# curl http://127.0.0.1:5000/v2/_catalog
    {"repositories":[]}     # 此结果说明运行正常,注册中心还没有任何镜像
    

    (2)将镜像上传到自建的注册中心

    要注意自建的注册中心仓库标签格式:[主机:端口]/仓库名称:标签。

    # 1.给已有的镜像打标签符合自建注册中心格式
    [root@hqs ~]# docker tag ubuntu 127.0.0.1:5000/ubuntu:v1
    [root@hqs ~]# docker images
    REPOSITORY                                              TAG                 IMAGE ID            CREATED             SIZE
    hqs2212586/ubuntu                                       22.03               93a86f5131ec        3 hours ago         72.8MB
    127.0.0.1:5000/ubuntu                                   v1                  ba6acccedd29        5 months ago        72.8MB
    ubuntu                                                  latest              ba6acccedd29        5 months ago        72.8MB
    [root@hqs ~]# docker tag hqs2212586/testdocker 127.0.0.1:5000/testdocker:v1
    
    # 2.执行镜像上传
    [root@hqs ~]# docker push 127.0.0.1:5000/ubuntu:v1
    The push refers to repository [127.0.0.1:5000/ubuntu]
    9f54eef41275: Pushed 
    v1: digest: sha256:7cc0576c7c0ec2384de5cbf245f41567e922aab1b075f3e8ad565f508032df17 size: 529
    [root@hqs ~]# docker push  127.0.0.1:5000/testdocker:v1
    The push refers to repository [127.0.0.1:5000/testdocker]
    88dc11111fec: Pushed 
    v1: digest: sha256:b1d135c19b018cfbbba32085948cb125507b508549a8296568c25a81f5b0709b size: 527
    
    # 3.执行测试
    [root@hqs ~]# curl http://127.0.0.1:5000/v2/_catalog
    {"repositories":["testdocker","ubuntu"]}
    

    (3)从自建注册中心下载镜像

    [root@hqs ~]# docker rmi 127.0.0.1:5000/testdocker:v1
    Untagged: 127.0.0.1:5000/testdocker:v1
    Untagged: 127.0.0.1:5000/testdocker@sha256:b1d135c19b018cfbbba32085948cb125507b508549a8296568c25a81f5b0709b
    [root@hqs ~]# docker pull 127.0.0.1:5000/testdocker:v1
    v1: Pulling from testdocker
    Digest: sha256:b1d135c19b018cfbbba32085948cb125507b508549a8296568c25a81f5b0709b
    Status: Downloaded newer image for 127.0.0.1:5000/testdocker:v1
    127.0.0.1:5000/testdocker:v1
    [root@hqs ~]# docker images
    REPOSITORY                                              TAG                 IMAGE ID            CREATED             SIZE
    127.0.0.1:5000/testdocker                               v1                  a5dbf1d93254        3 hours ago         861kB
    

    (4)配置注册中心地址

    本地服务器情况下使用127.0.0.1或者localhost作为注册中心地址都是可以的。
    但如果使用主机的域名或IP地址提供服务,会报错,这是因为1.3版本后,docker注册中心默认使用的https,但是搭建私有注册中心默认使用的是http。

    解决方法:修改docker客户端/etc/docker/daemon.json文件,将地址添加到insecure-registries列表中,允许不安全的通信即可。

    # 示例
    {
      "insecure-registries":["192.168.88.101:5000"]
    }
    # 保存后重启docker
    systemctl restart docker
    
  • 相关阅读:
    [leetcode]102. Binary Tree Level Order Traversal二叉树水平遍历
    [leetcode]261. Graph Valid Tree有效树形图
    [leetcode]730. Count Different Palindromic Subsequences计数不同的回文子序列的个数
    [leetcode]516. Longest Palindromic Subsequence最长回文子序列
    [leetcode]698. Partition to K Equal Sum Subsets分割K个等和的子集
    [leetcode]611. Valid Triangle Number有效三角数
    [leetcode]187. Repeated DNA Sequences重复DNA序列
    [leetcode]245. Shortest Word Distance III最短单词距离(word1可能等于word2)
    ios开发 通讯录
    监听键盘
  • 原文地址:https://www.cnblogs.com/xiugeng/p/16043012.html
Copyright © 2020-2023  润新知