一、关于Registry

官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去。

但是有时候我们的使用场景需要我们拥有一个私有的镜像仓库用于管理我们自己的镜像。这个可以通过开源软件Registry来达成目的。

Registry在github上有两份代码:老代码库和新代码库。老代码是采用python编写的,存在pull和push的性能问题,出到0.9.1版本之后就标志为deprecated,不再继续开发。

从2.0版本开始就到在新代码库进行开发,新代码库是采用go语言编写,修改了镜像id的生成算法、registry上镜像的保存结构,大大优化了pull和push镜像的效率。

官方在Docker hub上提供了registry的镜像,我们可以直接使用该registry镜像来构建一个容器,搭建我们自己的私有仓库服务。


二、搭建Registry

首先搜索并拉取镜像

  1. docker search registry    # 建议先搜索一下,可以看一下相关的镜像,说不定哪天就有更好的镜像了
  2. docker pull registry    # 标签可以不加,因为当前最新就是v2

  运行一个registry容器

  1. docker run -d \ # 后台运行
  2. --name registry-srv \ # 指定容器名
  3. --restart=always \ # 设置自动启动
  4. -p 5000:5000 \ # 端口映射宿主机,通过宿主机地址访问
  5. -v /opt/zwx-registry:/var/lib/registry \ # 把镜像存储目录挂载到本地,方便管理和持久化
  6. -v /opt/zwx-registry/srv-config.yml:/etc/docker/registry/config.yml \ # 把配置文件挂载到本地,方便修改和保存
  7. registry

  srv-config.yml内容如下

  标红delete参数设置为true,是为了让仓库支持删除功能。默认没有这个参数,也就是不能删除仓库镜像。

  1. version: 0.1
  2. log:
  3. fields:
  4. service: registry
  5. storage:
  6. delete:
  7. enabled: true
  8. cache:
  9. blobdescriptor: inmemory
  10. filesystem:
  11. rootdirectory: /var/lib/registry
  12. http:
  13. addr: :5000
  14. headers:
  15. X-Content-Type-Options: [nosniff]
  16. health:
  17. storagedriver:
  18. enabled: true
  19. interval: 10s
  20. threshold: 3

  注册https协议(否则push安全认证过不去)

  需要通过本地仓库下载镜像,均需要配置  

  1. vim /etc/docker/daemon.json        # 默认无此文件,需自行添加,有则追加以下内容。
  2. { "insecure-registries":["xx.xx.xx.xx:5000"] }  # 指定IP地址或域名
  3. systemctl daemon-reload # 守护进程重启
  4. systemctl restart docker # 重启docker服务

镜像上传与下载

  1. docker push xx.xx.xx.xx:5000/nginx # 一定要注明仓库地址,否则会报错
  2. docker pull xx.xx.xx.xx:5000/nginx

  查看仓库镜像信息

  1. curl -XGET http://xx.xx.xx.xx:5000/v2/_catalog    # 查看仓库镜像列表(也可以通过windows浏览器打开查看)
  2. curl -XGET http://xx.xx.xx.xx:5000/v2/image_name/tags/list  # 查看指定应用镜像tag

三、搭建Registry web

首先搜索并拉取镜像

  1. docker search docker-registry-web
  2. docker pull hyper/docker-registry-web    # 这个镜像用的人较多

  运行一个registry web容器

  1. docker run -d \ # 后台运行
  2. --name registry-web \ # 指定容器名
  3. --restart=always \ # 设置自动启动
  4. -p 8000:8080 \ # 端口映射宿主机,通过宿主机地址访问
  5. -v /opt/zwx-registry/web-config.yml:/etc/config.yml \ # 把配置文件挂载到本地,方便修改和保存
  6. hyper/docker-registry-web

  web-config.yml文件内容如下

标红readonly参数设置为false,是为了web页面可以显示删除按钮。默认是true,只读状态,没有删除按钮,只能查看。

  1. registry:
  2. # Docker registry url
  3. url: http://10.88.77.32:5000/v2
  4. # Docker registry fqdn
  5. name: localhost:5000
  6. # To allow image delete, should be false
  7. readonly: false
  8. auth:
  9. # Disable authentication
  10. enabled: false

部署完成后,浏览器打开仓库UI地址即可查看到所有应用镜像

选择任意应用镜像库,即可查看到该镜像的所有tag信息,每个tag后面都有个删除按钮(默认没有,配置参考config.yml)


四、快捷部署

  集群模式可以通过docker stack快速部署registry和registry web。

  新建配置文件srv-config.yml、web-config.yml放到指定路径,再新建docker-compose.yml文件,执行命令即可。

  1. docker stack deploy -c docker-compose.yml RGT
  1. version: '3.7'      # docker stack 需要是3.0以上版本
  2. services:
  3. registry-srv:      # 服务名
  4. image: registry
  5.  
  6. ports:         # 映射端口
  7. - 5000:5000
  8.  
  9. volumes:        # 挂载镜像路径和配置文件,注意修改路径与实际一致
  10. - /opt/zwx-registry:/var/lib/registry
  11. - /opt/zwx-registry/srv-config.yml:/etc/docker/registry/config.yml
  12.  
  13. deploy:        # 设置单任务,并约束主节点运行
  14. mode: replicated
  15. replicas: 1
  16. placement:
  17. constraints:
  18. - node.role == manager
  19.  
  20. registry-web:      # 服务名  
  21. image: hyper/docker-registry-web
  22.  
  23. ports:        # 映射端口
  24. - 8000:8080
  25.  
  26. volumes:      # 挂载配置文件,注意修改路径与实际一致
  27. - /opt/zwx-registry/web-config.yml:/conf/config.yml
  28.  
  29. environment:
  30. - REGISTRY_URL=http://registry-srv:5000/v2
  31. - REGISTRY_NAME=localhost:5000
  32.  
  33. deploy:        # 设置单任务,并约束主节点运行
  34. mode: replicated
  35. replicas: 1
  36. placement:
  37. constraints:
  38. - node.role == manager

 作者:Leozhanggg

