因为搞k8s 拉取镜像太慢,不同版本每次都要等待半天 ,用nexus3作为docker镜像的缓存与仓库镜像,虽然权限控制弱一些,够用,记录用法及踩坑。
1 作为镜像缓存,唯一的坑,就是第一次拉取及后续拉取镜像,没有缓存,也不晓得为啥配置了 insecure-registries 和 registry-mirrors 没生效,iftop 观察流量走向连接到公网镜像了,不是指定的 192.168.9.132:8082 ,但是tag前缀加上ip:port/image:lastest , 镜像缓存了起作用了,后续直接 docker pull img:latest 就可以,否则就是换其他nexus3 版本也没有用,也不知道为什么
2 用nginx统一端口pull和push,方便使用
具体实操如下:
132_server 启用docker 来启动nexus3
mkdir -pv /data/nexus-data
chmod 777 -R /data/nexus-data
docker run --restart=always -d --net=host \
--privileged=true \
-e INSTALL4J_ADD_VM_PARAMS=-Xms128m -Xmx256m -XX:MaxDirectMemorySize=256m \
--name nexus3 -v /data/nexus-data:/nexus-data sonatype/nexus3
查看随机生成的密码
docker exec nexus3 cat /nexus-data/admin.password
启动之后,登陆修改密码
先配置存储, dockerhub 与 dockerhosted, 用默认的也没问题,分开来分别区分和备份
配置dockerproxy
配置了一个第三方的代理
docker_group 聚合,把2个代理都放入这个组,docker_hosted 也可以放入该组,但是可以拉取,不能push
配置docker私有仓库
DNS 配置A记录 或者 hosts 配置
192.168.9.132 regist.k8s.in
docker客户端
root@vm-133:~# cat /etc/docker/daemon.json
{
"insecure-registries": ["regist.k8s.in"],
"registry-mirrors": ["http://regist.k8s.in"]
}
systemctl restart docker.socket docker.service
pull 可以匿名,但是要在nexus3上启用docker安全,push需要账号密码
docker login -u admin -p admin#123 regist.k8s.in
第一次一定要 docker pull regist.k8s.in/ubuntu:lastest
否则拉取可能不走指定的 regist.k8s.in ,后续就没有问题了 docker pull nginx 就有缓存了
nginx 配置域名,统一对外端口
upstream nexus_docker_get {
server 192.168.9.132:8082;
}
upstream nexus_docker_put {
server 192.168.9.132:8084;
}
server {
listen 80;
listen 443 ssl;
server_name regist.k8s.in;
access_log /var/log/nginx/regist,k8s.in.log;
ssl_certificate /etc/nginx/ssl/k8s.in.crt;
ssl_certificate_key /etc/nginx/ssl/k8s.in.key;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers '!aNULL:kECDH+AESGCM:ECDH+AESGCM:RSA+AESGCM:kECDH+AES:ECDH+AES:RSA+AES:';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
# disable any limits to avoid HTTP 413 for large image uploads
client_max_body_size 0;
# required to avoid HTTP 411
chunked_transfer_encoding on;
# default set push proxy
set $upstream "nexus_docker_put";
# When request_method is get
if ( $request_method ~* 'GET') {
set $upstream "nexus_docker_get";
}
# 只有本地仓库才支持搜索,所以将搜索请求转发到本地仓库,否则出现500报错
if ($request_uri ~ '/search') {
set $upstream "nexus_docker_put";
}
index index.html index.htm index.php;
location / {
proxy_pass http://$upstream;
proxy_set_header Host $host;
proxy_connect_timeout 3600;
proxy_send_timeout 3600;
proxy_read_timeout 3600;
proxy_set_header X-Real-IP $remote_addr;
proxy_buffering off;
proxy_request_buffering off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto http;
}
}
标签:缓存,nexus,regist,ssl,nexus3,proxy,docker,k8s
From: https://blog.51cto.com/first01/8080385