docker registry私服搭建

本文详细介绍如何搭建基于SSL和登录认证的Docker私有仓库(registry),包括v2版本的详细步骤及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目前为止,Docker官方的registry镜像分为两个版本,v2和v2以前的版本,我管它叫v1,v1使用Python编写的,之后的v2用的go语言,而且它们的API也不一样,本文将分别搭建基于SSL和登录认证的以上两个版本的docker私服。

registry(v2)

搭建环境:172.16.71.52 (contos7,docker1.8)

首先下载镜像

docker pull resigtry:2
  • 1
  • 1

创建证书

mkdir -p certs && openssl req \
  -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
  -x509 -days 365 -out certs/domain.crt
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

复制domain.crt到指定目录,172.16.71.52.xip.io为私有仓库所在服务器的域名,5000为registry的端口号

cp /certs/domain.crt /etc/docker/certs.d/172.16.71.52.xip.io:5000/ca.crt
  • 1
  • 1

建立登录认证

mkdir auth
docker run --entrypoint htpasswd registry:2 -Bbn 你的用户名 你的密码 > auth/htpasswd
  • 1
  • 2
  • 1
  • 2

重启docker

systemctl restart docker
  • 1
  • 1

run起来

docker run -d -p 5000:5000 --restart=always --name registry \
  -v `pwd`/auth:/auth \
  -e "REGISTRY_AUTH=htpasswd" \
  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  -v `pwd`/certs:/certs \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  registry:2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

先登录,再使用

 docker login 172.16.71.52.xip.io:5000

 docker tag redis 172.16.71.52.xip.io:5000/redis

 docker push 172.16.71.52.xip.io:5000/redis
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

检查下,image是否进入了我们搭建的私有仓库

# 找到外部挂载的目录
docker inspect --format {{'json .Mounts'}} registry

# push进来的image都安静的躺在这里
cd /tmp/data/docker/registry/v2/repositories
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

以下是注意事项: 
1.创建认证证书时common name应该用registry所在机器的域名,本人用IP测试没有成功。 
2.docker run之前确保5000端口没有被占用,启动成功以后用docker logs看下有没有报错 
3.push和pull之前要docker login一下 
4.想要通过安全认证记得把生成的 domain.crt 复制到/etc/docker/certs.d/172.16.71.52.xip.io:5000/ca.crt,其中172.16.71.52.xip.io为私服的域名,5000为registry的对外端口 
5.v2的api变了,访问v1/search会报错404 not found,可以通过/v2/_catalog查看私有仓库的目录,v2的aip参见这里

参考 
https://docs.docker.com/registry/deploying/  
https://docs.docker.com/engine/reference/commandline/inspect/ 
https://docs.docker.com/registry/spec/api/

registry(V1)

V1版本的registry搭建起来比较费劲(也有可能我没有找到优雅的方法),在网上找了一篇用nginx做SSL和登录认证的博文,感谢博主,可移步这里查看(亲测可用) 
搭建docker内网私服(docker-registry with nginx&ssl on centos)

因为版本原因(docker1.8),在ssl认证上还需要把生成的根证书copy到docker指定目录(如搭建V2时描述的)

cp /etc/pki/CA/cacert.pem /etc/docker/certs.d/172.16.71.43.xip.io:5000/ca.crt
  • 1
  • 1

注意在其他主机访问私服时也要做以上操作。


关于https的问题

[plain]  view plain  copy
  1. root@gerryyang:~# docker push 104.131.173.242:5000/ubuntu_sshd_gcc_gerry:14.04  
  2. FATA[0002] Error: Invalid registry endpoint https://104.131.173.242:5000/v1/: Get https://104.131.173.242:5000/v1/_ping: EOF. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry 104.131.173.242:5000` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/104.131.173.242:5000/ca.crt   
解决方法:
修改Docker配置文件
vim /etc/default/docker
增加以下一行
DOCKER_OPTS="$DOCKER_OPTS --insecure-registry=104.131.173.242:5000"
重启Docker
sudo service docker restart
refer:  http://dockerone.com/question/21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值