说明,本文是参考http://blog.csdn.net/j_z10/article/details/51953468 所写的,经过测试,完成可行 。做了一点修改,使之符合自己 ,算是做个笔记吧。
1、准备环境
环境:两个装有Docker的Ubuntu虚拟机
虚拟机一:192.168.101.121 用户开发机
虚拟机二:192.168.101.124 用作私有仓库
2、安装docker 。
这个就不多说了,相信如果这步都没做的话,也不会看到这了。
3、安装registry
docker pull registry
4、搭建https regsitry
service端 (92.168.101.124)
4.1、 生成字签名证书
mkdir -p /registry/test/certs && cd /registry/test/certs
openssl req -x509 -days 3650 -subj '/CN=test.reg.com/' -nodes -newkey rsa:2048 -keyout registry.key -out registry.crt
4.2、成用户名密码
mkdir -p /registry/test/auth && cd /registry/test/auth
docker run --rm --entrypoint htpasswd registry:2 -Bbn test test > ./htpasswd
4.3、创建证书目录
mkdir -p /etc/docker/certs.d/test.reg.com:5000
cd ../../../../../../..
cp /registry/test/certs/registry.crt /etc/docker/certs.d/test.reg.com:5000
4.4启动registry
docker run -d -p 5000:5000 --name=test_registry --restart=always -v /registry/test/auth:/auth -v /registry/test/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
客户端(92.168.101.121)
4.5、证书关联 (如果 只有一台电脑 ,即服务端也是客户端 ,此步骤省略)
通过scp将证书copy到本地 。
sudo mkdir -p /etc/docker/certs.d/test.reg.com:5000
sudo scp -r root@192.168.101.124:/registry/phy/certs/registry.crt /etc/docker/certs.d/test.reg.com:5000
上面第二条,对于inux 菜鸟可能会卡一下,root@192.168.101.124 ,其中root 是 192.168.101.124 的一个用户名 ,接下来输入 root 对应的密码 即可 。
4.6、添加域名
在 /etc/hosts 最后添加一行 192.168.101.124 test.reg.com:5000
vim /etc/hosts
- 测试
docker login test.reg.com:5000
Username: test
Password: test
docker pull hello-world
docker tag hello-world:latest test.reg.com:5000/hello-world
docker push test.reg.com:5000/hello-world
网上浏览过很多资料 ,搭建私有registry 的时候总是会报错:
docker tls: oversized record received with length 20527
可能由于历史版本原因吧 。此篇文章主要来纪念这个大坑。
PS : 有读者反应说按照此文档下来,搭建会失败 。于是我自己又试了一下,发现 : 因为全部copy 的上面的语句,可能写的时候没注意 ,语句后面有些中文的空格导致搭建失败。特此更正。