在kubernetes技术体系中,镜像的仓库扮演着重要的角色。应用的更新与发布都是通过对镜像进行更新,并通过新的镜像启动容器实现的。

为方便之后的学习,本文将介绍在centos7上实现docker本地仓库的搭建。之前写过一篇在centos6上搭建本地仓库的文章,当时使用的registry版本为V1。V1版本在nginx代理上配置和v2版本存在较大差别,前文传送门: http://blog.51cto.com/ylw6006/1597873

环境介绍:
操作系统版本:centos linux 7.2 64bit
Server: 192.168.115.5/24 vm1
Clinet: 192.168.115.6/24 vm2
docker版本: 1.12.6

一、在vm1上创建registry

# docker pull docker.io/registry
# mkdir /home/registry
# docker run -d -p 5000:5000 --name registry --privileged=true --restart=always  \-v /home/registry:/var/lib/registry registry
# curl -XGET http://192.168.115.5:5000/v2/_catalog

通过执行上述命令就可以简单构建出一个可用的本地仓库,但仓库没有配置用户认证,且使用的是http协议。

二、配置vm1使用本地仓库
docker1.12.6版本默认要求仓库必须用https协议,我们可以修改docker配置文件允许使用http协议的仓库。

# grep '5000' /etc/sysconfig/docker
OPTIONS='-g /home/docker -H 0.0.0.0:2375 -H unix:///var/run/docker.sock --insecure-registry 192.168.115.5:5000'
ADD_REGISTRY='--add-registry 192.168.115.5:5000'
# systemctl restart docker
# docker start registry
# docker tag docker.io/busybox 192.168.115.5:5000/busybox
# docker push 192.168.115.5:5000/busybox
# curl -XGET http://192.168.115.5:5000/v2/_catalog
# curl -XGET http://192.168.115.5:5000/v2/busybox/tags/list 

三、使用脚本删除本地仓库中的镜像文件,也可以直接删除对应目录的文件夹达到效果

# curl  \
https://raw.githubusercontent.com/burnettk/delete-docker-registry-image/master/delete_docker_registry_image.py | sudo tee /usr/local/bin/delete_docker_registry_image >/dev/null
# chmod a+x /usr/local/bin/delete_docker_registry_image
# export REGISTRY_DATA_DIR=/home/registry/docker/registry/v2
# delete_docker_registry_image --image busybox 

四、使用nginx对客户端的请求进行代理
1、安装nginx,这里为了省事,直接用rpm包安装。准备配置文件如下

# yum -y install nginx httpd-tools
# cat /etc/nginx/conf.d/docker.conf
upstream docker-registry {server 192.168.115.5:5000;
}
server {listen  443;server_name  registry.fjhb.cn;  ssl on;ssl_certificate     /etc/nginx/keys/nginx.crt;ssl_certificate_key /etc/nginx/keys/nginx.key;proxy_set_header Host       $http_host;   # required for Docker client sakeproxy_set_header X-Real-IP  $remote_addr; # pass on real client IPclient_max_body_size 0; # disable any limits to avoid HTTP 413 for large image uploads# required to avoid HTTP 411: see Issue #1486 (https://github.com/dotcloud/docker/issues/1486)chunked_transfer_encoding on;  location /v2/ {# let Nginx know about our auth fileauth_basic              "Restricted";auth_basic_user_file    docker-registry.htpasswd;add_header 'Docker-Distribution-Api-Version' 'registry/2.0' always;proxy_set_header  Host              $http_host;   # required for docker client‘s sakeproxy_set_header  X-Real-IP         $remote_addr; # pass on real client‘s IPproxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;proxy_set_header  X-Forwarded-Proto $scheme;proxy_read_timeout                  900;proxy_pass http://docker-registry;}
}

2、使用openssl工具创建自签名证书

# cd /etc/pki/CA/
# touch ./{serial,index.txt}
# echo "00" > serial
# openssl  genrsa -out private/cakey.pem 2048
# openssl  req -new -x509 -key private/cakey.pem -days 3650 -out cacert.pem
# cd /etc/ssl/
# openssl genrsa -out nginx.key 2048
# openssl  req -new -key nginx.key -out nginx.csr
# openssl ca -in nginx.csr -days 3650 -out nginx.crt
# htpasswd -c  /etc/nginx/docker-registry.htpasswd yang
# mkdir /etc/nginx/keys/
# mv nginx.crt  nginx.key  /etc/nginx/keys/
# nginx -t
# systemctl start nginx
# netstat -ntpl |grep nginx 

3、修改vm1主机的hosts文件,并进行测试

# ping -c 1 registry.fjhb.cn
# curl https://registry.fjhb.cn

以上是因为证书是自签名的,操作系统认证失败

