在自己服务器上如何搭建docker私有仓库?
docker hub官方提供了registry镜像用于搭建私有仓库。
搭建私有仓库
创建仓库文件夹1
mkdir -p /opt/docker-hub/registry
获取registry镜像1
docker pull docker.io/registry
重命名1
docker tag docker.io/registry registry
启动仓库1
docker run --name docker-registry -d -p 5000:5000 --restart=always registry
配置nginx
打算把仓库地址应用到https://registry.dillonliang.cn 上。 首先获取证书,阿里云提供免费SSL证书,具体可参考 https://yq.aliyun.com/articles/637307
获取证书后,在服务上配置nginx1
cd /etc/nginx && mkdir -p cert
把证书里的文件重命名registry.key 和 registry.pem并放到cert文件夹下。
编辑nginx.conf
新增一段nginx配置,如下:
1 | server { |
转发请求到服务器的5000端口上,其中1
2client_max_body_size 0;
chunked_transfer_encoding on;
控制上传镜像的大小限制。
检查nginx配置并重启1
2nginx -t
nginx -s reload
推送镜像到私有仓库
获取一个以前打包的镜像,是个node.js程序,大小是74MB左右。1
docker pull dillonliang/hello-node
重新打一个tag,路径一定是前面配置的域名开头,eg: registry.dillonliang.cn/IMAGE1
docker tag dillonliang/hello-node:latest registry.dillonliang.cn/hello-node:latest
然后推送镜像1
docker push registry.dillonliang.cn/hello-node:latest
如何验证呢?
- 再换一台机器,然后docker pull registry.dillonliang.cn/hello-node:latest即可
- 删除本地的相关镜像,然后执行docke pull registry.dillonliang.cn/hello-node:latest
开启账号密码登录
在服务器上创建文件夹1
mkdir -p /opt/docker-hub/auth
然后创建账号密码1
docker run --entrypoint htpasswd registry -Bbn USERNAME PASSWORD > /opt/docker-hub/auth/htpasswd
替换掉USERNAME和PASSWORD即可。
删除原有registry容器,之后重新启动,如下1
2
3
4
5
6
7docker run -d -p 5000:5000 --restart=always --name registry \
-v /opt/docker-hub/registry:/var/lib/registry \
-v /opt/docker-hub/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
registry
然后在本机重现推送镜像的时候,会告诉你authentication required。登录私有仓库:1
docker login registry.dillonliang.cn
根据提示,输入账号密码即可,会提示Login Succeeded
todo
- docker-registry web,私有仓库web界面,使用konradkleine/docker-registry-frontend:v2镜像
- 私有仓库TLS配置
参考资料: