美文网首页Docker轻松入门教程
压箱底的技巧!教你搭建本地注册中心!

压箱底的技巧!教你搭建本地注册中心!

作者: 字节码在跳舞 | 来源:发表于2024-04-15 16:14 被阅读0次
    1. 使用Docker Hub分享镜像
    2. 搭建私有注册中心供内部使用
    3. 通过域名访问私有仓库

    Docker注册中心(Docker Registry),它是Docker生态系统一个重要组件,负责存储和分发Docker镜像。Docker Registry分为为两种,为公共和私有类型:

    • Docker Hub:Docker官方提供的最大、最知名的公共注册中心,托管了官方和社区提供的Docker镜像。可以在这里搜索、下载镜像,也可以上传自己的镜像供他人使用。
    • 私有注册中心是企业搭建,也可以个人搭建,用于管理和分发内部私有的Docker镜像,不对外公开。私有注册中心的典型代表有:
      • Docker Registry本身提供的开源软件,可以直接部署在服务器上构建私有镜像仓库。
      • Harbor:由VMware公司开源的企业级Docker注册中心项目,提供了身份认证、权限管理、镜像复制、日志审计等一系列企业级功能。

    创建了镜像,想分享给朋友,不知道怎么办。通过docker login命令可以登录注册中心。Docker注册中心可以帮你解决。使用docker login命令登录到注册中心,通过命令docker push推送镜像到注册中心,你的朋友就可以在任何有地方使用docker pull拉取镜像。

    有些企业不想把镜像公开在互联网,或网络原因,通过网络拉取镜像太慢,可以搭建的Docker中心来解决。

    1. 使用Docker Hub分享镜像

    • 注册Docker Hub账号

    首先,访问https://hub.docker.com/,注册一个账号,点击右上角sign up,进入注册页面,输入Email(邮箱)、Username(用户名)、Password(密码),勾选Send me occasional product updates and announcements对话框,点击Sign up按钮。

    接着,登录注册时填写的邮箱账号,docker注册成功,会向我们邮箱发送一封用于验证邮箱地址的邮件。打开邮件点击Verift Email Address用于验证邮箱属于你。

    • 登录Docker Hub账号

    回到首页,点击右上角sign in,输入Username和Password点击按钮Countine登录。

    点击页面右上角是邮箱,点击My Account->Security, 点击New Access Token按钮,设置一个token备注(Access Token Description),访问权限默认即可,根据实际情况设置。

    接下来,点击Generate按钮,会帮我们生成一个token。窗口信息包含了介绍信息,使用说明,及我们的access token。把token保存起来,比如存到文本文件中。窗口关闭,token无法再查看到。

    • 推送镜像

    假如我们注册时,Username是hello。

    ➜  ~ docker images
    REPOSITORY                                      TAG                       IMAGE ID       CREATED        SIZE
    hello-go                                        builder                   5a3c1fc3d461   3 days ago     18.1MB
    

    我们本地有一个名称为hello-go:builder的镜像。

    docker login -u hello  // hello 为注册时的用户名
    

    使用docker login命令登录到Docker Hub,按照提示输入密码,返回Login Succeeded表示登录成功。密码为上面生成的token。

    ➜  ~ docker tag hello-go:builder hello/hello-go:builder
    

    接着,给hello-go:builder打标签为hello/hello-go:builder

    ➜  ~ docker images
    REPOSITORY                                      TAG                       IMAGE ID       CREATED        SIZE
    hello/hello-go                            builder                   5a3c1fc3d461   3 days ago     18.1MB
    hello-go                                        builder                   5a3c1fc3d461   3 days ago     18.1MB
    

    通过,docker images查看镜像,多了一个的镜像hello/hello-go:builder

    ➜  ~ docker push hello/hello-go:builder
    The push refers to repository [docker.io/hello/hello-go]
    ff246f3a95bd: Pushed
    39e8dc02b56b: Pushed
    d4fc045c9e3a: Mounted from library/golang
    builder: digest: sha256:5912861727954fdb17fd73e85fa161112c29b5bc385bb8c0ac899f29ec8ead34 size: 945
    

    运行docker push hello/hello-go:builder命令推送到Docker Hub注册中心。

    至此,我们已经成功将镜像推送到Docker Hub注册中心中了。

    • 拉取Docker Hub中的镜像

    像我们平时拉取镜像一样,使用docker pull命令即可。

    ➜  ~ docker pull hello/hello-go:builder
    builder: Pulling from hello/hello-go
    Digest: sha256:5912861727954fdb17fd73e85fa161112c29b5bc385bb8c0ac899f29ec8ead34
    Status: Downloaded newer image for hello/hello-go:builder
    docker.io/hello/hello-go:builder
    

    使用docker pull hello/hello-go:builder命令,就可以拉取到我们在Docker Hub中存储的镜像了。本地已经删除了本地的hello/hello-go:builder镜像。

    2. 搭建私有注册中心供内部使用

    Docker Hub中为我们提供了搭建自己的Docker Registry注册中心的镜像。使用命令docker pull registry就可以拉取到本地。

    • 启动私有Registry

    docker run -d -p 5000:5000 --restart always --name registry registry:2

    默认注册地址localhost:5000。接下来就可以像上面推送镜像到Docker Hub中一样。使用我们本地的注册中心了。

    ➜  ~ docker run -d -p 5000:5000 --restart always --name registry registry:2
    Unable to find image 'registry:2' locally
    2: Pulling from library/registry
    79e9f2f55bf5: Pull complete
    0d96da54f60b: Pull complete
    5b27040df4a2: Pull complete
    e2ead8259a04: Pull complete
    3790aef225b9: Pull complete
    Digest: sha256:169211e20e2f2d5d115674681eb79d21a217b296b43374b8e39f97fcf866b375
    Status: Downloaded newer image for registry:2
    ➜  ~ docker ps
    CONTAINER ID   IMAGE        COMMAND                  CREATED         STATUS         PORTS
            NAMES
    a81bf2c80870   registry:2   "/entrypoint.sh /etc…"   4 minutes ago   Up 3 minutes   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   registry
    ➜  ~ docker tag hello-go:builder localhost:5000/hello-go:builder
    ➜  ~ docker push localhost:5000/hello-go:builder
    The push refers to repository [localhost:5000/hello-go]
    ff246f3a95bd: Pushed
    39e8dc02b56b: Pushed
    d4fc045c9e3a: Pushed
    builder: digest: sha256:5912861727954fdb17fd73e85fa161112c29b5bc385bb8c0ac899f29ec8ead34 size: 945
    

    docker run -d -p 5000:5000 --restart always --name registry registry:2命令启动本地注册中心。docker ps查看运行状态,可以看到已经启动成功了。

    使用docker push localhost:5000/hello-go:builder打标签。

    最后,使用docker push localhost:5000/hello-go:builder推送到我们本地的注册中心。推送和拉取同时用Docker Hub注册中心进行推送和拉取是一致的。

    3. 通过域名访问私有仓库

    为了方便和安全,可以配置Nginx作为反向代理,并使用HTTPS加密传输,这需要为域名配置SSL证书。将Nginx配置指向私有Registry服务的IP和端口,并正确设置相关代理头部。

    使用nginx进行反向代理,并配置证书。

    server {
        listen 80;
        listen [::]:80;
        server_name hub.x.cn;
        
        listen 443 ssl;
        ssl_certificate /root/cert/hub.x.cn.crt;
        ssl_certificate_key /root/cert/hub.x.cn.key;
        
        location / {
            proxy_pass http://192.168.31.23:5000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    

    以上是一个nginx示例配置。关于证书生成,推荐百度一下,资料贼多。

    如果局域网内搭建,需要在Docker守护进程配置中加入insecure-registries选项,并重启Docker服务,使得客户端能信任此私有Registry的证书。修改/etc/docker/daemon.json

    {
        "insecure-registries": ["hub.x.cn"]
    }
    

    重启docker,在系统运行systemctl restart docker。之后就可以使用域名推送到我们的私有仓库了。

    这样,无论是公有还是私有环境,都可以有效地管理和分发Docker镜像。对于私有环境,通过域名访问不仅增加了便利性,也增强了安全性。

    读完后,忍不住要加个关注!不是我吹,但你会后悔没关注的!

    相关文章

      网友评论

        本文标题:压箱底的技巧!教你搭建本地注册中心!

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