# cp /etc/pki/tls/certs/ca-bundle.crt{,.bak}
# cat /etc/pki/CA/cacert.pem >> /etc/pki/tls/certs/ca-bundle.crt
# systemctl restart docker
# docker start registry
# curl https://registry.fjhb.cn
# curl -u yang:123 https://registry.fjhb.cn
# docker login -u yang -p 123 -e ylw@fjhb.cn registry.fjhb.cn


# docker tag docker.io/busybox  registry.fjhb.cn/busybox
# docker push registry.fjhb.cn/busybox
# curl -XGET http://192.168.115.5:5000/v2/_catalog
# curl -XGET http://192.168.115.5:5000/v2/busybox/tags/list 

参考文档:
https://github.com/burnettk/delete-docker-registry-image

Centos7系统创建Docker本地仓库相关推荐

  1. 使用Nexus3创建docker个人仓库(匿名登录)

    使用Nexus3创建docker个人仓库 前言 一.镜像下载 二.Nexus配置 1.启动容器 2.登录GUI 3.创建仓库 4.创建Role 5.创建User 6.激活Realm 三.配置匿名 1. ...

  2. 使用git命令,将项目包创建到本地仓库并上传到码云仓库

    使用git命令,将项目包创建到本地仓库并上传到码云仓库 初衷 一.生成/添加SHH公钥 注意:""里面的内容是用于注册码云账号的邮箱地址 二.创建仓库 1. 创建仓库 2. 将仓库 ...

  3. Docker本地仓库

    Dockerfile优化及本地私有仓库搭建 文章目录 Dockerfile优化及本地私有仓库搭建 一.Dockerfile优化 1.将不需要输出的指令丢入/dev/null(需要确定命令执行的是正确的 ...

  4. Centos7 环境创建docker

    Docker是一个容器,安装在宿主机(比如一个安装好的centos7虚拟机)上,一个宿主机可以装多个docker,每个docker的环境互不干扰. Docker镜像相当于linux虚拟机的一个镜像,但 ...

  5. maven创建离线本地仓库的坑之verifying availability

    maven在管理依赖组件和描述工程全貌上是一把好手,但是,它强烈地依赖联网环境,特别是对于一些公共的组件. 离线运行,maven本身就支持的不够友好,离线从来都不是maven的好朋友! 笔者就在搭建m ...

  6. docker本地仓库镜像

    镜像的命名规则: 1.[冷数据]/[base镜像]例如:ansible,centos 2. lastest{最新的意思}  不是真的(随便命名) 3. [image name]=[repository ...

  7. Nexus 搭建docker本地仓库(hosted)和私有仓库(proxy)

    本文主要参考"使用 Nexus 搭建 Docker 仓库",在安装过程中遇到一些问题,本文中一并总结.在此对原作者表示感谢! 环境说明: Centos 7.4 OpenJDK 8 ...

  8. MacBook创建docker私有仓库docker server gave HTTP response to HTTPS client 问题处理办法

    在 mac上搭建一个私有仓库,在向仓库push镜像时,会报如下错误: #docker push 192.168.163.131:5000/test Get https://192.168.163.13 ...

  9. centos7.6搭建docker私有仓库

    yum安装docker yum install docker 查看docker版本 下载registry镜像 docker pull registry 配置文件修改 版本为1.13x的daemon.j ...

最新文章

  1. CENTOS7 高性能Linux集群 通过yum进行 haproxy配置 !安装 !使用!HAProxy配置文件详解
  2. Asp.Net Core MVC控制器和视图之间传值
  3. IP地址概念及其划分
  4. Spring MVC和Struts2
  5. 外边距塌陷之clearance
  6. mstsc局域网远程 要预先做的设置
  7. svn提交报e200007错误
  8. 使用Maven运行Solr
  9. web后端开发学习路线_学习后端Web开发的最佳方法
  10. 计算机等级考试机试试题,计算机等级考试二级VFP机试试题18
  11. JS针对图片加载及404处理
  12. Oracle分析函数、多维函数和Model函数简要说明,主要针对BI报表统计
  13. 类的继承查询策略:广度优先
  14. groupby多个字段性能_SQL 性能优化
  15. 看了星球大战--西斯的复仇
  16. SAP中不同质检类型对收货的影响的现实案例分析
  17. 史上最全!数据分析进阶教程,看这一篇就够了!
  18. 显示器基础介绍、频率问题
  19. [宝塔版] 如何搭建一个微信小程序开源商城?
  20. 设置Word文档密码的两种方式

热门文章

  1. C++中const引用和非const引用的使用注意
  2. python文件运行问题
  3. P1852 [国家集训队]跳跳棋
  4. 全新 Hexo Material Design 主题 Mellow
  5. C++:位操作基础篇之位操作全面总结
  6. Python OS 文件操作模块常用函数
  7. windows10环境运用SSH和SwitchySharp自由翱翔
  8. java常用的几种线程池
  9. Java中集合删除元素时候关于ConcurrentModificationException的迷惑点
  10. laravel中token的使用方式