出处: https://www.cnblogs.com/leozhanggg/p/12050322.html

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

Docker私有仓库搭建与界面化管理的更多相关文章

  1. Docker学习笔记 — Docker私有仓库搭建

    Docker学习笔记 — Docker私有仓库搭建   目录(?)[-] 环境准备 搭建私有仓库 测试 管理仓库中的镜像 查询 删除 Registry V2   和Mavan的管理一样,Dockers ...

  2. CentOS7 Docker私有仓库搭建及删除镜像 【转】

    文章来源:centos7 Docker私有仓库搭建及删除镜像 如果不想用私有镜像库,你可以用docker的库 https://hub.docker.com 环境准备 环境:两个装有Docker 17. ...

  3. 【转载】使用宝塔对Linux系统进行界面化管理操作

    腾讯云服务器和阿里云服务器的Centos系统都是没有Linux系统的一个版本,Centos系统的操作都是在没有类似Windows图形化操作界面的黑框框命令窗口进行操作的,需要使用到很多Linux操作命 ...

  4. docker私有仓库搭建(ubuntu 14.04和centos7)

    最近是在做一个关于docker云化的项目,马上就要开始实战.下午先做了一个私有仓库搭建的实验,先大概做个笔记,有兴趣的蛮看一下吧. 先在所有机子上都安装上docker,我的是两台ubuntu,分别是1 ...

  5. Cloudera Hadoop 4 实战课程(Hadoop 2.0、集群界面化管理、电商在线查询+日志离线分析)

    课程大纲及内容简介: 每节课约35分钟,共不下40讲 第一章(11讲) ·分布式和传统单机模式 ·Hadoop背景和工作原理 ·Mapreduce工作原理剖析 ·第二代MR--YARN原理剖析 ·Cl ...

  6. Docker学习笔记 — Docker私有仓库搭建【转载】

    标签: Docker 2015-03-10 21:08 24190人阅读 评论(0) 收藏 举报  分类: Docker(26)    目录(?)[+]   和Mavan的管理一样,Dockers不仅 ...

  7. CentOS环境下Docker私有仓库搭建

    本文讲述如何搭建docker私有仓库. 有了docker hub,为什么还要搭建docker私有仓库? 1.性能考虑:docker hub的访问要通过互联网,性能太低. 2.安全性:更多的时候,镜像不 ...

  8. docker私有仓库搭建和资源限制

    Docker 私有仓库的搭建 docker 私有仓库默认只支持https协议的访问  不支持http协议 如果需要允许通过http协议访问 必须手动修改配置文件 docker官方默认提供的仓库  提供 ...

  9. centos7 docker私有仓库搭建

    习Docker的过程中Docker的私有仓库一直没能成功,就是因为CentOS 6.x和CentOS 7默认引入了支持https认证,每次在push和pull的时候都会报错,今天是周末,利用一天的时间 ...

随机推荐

  1. TCP time_wait close_wait问题(可能是全网最清楚的例子)

    背景 公司群里,运维发现一个问题,task服务报错(如下) The stream or file \"/data/logs/adn_task/offer_service.log\" ...

  2. suseoj 1212: 推箱子问题(bfs)

    1212: 推箱子问题 时间限制: 1 Sec  内存限制: 128 MB提交: 60  解决: 13[提交][状态][讨论版][命题人:liyuansong] 题目描述 码头仓库是划分为n×m个格子 ...

  3. Github相关知识

    github的提交流程 mkdir 目录名      :创建一个空文件夹 mkdir webs webs代表创建的新文件名称 cd 目录名   :切换到文件夹 cd webs 切换到当前新建的目录下 ...

  4. 在阿里云服务器中配置JDK、tomcat、mysql

    阿里云服务器搭建配置 linux命令:参考:https://www.cnblogs.com/itdansan/p/8545187.html cat 文件名: 查看文件内容 ctrl+D : 退出查看 ...

  5. SCAU-1078 破密-数学的应用

        另外一种方法和该题的题目在这位大佬的博客里 SCAU 1078 破密 还可以参考 https://blog.csdn.net/sinat_34200786/article/details/78 ...

  6. 百度杯 十一月 的一道pwn题复现

    拿到题后,就直接开鲁.. /ctf/pwn# checksec pwnme [*] '/ctf/pwn/pwnme' Arch: amd64--little RELRO: Full RELRO Sta ...

  7. Netty Pipeline与ChannelHandler那些事

    Pipeline和ChannelHandler是Netty处理流程的重要组成部分,ChannelHandler对应一个个业务处理器,Pipeline则是负责将各个ChannelHandler串起来的& ...

  8. 不止面试02-JVM内存模型面试题详解

    第一部分:面试题 本篇文章我们将尝试回答以下问题: 描述一下jvm的内存结构 描述一下jvm的内存模型 谈一下你对常量池的理解 什么情况下会发生栈内存溢出?和内存溢出有什么不同? String str ...

  9. Xamarin.Forms学习系列之Android集成极光推送

    一般App都会有消息推送的功能,如果是原生安卓或者IOS集成消息推送很容易,各大推送平台都有相关的Sample,但是关于Xamarin.Forms的消息推送集成的资料非常少,下面就说下Xamarin. ...

  10. 【数据结构】之队列(Java语言描述)

    在[这篇文章]中,我简单介绍了队列的基本数据结构及操作方式,并用C语言代码描述了队列的基本功能实现. JDK中默认为我们提供了队列的API—— Queue . Queue是一个接口,其中提供了处理队列 ...