转:http://blog.csdn.net/felix_yujing/article/details/51564739

新版 registry v2对镜像存储格式进行了重新设计,并且和旧版还不兼容。registry v2是由go语言开发,docker从1.6版本开始支持registry v2,之前python开发的老版registry在网上已被标为废弃了(没有维护更新,但也可以用)。

之前在测试环境搭建了一个老版的registry,用了也比较久了。为了跟上技术的脚步,也准备今后使用新版registry v2。由于对旧版是不兼容的,所以之前仓库的数据目录还不能直接拿来挂载,只好重新做个新的,镜像只好等以后慢慢再放上去了。下面对我这次配置的步骤简单的介绍一下。

0. 服务器环境
本次使用centos7.1的操作系统,服务器IP假设为:192.168.0.100
预先装好docker服务,操作如下:

  1. yum install docker -y
  2. systemctl enable docker
  3. systemctl start docker

1. 获取最新的registry的容器
了解到目前最新版为2.4.1,于是直接使用docker pull命令从公用仓库去拉即可

  1. docker pull registry:2.4.1

2. 运行registry:2.4.1容器
这里需要注意的是新registry仓库数据目录的位置。之前老版的位置是/tmp/registry,hub.docker.com上的演示命令里写的是/tmp/registry-dev,其实这个不对。试验证明,新registry的仓库目录是在/var/lib/registry,所以运行时挂载目录需要注意。

  1. docker run -d -p 5000:5000 --restart=always \
  2. -v /opt/registry-var/:/var/lib/registry/ \
  3. registry:2.4.1

-v选项指定将/opt/registry-var/目录挂载给/var/lib/registry/
当使用curl http://192.168.0.100:5000/v2/_catalog能看到json格式的返回值时,说明registry已经运行起来了。

3. 修改配置文件以指定registry地址
上面registry虽然已经运行起来了,但是如果想用push命令上传镜像是会报错的,需要在配置文件中指定registry的地址。在/etc/sysconfig/docker文件中添加一下配置:

  1. ADD_REGISTRY='--insecure-registry 192.168.0.100:5000'

为了配置简单,省去安全相关的配置,这里使用--insecure-registry选项。
修改配置文件后,一定要重启docker服务才能生效,所以:

  1. systemctl restart docker

这时再push就可以上传镜像到所搭建的registry仓库了。需要注意的是,上传前要先给镜像tag一个192.168.0.100:5000/为前缀的名字,这样才能在push的时候存到私库。

  1. docker tag docker.io/registry:2.4.1 192.168.0.100:5000/registry:2.4.1
  2. docker push 192.168.0.100:5000/registry:2.4.1

4. 配置带用户权限的registry
到上面为止,registry已经可以使用了。如果想要控制registry的使用权限,使其只有在登录用户名和密码之后才能使用的话,还需要做额外的设置。
registry的用户名密码文件可以通过htpasswd来生成:

  1. mkdir /opt/registry-var/auth/
  2. docker run --entrypoint htpasswd registry:2.4.1 -Bbn felix felix  >> /opt/registry-var/auth/htpasswd

上面这条命令是为felix用户名生成密码为felix的一条用户信息,存在/opt/registry-var/auth/htpasswd文件里面,文件中存的密码是被加密过的。
使用带用户权限的registry时候,容器的启动命令就跟上面不一样了,将之前的容器停掉并删除,然后执行下面的命令:

  1. docker run -d -p 5000:5000 --restart=always \
  2. -v /opt/registry-var/auth/:/auth/ \
  3. -e "REGISTRY_AUTH=htpasswd" \
  4. -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  5. -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  6. -v /opt/registry-var/:/var/lib/registry/ \
  7. registry:2.4.1

这时,如果直接想查看仓库信息、pull或push都会出现权限报错。必须先使用docker login 命令来登录私有仓库:

  1. docker login 192.168.0.100:5000

根据提示,输入用户名和密码即可。如果登录成功,会在/root/.docker/config.json文件中保存账户信息,这样就可以继续使用了。

