docker registry的搭建并结合k8s使用
一、搭建docker registry1、安装docker由于使用docker容器安装docker registry:yum install -y yum-utilsyum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum -y install docker-ce
一、搭建docker registry
1、安装docker
由于使用docker容器安装docker registry:
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce docker-ce-selinux
2、下载docker registry镜像
docker pull registry
3、添加用户验证,启动docker-registry
使用htpasswd,生成用户名对应的密码加密文件:
yum install httpd
htpasswd -Bbn username passwd > /usr/local/auth/passwd
启动docker registry:
docker run -d \
-p 5000:5000 \
-v /data/registry:/var/lib/registry \
-v /usr/local/auth:/auth \
-e REGISTRY_AUTH=htpasswd \
-e REGISTRY_AUTH_HTPASSWD_REALM=Registry_Realm \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/passwd \
-v /usr/local/nginx/conf/cert:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.pem \
-e REGISTRY_HTTP_TLS_KEY=/certs/server.key \
--restart=always \
--name registry \
registry
参数解析:
-p 5000:5000,指定registry的端口是5000并映射成主机的5000端口。
-v /data/registry:/var/lib/registry,将本地的/data/registr挂载到镜像默认存储路径 /var/lib/registry。
-v /usr/local/auth:/auth,第一步生成的auth文件挂载到/auth。
-e REGISTRY_AUTH=htpasswd, -e REGISTRY_AUTH_HTPASSWD_REALM=Registry_Realm,这两个参数组合启动基本身份验证。
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/passwd,指定使用的密码认证文件是/auth/passwd。
-v /usr/local/nginx/conf/cert:/certs,如果有https认证,将宿主机保存的认证文件挂到容器里。
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.pem,-e REGISTRY_HTTP_TLS_KEY=/certs/server.key 指定https证书和key。
–restart=always,重启方式为always。
–name registry,指定容器名称。
registry,镜像名称。
4、安装配置nginx
> yum -y install pcre pcre-devel openssl openssl-devel
> ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module --with-pcre --with-stream --with-http_v2_module --with-threads --with-http_ssl_module
> make && make install
配置文件如下:
upstream registry {
server 127.0.0.1:5000;
}
server {
listen 443;
server_name -;
charset UTF-8;
ssl on;
ssl_certificate /usr/local/nginx/conf/cert/server.pem;
ssl_certificate_key /usr/local/nginx/conf/cert/server.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/registry/access.log;
error_log /var/log/nginx/registry/error.log;
root html;
index index.html index.htm index.php;
## send request back to apache ##
location / {
proxy_pass https://registry/;
charset UTF-8;
#Proxy Settings
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_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
5、创建registry前端 docker-registry-frontend
docker run \
-d \
-e ENV_DOCKER_REGISTRY_HOST=10.244.1.3 \
-e ENV_DOCKER_REGISTRY_PORT=443 \
-e ENV_DOCKER_REGISTRY_USE_SSL=1\
-p 8082:80 \
konradkleine/docker-registry-frontend:v2
参数解析:
-e ENV_DOCKER_REGISTRY_HOST=10.244.1.3,指定docker registry的host ip,由于前端配置了nginx所以直接连接nginx的IP。
-e ENV_DOCKER_REGISTRY_PORT=443,指定docker registry的host port ,由于前端配置了nginx所以直接连接nginx的端口。
-e ENV_DOCKER_REGISTRY_USE_SSL=1,开启SSL认证。
-p 8082:80 ,映射主机端口为8082。
至此docker registry 就搭建完成了 。
二、docker使用镜像仓库
1、登陆docker registry
docker login -uusername -ppassword 10.244.1.3:5000
如果没有开启https认证,登陆有时会报错如下:
The push refers to a repository [10.244.1.3:5000/registry]
Get https://:10.244.1.3:5000/v1/ping: http: server gave HTTP response to HTTPS client
解决办法如下:
在”/etc/docker/“目录下,创建”daemon.json“文件,内容如下:
{ "insecure-registries":["10.244.1.3:5000"] }
重启docker即可。
systemctl restart docker
2、push/pull镜像
假如本地有一个java:8的镜像,想要推到仓库里,需要先打tag成registryip:port的形式,再推。具体如下:
> docker tag java:8 10.244.1.3:5000/java:8
> docker push 10.244.1.3:5000/java:8
pull镜像也需要带上ip port,如下:
docker pull 10.244.1.3:5000/java:8
3、登出仓库
docker logout 10.244.1.3:5000
三、在k8s中使用镜像仓库
想要在k8s中拉取私有镜像仓库的镜像,需要先配置一个secret。secret有命名空间属性,需要指定命名空间。具体如下:
kubectl create secret docker-registry registry-secret-name --docker-server=10.244.1.3:5000 --docker-username=username --docker-password=password -n namespace
其中registry为创建的secretname,通过命令可以看到创建的secret。
> kubectl get secret
NAME TYPE DATA AGE
registry-secret-name kubernetes.io/dockerconfigjson 1 3d11h
在创建deployment的yaml文件需要在spec.template.spec中增加 imagePullSecrets,name值为刚刚创建的secret名称:registry-secret-name ,具体yaml文件如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: accessmanage-center-deployment
namespace: dev
labels:
app: accessmanage-center
spec:
replicas: 1
selector:
matchLabels:
app: accessmanage-center
template:
metadata:
labels:
app: accessmanage-center
spec:
imagePullSecrets:
- name: registry-secret-name
containers:
- name: accessmanage-center
image: 10.244.1.3:5000/tomcat:7
原文链接:https://blog.csdn.net/weixin_44723434/article/details/97397091
更多推荐
所有评论(0)