搭建自己的docker registry,非生产环境

版本信息
     ubuntu 16.04
    docker 1.11.2
    registry 2

本地安装registry
由于docker中registry的latest版本为1.x, 所以我们指定安装版本2。
   
   
  1. docker pull registry:2
通过这个image创建一个 Container
    
    
  1. docker run -p 5000:5000 -d --name=local_registry registry:2
  2. docker ps
之后使用docker ps查看就能看到名为 local_registry的container已经在后台运行了。
 测试registry
从官方下载hello-world image 用以 测试 , 192.168.223.132是本机局域网IP
    
    
  1. docker pull hello-world:latest
  2. docker tag hello-world:latest 127.0.0.1:5000/hello-world
  3. docker tag hello-world:latest 192.168.223.132:5000/hello-world
进入container容器查看
     
     
  1. docker exec -i -t local_registry /bin/sh
  2. 或者
  3. docker exec -i -t local_registry /bin/bash
  这个就看到了我们的上传的image了, 由于使用registry:2所以在容器中上传的image存在 /var/lib/registry中,我们将其删除。
然后exit退出容器。 
如果再按照这个地址push, 就会出现错误。
    
    
  1. docker push 192.168.223.132:5000/hello-world
  这是由于使用https原因,查了很多,都说在/etc/default/docker中修改 DOCKER_OPTS, 然后重启docker。 然而这并 没有什么卵用
所以,这种方式只能用于本地主机,不能用在局域网中。所以,我们采取官方推荐的,用https,自建证书



搭建https regsitry

server 端:
  • 生成自签名证书
      
      
  1. mkdir -p ~/registry/certs && cd ~/registry/certs
  2. openssl req -x509 -days 3650 -subj '/CN=reg.domain.com/' -nodes -newkey rsa:2048 -keyout registry.key -out registry.crt
这个由于ca认证不支持ip地址,所以采用域名,之后在hosts中添加映射就可以了。
  • 添加域名
在 /etc/hosts 添加一行 192.168.1.102 reg.domain.com
     
     
  1. vim /etc/hosts

  • 生成用户名密码
     
     
  1. mkdir -p ~/registry/auth && cd ~/registry/auth
  2. $ docker run --rm --entrypoint htpasswd registry:2 -Bbn testuser password > ./htpasswd
使用registry:2中的 htpasswd 生成用户名密码 testuser password 并存到本地。
  • 创建证书目录
      
      
  1. mkdir -p /etc/docker/certs.d/reg.domain.com:5000
  2. cp ~/registry/certs/registry.crt /etc/docker/certs.d/reg.domain.com:5000
  • 启动registry , 删除之前的 local_registry
        
        
  1. docker stop local_registry && docker rm local_registry
  2. $ docker run -d -p 5000:5000 --name=registry --restart=always -v ~/registry/auth:/auth -v ~/registry/certs:/certs -v /data/registry:/var/lib/registry -e REGISTRY_AUTH=htpasswd -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt -e REGISTRY_HTTP_TLS_KEY=/certs/registry.key registry:2
如果启动之后 5000端口没有监听,尝试将-d 放到-p的后面

client 端:
  • 证书相关 
    通过scp将证书copy到本地
         
         
  1. sudo mkdir -p /etc/docker/certs.d/reg.domain.com:5000
  2. $ sudo scp -r todd@192.168.223.132:/home/todd/registry/certs/registry.crt /etc/docker/certs.d/reg.domain.com:5000
测试
登录输入之前设置的 testuser 和 password
      
      
  1. docker login reg.domain.com:5000
  2. Username: testuser
  3. Password: password
  4. docker pull hello-world
  5. docker tag hello-world:latest reg.domain.com:5000/hello-world
  6. docker push reg.domain.com:5000/hello-world
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值