我们知道可以使用hub.docker.com作为我们公共或者私有的registry。但由于服务器在国外的原因,网速会非常的慢。
所以我们在利用docker开发构建容器服务时,我们希望能够建立自己的私有registry,上传镜像值我们的私有registry中心,然后在其他物理机上部署的时候,可以快速的pull,然后实现大规模的分发以及部署,提高效率。
下面将会说一下如何通过registry容器实现这个

环境:centos7.0,  docker1.13.1版本

docker1.12版本以后,docker的可执行文件从/usr/bin/docker变成了/ussr/bin/dockerd,每一个版本在不同的环境下,dockerd的daemon都是不同的配置,具体的要根据docker官网的指导进行配置。我们在网上可以看到很多关于如何配置docker的daemon启动参数教程,以及一些出现的问题,其实大部分都是讲的比较乱的,或者不根据自己的实际系统和docker版本去确定如何配置的,因为不同的系统版本和docker版本具体的opts的选项是不同的,这个配置的文件的位置也是不一样的,如果没清楚整个区别,就跟着网上的改来改去,最后配置还是没能生效。

(1)无认证的registry
在环境中,dockerd的配置文件在/etc/docker/daemon.json中,如果没有该文件,可以手动创建。

第一步:pull docker官方的registry的第二个版本,docker1.6版本以上支持registry2
docker pull registry:2.6.0

或者docker pull registry 不指定版本,表示latest版本

第二步:配置daemon.json,去掉docker默认的https的访问
vim /etc/docker/daemon.json
里面的内容是一个json对象,加上一项insecure-registries,地址自己更改:
{
"insecure-registries":["192.168.1.78:5000"]
}

然后重启docker,执行
systemctl daemon-reload docker
systemctl restart docker

第三步:无认证启动registry容器
docker run -d --name registry -p 5000:5000 --restart=always -v /opt/registry/:/var/lib/registry/ registry:2.6.0
上传到私有镜像的镜像到时是默认存放在容器的/var/lib/registry/,为了防止删除registry,上传的镜像也被删除,所以启用一个volume,将上传的镜像持久化保存在我们物理机上,这里保存位置是/opt/registry/

第四步:测试是否启动容器
curl http://192.168.1.78:5000/v2/_catalog

如果返回{"repositories":[]},代表启动成功了!

第五步:测试上传到我们自己的私有registry
将nginx这个镜像重命名tag
docker tag nginx 192.168.1.78:5000/mynginx
这里需要注意的是重命名的tag必须带有建立192.168.1.78:5000/这个前缀,后面的mynginx是新镜像名。
然后开始进行push到我们建立的私有registry
docker push 192.168.1.78:5000/mynginx
再通过运行
curl http://192.168.1.78:5000/v2/_catalog
可以看到返回{"repositories":["mynginx"]}
说明已经push到了自己的registry

第六步:测试pull
同样还是在本机上进行pull
首先删除本机存在的镜像192.168.1.78:5000/mynginx(刚才通过tag重命名的)
docker rmi 192.168.1.78:5000/mynginx
然后
docker images
可以看到已经没有了192.168.1.78:5000/mynginx这个镜像
下面开始pull这个镜像
docker pull 192.168.1.78:5000/mynginx
然后再看
docker images
可以看到出现这个192.168.1.78:5000/mynginx
说明pull成功了

第七步:在其他的物理机上pull这个镜像
同样需要在安装docker,然后再/etc/docker/daemon.json这个文件中
添加insecure-registries,ip地址自己更改:
{
"insecure-registries":["192.168.1.78:5000"]
}
然后重启docker,执行
ststemctl daemon-reload docker
systemctl restart docker
docker pull 192.168.1.78:5000/mynginx 
这样子就可以从自己的registry拉取镜像了,当然也可以上传镜像
假如有一个mynginx:1.1
docker tag 192.168.1.78:5000/mynginx 192.168.1.78:5000/mynginx:1.1
docker push 192.168.1.78:5000/mynginx:1.1
其实192.168.1.78:5000/这个就是建立的私有registry的地址

无认证的registry已经完成了,特别在局域网内部开发或者线上部署时非常有用!

下一节将会总结一下关于认证模式的registry,欢迎留意!

