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)