docker搭建私有仓库

紧接上一篇镜像发布到官方以后,咱们来搭建咱们本身的私有仓库,比较,若是真的要在生产环境使用的话,这是必须的。
首先,咱们来准备一下搭建私有仓库所须要的信息。html

#先吧私有仓库down下来,这须要一点时间,恰好这中间的时间,咱们能够准备一下其余的东西
docker pull registry

紧接着,registry须要https运行环境,因此来生成咱们本身的证书(简单说明一下,目前的registry版本是2,以前的1是支持非ssl的,docker在0.9如下。)
先交代一下环境:物理机是win10,使用hyper-v 虚拟一个cenots(ip:192.168.50.2)做为咱们的docker host。使用内部网络,物理机共享本地网络方式链接上网。私有仓库使用域名local.registry.docker.com,端口:3075。node

#建立证书文件夹
mkdir certs
#建立registry登陆用户配置文件文件夹
mkdir auth
#生成咱们的ssl证书
openssl req -newkey rsa:4096 -nodes -sha256 -keyout /certs/local.registry.docker.com.key -x509 -days 365 -out /certs/local.registry.docker.com.crt
#建立一个咱们的private registry用户,admin admin 就是帐号和密码了。
docker run --entrypoint htpasswd registry:2 -Bbn admin admin > /auth/htpasswd

网络环境还不错的状况下,这个时候pull registry应该也已经完成了。那......
而后,把咱们的 私有仓库跑起来先git

docker run -dit -p 3075:5000 --restart=always --name hub \
  -v /auth:/auth \
  -e "REGISTRY_AUTH=htpasswd" \
  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  -v /certs:/certs \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/local.registry.docker.com.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/local.registry.docker.com.key \
  registry:2


解释一下参数:
-d:表示容器后台运行
-p:端口映射
--restart=always:能够理解为开机启动。开机:就是启动docker客户端拉。
--name registry:给容器取一个名字,方便识别和记忆
-v:挂在本地文件到容器中。命令格式:hostdir:cdir[:rw|ro] 主机目录:容器目录[:读写权限]
-v pwd/auth:/auth:挂在本地的密码文件夹
-v pwd/certs:/certs:挂在本地的ssl证书文件夹github

-e:设置环境变量参数
-e REGISTRY_AUTH:验证方式
-e REGISTRY_AUTH_HTPASSWD_REALM:验证域名
-e REGISTRY_AUTH_HTPASSWD_PATH:密码文件路径
-e REGISTRY_HTTP_TLS_CERTIFICATE:ssl证书文件路径
-e REGISTRY_HTTP_TLS_KEY:ssl证书文件路径
最后的registry则是镜像的名字了。具体参数什么的,能够参考registry官方文档地址
centos docker客户端配置私有仓库信任web

#在每一个安装docker客户端的机器上执行。将前面搭建私有仓库建立的ssl证书copy到/etc/docker/certs.d/[仓库地址],若是不走这一步,就会收到下下下图的这种错误 x509.......
mkdir -p /etc/docker/certs.d/local.registry.docker.com:3075
cp /certs/local.registry.docker.com.crt  /etc/docker/certs.d/local.registry.docker.com\:3075/

windows配置私有仓库

在而后,登陆到私有仓库

docker

在在而后,吧咱们刚才的hello world项目push到咱们的本地仓库
docker tag imageid imagename:给镜像打个tag,而后push这个tag到本地仓库。

在在在而后,把咱们的私有仓库的hello world跑起来
windows

在在在在而后,在文章的最后,咱们在装一个私有仓库web ui浏览工具(hyper/docker-registry-web):

原本想安装一个web ui管理工具:konradkleine/docker-registry-frontend,可是......,奈何......启动提示 no mpm loaded 错误。详见问题描述及解决办法https://github.com/kwk/docker-registry-frontend/issues/88。不想折腾了,索性安装另一个web ui 浏览工具
话说web ui仍是有好几个的,排在最前面的3个ui镜像,第一个安装有错误,要特殊处理,那咱们就安装第二个好了......
centos

docker run -dit -p 8899:8080 --restart=always --name registry-web-manager --link registry -e REGISTRY\_BASIC\_AUTH="YWRtaW46YWRtaW4=" -e REGISTRY\_TRUST\_ANY\_SSL=true -e REGISTRY\_URL=https://local.registry.docker.com:3075/v2/ -e REGISTRY\_NAME=https://local.registry.docker.com:3075 --add-host local.registry.docker.com:192.168.50.2 hyper/docker-registry-web

安装脚本参数解释
--link registry:容器之间创建联系,我的猜想,起始不须要,由于没用到.......
-e REGISTRY_BASIC_AUTH:链接到私有仓库的帐号密码base64结果(base64(username:password))。因此为何仓库为何要选择htpasswd验证方式了。
-e REGISTRY_TRUST_ANY_SSL:忽略ssl错误,由于咱们用的是自签名的ssl证书
-e REGISTRY_URL:仓库访问地址
-e REGISTRY_NAME:仓库名
--add-host local.registry.docker.com:192.168.50.2:增长一条本地host。指示对咱们local.registry.docker.com的访问解析到咱们的docker host机器上,这样,在咱们的web ui容器中访问咱们的私有仓库地址时,才能正确解析。
这几天的学习和折腾就暂时到这里了,后续在研究一下docker-compose容器编排和自动构建部署。bash

相关文章
相关标签/搜索