• Docker 搭建 registry 私有仓库


    拉取 nginx 最新版镜像:

    docker pull registry:latest

    为 registry 创建一个文件夹:

    mkdir -p /home/docker/registry/

    启动 registry 容器:

    docker run --name registry01 -d --restart=always -v /home/docker/registry/:/var/lib/registry/ -p 6000:5000 registry

    因为宿主机的 5000 端口被占用了,所以我就改用了 6000 端口

    在启动 registry 容器后,使用 -v 参数映射时会自动创建 docker/registry/ 目录,所以主机的映射目录就变成了:/home/docker/registry/docker/registry/... ,对于强迫症患者来说,实在太别扭了,所以直接映射到主机的 home/ 文件夹即可,停止并删除容器,然后重新执行:

    docker run --name registry01 -d --restart=always -v /home/:/var/lib/registry/ -p 6000:5000 registry

    registry 容器已成功运行,需要验证一下:

    curl http://localhost:6000/v2/_catalog

    若能正常访问 registry 接口 _catalog,证明 registry 服务启动成功。

    在安装并成功启动 registry 服务后,还需要配置一下,编辑 /etc/docker/daemon.json 文件,添加配置代码 "insecure-registries":["localhost:6000"],然后执行 systemctl daemon-reload 重新加载配置,因为镜像在推送到仓库的时候,可能会遇到问题:http: server gave HTTP response to HTTPS client,默认是使用 https 协议的,但我们的仓库是使用的http,所以要么创建一个https映射,要么将仓库地址加入到不安全的仓库列表中。

    下面我们来试一下,push 一个镜像到刚刚创建的私有仓库中,但在 push 之前需要先创建用户:

    docker login localhost:6000
    Username: zzy0209
    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
    

    为了指定镜像上传的目标地址,需要在镜像名称前加上私有仓库的访问地址和用户名,具体镜像名称格式如下:REGISTRY_HOST/USERNAME/IMAGE_NAME:TAG

    可以通过 docker tag 命令来修改镜像的名称:

    docker tag am/service_gateway:74a5635 localhost:6000/zzy0209/am/service_gateway:74a5635

    最后,将这个镜像 push 到私有仓库中:

    docker push localhost:6000/zzy0209/am/service_gateway

    再通过 registry 的 _catalog 接口验证一下:

    curl http://localhost:6000/v2/_catalog
    {"repositories":["zzy0209/am/service_gateway"]}
    

    OK~

    补充:设置仓库允许跨域访问

    先复制一份 config.yml 配置文件
    docker cp registry01:/etc/docker/registry/config.yml /home/docker/registry/config.yml

    添加跨域配置后保存
    vi /home/docker/registry/config.yml

    version: 0.1
    log:
      fields:
        service: registry
    storage:
      cache:
        blobdescriptor: inmemory
      filesystem:
        rootdirectory: /var/lib/registry
    http:
      addr: :5000
      headers:
        X-Content-Type-Options: [nosniff]
        Access-Control-Allow-Headers: ['Origin,Accept,Content-Type,Authorization']
        Access-Control-Allow-Origin: ['*']
        Access-Control-Allow-Methods: ['GET,POST,PUT,DELETE']
    health:
      storagedriver:
        enabled: true
        interval: 10s
        threshold: 3
    

    删除之前的容器,重新创建容器,并挂载 config.yml 配置文件

    docker rm -f registry01
    docker run --name registry01 -d --restart=always -v /home/:/var/lib/registry/ -v /home/docker/registry/config.yml:/etc/docker/registry/config.yml -p 6000:5000 registry
    
    一个简单的记录,希望有所帮助!
  • 相关阅读:
    vue element-ui,上传文件加载进度条显示效果(使用定时器实现源码分享)
    vue element-ui 上传文件的 :on-progress钩子无法触发的原因及报错原因
    vue打包文件后首次加载速度慢解决方法----1.压缩文件js.css 2.使用cdn加载
    vue 报错 RangeError: Maximum call stack size exceeded
    vue在IE11报错‘vuex requires a Promise polyfill in this browser.’
    轻松理解MYSQL MVCC 实现机制
    推荐:mysql锁 innodb下的记录锁,间隙锁,next-key锁
    MySQL的四种事务隔离级别
    php中文件上传大小限制如何修改
    Https原理及流程
  • 原文地址:https://www.cnblogs.com/journet/p/12789610.html
Copyright © 2020-2023  润新知