原文地址:搭建私有docker库 – 无敌牛
欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等
每次从公共源上获取docker镜像特别不靠谱,有时候需要拉取很长时间,而且还经常失败。另外,为了管理公司做的镜像,使用 docker save 和 docker load 的方法也很不方便,所以就自己搭建一个私有docker库,给大家分享一下。
本身 docker库很好搭建,本次搭建的 docker 增加了 加密通讯 和 登录认证,使用更加安全一些。
第一步、准备
1、获取 registry:2 镜像,指令:
docker pull registry:2
2、使用 htpasswd 工具,生成登录使用的账号和密码文件。执行下方指令,会把账号和加密后的密码写入 htpasswd 文件中。后续设置会用到。
htpasswd -Bbn myuser mypass > htpasswd
3、生成自签名证书和私钥,可以参看往期文章:openssl颁发包含主题替代名的证书–SAN – 无敌牛 和 自签名证书 – 无敌牛。这两篇文章复杂一些,可以直接使用下边的指令生成。这样就生成了 domain.crt 证书文件 和 domain.key 私钥文件。
openssl req -newkey rsa:4096 -nodes -sha256 -keyout domain.key -x509 -days 36500 -out domain.crt -subj "/CN=192.168.1.57"
4、创建目录,把 账号密码文件 和 证书私钥文件分别放在对应目录,接下来会把这两个目录挂载到容器中。目录结构如下:
另外需要创建 /data/docker_registry 目录,用来挂载容器的数据目录。接下来会用到。
第二步:运行服务
第一步准备工作全部完成,就可以启动容器了。执行这条命令。注意,使用了pwd指令获取的路径,请在 auth和certs同级目录执行这条指令启动容器。
docker run -d -p 5000:5000 \
--name secure-registry \
-v $(pwd)/auth:/auth \
-v $(pwd)/certs:/certs \
-v /data/docker_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/domain.crt" \
-e "REGISTRY_HTTP_TLS_KEY=/certs/domain.key" \
registry:2
参数解释:
-d : 进入后台运行
-p :端口映射,宿主机的端口:容器端口
-v :目录映射,宿主机目录:容器目录
-e :设置环境变量,REGISTRY_* 环境变量,指定了 认证方式、用户密码文件、证书文件、私钥文件
可以查看容器是否启动
第三步、测试
换一台设备,尝试登录,并推送一个镜像,如下图:
如果因为证书报错,可以在 /etc/docker/daemon.json 配置可信库。将下方的配置写入文件,然后重启docker(systemctl restart docker)。
{
"insecure-registries": ["192.168.1.57:5000"]
}
换台设备,下载刚刚上传的镜像。