docker私有仓库-https+nginx
一、概述
使用的是registry-2.4版本,因为在这个版本开始提供了garbage-collect,能够清理掉blobs,2.1开始提供了api的删除功能,但是只是删除的index并没有释放掉磁盘空间,所以2.4版本增加了garbage-collect。官方不建议删除blobs,但是构建上传的很老的镜像已经没有用了,所以需要定时清理。
部署:
1、搭建docker私有仓库,线上使用的话必须要保证安全,需要做认证+https
创建目录:
# mkdir -p /data/registry/ && cd /data/registry/ && mkdir auth certs
创建密码文件:
#cd /data/registry/
#docker run --entrypoint htpasswd daocloud.io/registry -Bbn huoqiu huoqiu123> auth/htpasswd
创建证书:
# openssl req -x509 -days 3650 -subj '/CN=huoqiu.oo.com/' -nodes -newkey rsa:2048 -keyout certs/registry.key -out certs/registry.crt
创建存放证书的目录:
#mkdir -p /etc/docker/certs.d/huoqiu.oo.com/
#cp /data/registry/certs/registry.crt /etc/docker/certs.d/huoqiu.oo.com/
创建容器:
#cd /data/registry/
创建conf目录并创建config.yml文件:
#mkdir conf
# cat config.yml
version: 0.1
log:
fields:
service: registry
storage:
delete:
enabled: true
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :
headers:
X-Content-Type-Options: [nosniff]
health:
storagedriver:
enabled: true
interval: 10s
threshold:
默认是不支持删除的,需要增加删除支持:
storage:
delete:
enabled: true
#cat tt.sh
#!/bin/bash dir=$(cd `dirname $`;pwd)
docker stop registry && docker rm registry
docker run -d -p : -p : --restart=always \
--name registry \
-v $dir/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry on huoqiu.oo.com" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-v $dir/certs:/certs \
-v $dir/data:/var/lib/registry \
-v $dir/conf/config.yml:/etc/docker/registry/config.yml \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/registry.key \
daocloud.io/registry:2.4
#chmod +x tt.sh
#sh tt.sh
设置nginx代理:
首先将创建的证书copy到nginx服务器上面,
#scp /data/registry/certs/* nginx:/root/oo
#cat sb.conf
server {
client_max_body_size 0;
server_name huoqiu.oo.com;
listen 443;
ssl on;
ssl_certificate /root/oo/registry.crt;
ssl_certificate_key /root/oo/registry.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1.2;
#ssl_ciphers HIGH:!aNULL:!MD5;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256:AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_redirect off;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://10.10.9.3:443;
}
}
登陆:
docker login huoqiu.oo.com
输入用户名、密码。此时会生成/root/.docker/config.json文件,记录认证信息。
二、清理registry
清理老的镜像有两个步骤:
1、找到相应镜像的dgists
数据目录放到了物理机的/data/registry/data目录下面,我们要先找出要删除的dgists:
比如我们这里要删除的镜像名称是fireball/saturn,如果是其他的镜像,就去/data/registry/data/docker/registry/v2/repositories/目录下面找。
# cd /data/registry/data/docker/registry/v2/repositories/fireball/saturn/_manifests/tags
我们查找超过100天的镜像的dgists:
# find . -name link -mtime +10 | grep current|xargs grep "sha256" | awk -F ":" '{print $3}'
然后在调用api去删除
curl -k -I -X DELETE https://huou:histry@localhost:5000/v2/fireball/saturn/manifests/sha256:dgists的值(上面那个命令查出来的结果)
参数解释:
-k,因为我们用的是https,所以这里加-k跳过检测,否则会报错
huou:histry, 是registry的用户名和密码
2、使用gc清理数据文件
docker exec -it registry /bin/registry garbage-collect /etc/docker/registry/config.yml
为了方便使用,写了一个清理脚本:
# cat registry-clean.sh
#!/bin/bash
dir="/data/registry/data/docker/registry/v2/repositories/fireball/saturn/_manifests/tags"
cd $dir
dgists=`find . -name link -mtime +10 | grep current|xargs grep "sha256" | awk -F ":" '{print $3}'`
for i in $dgists
do
curl -k -I -X DELETE https://huou:histry@localhost:5000/v2/fireball/saturn/manifests/sha256:$i
done
if [ $? -eq ];then
docker exec -it registry /bin/registry garbage-collect /etc/docker/registry/config.yml
fi
只保留最近10天的镜像.
上面的脚本只能清理特定的镜像,使用不是很灵活,下面给出一个交互式的:
#cat interaction-clean
#!/bin/bash
#docker private registry clean imag that five days ago #repositories dir
dir="/data/registry/data/docker/registry/v2/repositories/" a="/_manifests/tags" #link a full addr
while getopts ":g:p:l:h:t:" opt
do
case $opt in
g)
dir_tag1=$dir$OPTARG
;;
p)
dir_tag2=$dir_tag1/$OPTARG
dir_tag=$dir_tag2$a
;;
l)
dir_tag3=$dir_tag2/$OPTARG
dir_tag=$dir_tag3$a
;;
t)
b=$OPTARG
;;
?)
echo "if your url have three layers like: https://<url>/fireball/saturn
$ -g(group) -p(project) -t(time,if not set default is )"
echo "if your url have three layers like: https://<url>/fireball/test/saturn
$ -g(group) -l -p(project -t(time,if not set default is ))"
exit ;;
esac
done #---------------------------------------------------------------------------------------------------------#
cd $dir_tag #date that to find,the default is
tm=${b:-} #find all of dgists that meet the requirements
dgists=`find . -name link -mtime +$tm | grep current|xargs grep "sha256" | awk -F ":" '{print $3}'` #delet dgists
for i in $dgists
do
echo $i
curl -k -I -X DELETE https://huou:histry@localhost:5000/v2/fireball/saturn/manifests/sha256:$i
done #delete true data,use garbage-collect
if [ $? -eq ];then
docker exec -it registry /bin/registry garbage-collect /etc/docker/registry/config.yml
fi
Usage:
interaction-clean -h
docker私有仓库-https+nginx的更多相关文章
- 搭建docker私有仓库(https)
1.修改openssl.cnf,支持IP地址方式,HTTPS访问在Redhat7或者Centos系统中,文件所在位置是/etc/pki/tls/openssl.cnf.在其中的[ v3_ca]部分,添 ...
- 搭建docker私有仓库,建立k8s集群
服务器IP角色分布 192.168.5.2 etcd server 192.168.5.2 kubernetes master 192.168.5.3 kubernetes node 192.168. ...
- 转载:教你分分钟搞定Docker私有仓库Registry
一.什么是Docker私有仓库Registry 官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去.但是,有时候我们的服务器无法 ...
- 教你分分钟搞定Docker私有仓库Registry
一.什么是Docker私有仓库Registry 官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去.但是,有时候我们的服务器无法 ...
- Docker私有仓库registry的搭建及使用
前言 由于Docker Hub公共仓库很多时候使用这并不是很方便,大分部因为网络的问题可能拉取的时候会很慢或者拉取不到,所以搭建一个本地的私有仓库. 准备 由于此篇文章是在Kubernetes集群安装 ...
- (转)教你分分钟搞定Docker私有仓库Registry
转:https://www.cnblogs.com/Javame/p/7389093.html 一.什么是Docker私有仓库Registry 官方的Docker hub是一个用于管理公共镜像的好地方 ...
- 03搭建docker私有仓库
搭建docker私仓,可以使用docker官方提供的registry镜像.该镜像目前有2.0,2.3和2.3.1版本.它只与1.6.0以上版本的docker兼容.搭建私仓的步骤如下: 一:无代理.无认 ...
- 2.使用nexus3配置docker私有仓库
1,配置走起 1,创建blob存储 登陆之后,先创建一个用于存储镜像的空间. 定义一个name,下边的内容会自动补全. 然后保存. 注意:实际生产中使用,建议服务器存储500G或以上. 2,创建一个h ...
- 构建Docker私有仓库
一.Docker私有仓库 上一篇说了如何利用Dockerfile在已有镜像的基础上构建自己的镜像,那么如果需要让镜像在一个团队中使用,就需要一个仓库,有几种方式可以共享私有镜像. 1.将镜像上传至 ...
随机推荐
- 面试01:解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法
栈的使用:通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用JVM中的栈空间. 队的使用:通过new关键字和构造器创建的对象则放在堆空间,堆是垃圾收集器管理的主要区域 ...
- predict predict_proba区别的小例子
predict_proba返回的是一个n行k列的数组,第i行第j列上的数值是模型预测第i个预测样本的标签为j的概率.所以每一行的和应该等于1. 举个例子 >>> from sklea ...
- boost asio 学习(七) 网络基础 连接器和接收器(TCP示例)
http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio?pg=8 7. Net ...
- python之全局变量和局部变量
一.定义 1.全局变量 定义在函数外部一级代码的变量,叫全局变量,全局能用. 2.局部变量 定义在函数内的变量,只能在局部生效 二.用法 1.在函数内部可以引用全局变量,如果全局和局部都有一个变量na ...
- AJAX技术主要包含的四个组件
1.XMLHttpRequest:使用AJAX技术都是从XMLHttpRequest开始的. 2.JavaScript:实现XMLHttpRequest对象相关功能. 3.CSS 4.DOM
- mark 三年工作总结
在新公司加班,正在看<HBase 权威指南>,看Michael Stack为本书写的序,介绍HBase最初的发展,Lars在HBase 使用和推广做出的贡献. 突然想到,我还有一篇工作三年 ...
- python运算符优先级
下面这个表给出Python的运算符优先级,从最低的优先级(最松散地结合)到最高的优先级(最紧密地结合).这意味着在一个表达式中,Python会首先计算表中较下面的运算符,然后在计算列在表上部的运算符. ...
- Javascript高级编程学习笔记(2)—— Script标签
script标签 js在浏览器中的使用,肯定会涉及到script标签. 那么script标签有哪些属性呢? 1.async:异步加载(不让页面等待该脚本的加载执行,异步加载页面的其他部分) 2.cha ...
- JDBC连接池原理、自定义连接池代码实现
首先自己实现一个简单的连接池: 数据准备: CREATE DATABASE mybase; USE mybase; CREATE TABLE users( uid INT PRIMARY KEY AU ...
- 分布式控制系统Git学习
git : n. 饭桶,无用的人 github : n. 社交编程及代码托管网站 hub: n. 中心:毂:木片 Git是一个分布式版本控制软件,最初由林纳斯·托瓦兹(Linus Torvalds)创 ...