docker 笔记 (6)搭建本地registry的更多相关文章

  1. 搭建本地 Registry - 每天5分钟玩转 Docker 容器技术(20)

    Docker Hub 虽然非常方便,但还是有些限制,比如: 需要 internet 连接,而且下载和上传速度慢. 上传到 Docker Hub 的镜像任何人都能够访问,虽然可以用私有 reposito ...

  2. 020、搭建本地Registry(2019-01-11 周五)

    参考https://www.cnblogs.com/CloudMan6/p/6902325.html   Docker Hub 虽然方便,但还是有些限制,比如     1.需要Internet连接,上 ...

  3. 第 3 章 镜像 - 020 - 搭建本地 Registry

    Docker Hub 虽然非常方便,但还是有些限制,比如: 需要 internet 连接,而且下载和上传速度慢. 上传到 Docker Hub 的镜像任何人都能够访问,虽然可以用私有 reposito ...

  4. Docker容器之搭建本地私有仓库

    Docker容器之搭建本地私有仓库 本地私有仓库搭建的具体步骤 首先下载 registry 镜像 docker pull registry 在 daemon.json 文件中添加私有镜像仓库的地址并重 ...

  5. Docker 搭建本地Registry

    Docker已经将Registry开源,Registry本身也是一个容器. 1. 修改配置/etc/docker/daemon.json,去掉docker默认的https的访问   里面的内容是一个j ...

  6. 利用Docker Compose快速搭建本地测试环境

    前言 Compose是一个定义和运行多个Docker应用的工具,用一个YAML(dockder-compose.yml)文件就能配置我们的应用.然后用一个简单命令就能启动所有的服务.Compose编排 ...

  7. docker搭建本地registry

    第一步:拉取registry镜像 [root@localhost iso]# docker image pull registry Using default tag: latest latest: ...

  8. 18-搭建本地 Registry

    Docker Hub 虽然非常方便,但还是有些限制,比如: 需要 internet 连接,而且下载和上传速度慢. 上传到 Docker Hub 的镜像任何人都能够访问,虽然可以用私有 reposito ...

  9. docker使用registry搭建本地私有仓库

    参考链接来自:http://blog.csdn.net/wangtaoking1/article/details/44180901/ 和Mavan的管理一样,Dockers不仅提供了一个中央仓库,同时 ...

随机推荐

  1. Java -- JDBC 操作mysql数据库

    1. Demo1 导包时 不要导具体的mysql包, 为了兼容性,导JDBC 中 sql的包既可以了. public class Demo1 { /** * @param args * @throws ...

  2. Linux嵌入式 -- 内核 (arm) & 文件系统

    1. make distclean 2. 配置内核  ----> 生成 .config文件 make menuconfig ARCH=arm Makefile文件分析: 3.  编译内核 mak ...

  3. pandas读取Excel

    time31 = pd.read_excel('F:/save_file/3问出车表.xlsx', sheetname='Sheet1') # 读取‘3问出车表.xlsx’中的Sheet1表单, ti ...

  4. Python ssh 远程执行shell命令

    工具 python paramiko 远程执行命令 import paramiko ssh = paramiko.SSHClient() key = paramiko.AutoAddPolicy() ...

  5. Live disk migration with libvirt blockcopy

    nova采用 libvirt blockcopy(python  API virDomainBlockRebase)来做live snapshot. Create the base image: $ ...

  6. 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它

    dpkg应用程序被占用 错误提示: E: 无法获得锁 /var/lib/dpkg/lock – open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他 ...

  7. 使用memcache 心得和注意事项

    内存分配机制:首先要说明的是Memcached支持最大的存储对象为1M.它的内存分配比较特殊,但是这样的分配方式其实也是对于性能考虑的,简单的分配机制可以更容易回收再分配,节省对于CPU的使用.这里用 ...

  8. crontab 总结

    crontab -e --------- linux定时任务提示-bash: crontab: command not found 执行 crontab 命令如果报 command not found ...

  9. javascript网页复制功能-复制到粘贴板-兼容多数浏览器(不使用flash)

    使用方法:clipBordCopy("hello Copy");//执行后复制hello Copy到粘贴板 通过 var result = clipBordCopy("h ...

  10. MySQL实战 | 05 如何设计高性能的索引?

    原文链接:MySQL | 05 如何设计高性能的索引? 上回我们主要研究了为什么使用索引,以及索引的数据结构.今天带你了解如何设计高性能的索引. 其中,有这么一个点,说的是 InnoDB 引擎中使用的 ...