docker-建立私有registry的更多相关文章

  1. docker搭建私有registry

    搭建docker的私有registry 1.   registry简介 Docker在2015年推出了distribution项目,即Docker Registry 2.相比于old registry ...

  2. Docker建立本地Registry

    从容器运行一个Registry # docker run -p : registry 查看yelinyuntest/static_web镜像 # docker images yelinyuntest/ ...

  3. docker 建立私有仓库,24.205为镜像仓库所在主机

    一.下载registry #yum install -y python-devel libevent-devel python-pip gcc xz-devel #python-pip install ...

  4. [docker]搭建私有registry

    导入导出镜像比较麻烦,共享镜像占了工作中一大部分时间. 搭建了个本地registry, 不支持用户名密码验证的 和 支持用户名密码验证的两种. 参考: https://docs.docker.com/ ...

  5. 为docker私有registry配置nginx反向代理

    公司的Docker私有registry已经搭建好了,用官方的registry image很容易就搭建好了.现在就是要用nginx的反向代理把它放出来,以便在外网可以访问. 我的上一篇blog 讲了如何 ...

  6. Docker:私有仓库registry [十一]

    一.运行docker私有仓库 安装registry docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregi ...

  7. 9、Docker私有registry

    Docker Registry分类 Docker 默认是使用https的,但是如果在自己得私有局域网中,你指明使用http也是可以的. Registry主要的作用是托管镜像: 运行docker reg ...

  8. Docker 私有registry出现的证书问题

    在上一篇 最近搭建的私有registry里,参考的文章指出,在push时可能出现问题: 可能会出现无法push镜像到私有仓库的问题.这是因为我们启动的registry服务不是安全可信赖的.这是我们需要 ...

  9. docker 私有registry 配置

    备注:此处使用linux镜像配置仓库 registry 启动步骤 https://hub.docker.com/_/registry/ docker login docker pull registr ...

  10. docker网络 存储卷 Dockerfile 私有registry

    1.bridge模式 docker run --name bu1 -it --network bridge --rm busybox # 相当于 docker run --name bu1 -it - ...

随机推荐

  1. EasyNVR无插件直播服务器播放页面的集成----单独的播放器样式

    背景需求: EasyNVR自身拥有独立的客户端体系,安卓和IOS拥有各自独立的APP, 安卓下载地址:https://fir.im/EasyNVR: IOS下载可直接在APPstore搜索EasyNV ...

  2. Spring标签@Aspect-实现面向方向编程(@Aspect的多数据源自动加载)——SKY

    从Spring 2.0开始,可以使用基于schema及@AspectJ的方式来实现AOP.由于@Aspect是基于注解的,因此要求支持注解的5.0版本以上的JDK. 环境要求:    1. mybit ...

  3. Python学习笔记_Python基础

    Python 基础 语句和语法 凝视 继续 代码组 代码的缩进 在一行书写多个语句 模块 变量赋值 赋值操作符 增量赋值 多重赋值 多元赋值 python编写的基本风格 模块的结构和布局 内存管理 变 ...

  4. MySql四种隔离级别

    什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有 ...

  5. 蓝屏代码stop:0X000000EA(0X85E286B8,0X8635F210,0XF7A53CBC,0X00000001)

    你这是显卡驱动问题,我把蓝屏代码都给你,以后在出现蓝屏自己看看行了. 1.0x0000000A:IRQL_NOT_LESS_OR_EQUAL ◆错误分析:主要是由问题的驱动程序.有缺陷或不兼容的硬件与 ...

  6. dig指定服务器查询域名解析时间

    time=$(dig @8.8.8.8 baidu.com | grep Query | awk '{print $4}') echo $time 一 nslookup指定服务器查询域名解析时间 ro ...

  7. C#判断VS是否处于设计模式

    public class CheckDesingModel { public static bool IsDesingMode() { bool ReturnFlag = false; if (Lic ...

  8. Java多线程系列 JUC锁07 ConditionObject分析

    ConditionObject ConditionObject是AQS中的内部类,提供了条件锁的同步实现,实现了Condition接口,并且实现了其中的await(),signal(),signalA ...

  9. path.join()和path.resolve()区别

    一.区别 1.path.join() 方法使用平台特定的分隔符作为定界符将所有给定的 path 片段连接在一起,然后规范化生成的路径. 2.path.resolve() 方法将路径或路径片段的序列解析 ...

  10. [原创]java WEB学习笔记03:使用eclipes开发javaWEB项目

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...