docker registry

docker私有仓库安装

一:什么是docker的私有仓库

docker仓库实际上提供两方面的功能,一个是镜像管理,一个是认证。前者主要由docker-registry项目来实现,通过http服务来上传下载;后者可以通过docker-index(闭源)项目或者利用现成认证方案(如nginx)实现http请求管理。最主要还是实现自己公司业务的镜像管理。

###二:环境准备 两台机器都装有Docker version 1.13.1 1、192.168.188.128 私有仓库 2、192.168.188.136 docker开发环境
###三:192.168.188.128 安装docker

安装前将iptables,selinux给关闭

~]# yum install docker //安装docker必须有extras仓库
~]# vim /etc/docker/daemon.json   //使用国内站点,下载快
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]
}

~]# systemctl start docker.service


###四:安装nginx 目的:实现认证和反向代理。让仓库更加安全可靠。
~]# yum install httpd-devel pcre pcre-devel zlib zlib-devel openssl openssl-devel nginx -y

~]# vim /etc/nginx/conf.d/docker.conf
#定义registry地址,这里定义127的地址
upstream docker-registry {
        server 127.0.0.1:5000;
}

#定义域名及location
server {
        listen 80;
        server_name docker.faqrobot.net;
		#设置nginx允许的POST请求数据包大小:默认为1M,设置为0则表示不限制
        client_max_body_size 0;
		#请求转发的的必要请求头信息(虚拟主机地址,远程主机地址,访问token,服务器ip和端口)
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Authorization "";
        proxy_set_header Accept-Encoding "";
        proxy_set_header X-Forwarded-By $server_addr:$server_port;
        proxy_set_header X-Forwarded-For $remote_addr;

		# 第一个location用于访问docker-registry,需要进行认证
        location / {
                auth_basic "Restricted";
                auth_basic_user_file /etc/nginx/auth/htpasswd.txt;
                proxy_pass http://docker-registry;
				proxy_buffering off;
        }
		#第二个location用于访问docker-registry的images,关闭认证
#       location /v2/search {
#               auth_basic off;
#               proxy_pass http://docker-registry;
#       }

}


#创建认证用户
~]# mkdir /etc/nginx/auth/
~]# htpasswd -c /etc/nginx/auth/htpasswd.txt xiaoniaoo
New password:
Re-type new password:
Adding password for user xiaoniaoo 
~]# nginx //启动nginx


五:安装docker,修改指向私有仓库

~]# yum install docker


修改配置项

~]# vim /usr/lib/systemd/system/docker.service //这里添加就是http的请求,而非https,如果此处不改,push将出错,有以下两种方式解决,一就是在启动脚本里加
ExecStart= ... --insecure-registry docker.faqrobot.net 

二就是在/etc/docker/daemon.json 
{ "insecure-registries":["hostname:port"] }


~]# systemctl daemon
~]# systemctl restart docker.service
~]# vim /etc/hosts    //添加dns解析
192.168.188.128	docker.faqrobot.net


六:安装docker-registry

安装方式:既然docker将一切容器化,那么registry也必然可以容器化,此篇幅直接使用官方的registry容器。也可使用rpm或源码安装。

~]# docker pull registry
~]# docker run -d -p 127.0.0.1:5000:5000 --restart=always -v /data/registry:/var/lib/registry  -v /data/config.yml:/etc/docker/registry/config.yml  registry 
// /data/registry:/var/lib/registry 镜像的保存目录 
// /data/config.yml:/etc/docker/registry/config.yml registry的配置文件
// --restart=always 在容器退出时总是重启容器,主要应用在生产环境


~]# docker exec -it registry sh
/ # vi /etc/docker/registry/config.yml 
version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory			
  filesystem:
    rootdirectory: /var/lib/registry	//镜像存放目录位置,可挂载NAS或分布式存储
http:
  addr: :5000							//监听端口
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3
~

七:操作演示

尝试push镜像和pull镜像
1、 192.168.188.136

~]# docker pull docker.io/busybox:latest     //拉取官方busybox镜像,镜像小,做演示
~]# docker tag docker.io/busybox docker.faqrobot.net/busybox   //打标签,要不然推不上去
~]# docker push docker.faqrobot.net/busybox		//推镜像至仓库
The push refers to a repository [docker.faqrobot.net/busybox]
0314be9edf00: Preparing 
unauthorized: authentication required
//提示需要认证,因为我在私有仓库上做nginx用到了认证。

登陆nginx:

~]# docker login docker.farobot.net
Username: xiaoniaoo
Password: 
Login Succeeded   //帐号密码输出正确,提示登陆成功 

再次push镜像:

~]# docker push docker.faqrobot.net/busybox
The push refers to a repository [docker.faqrobot.net/busybox]
0314be9edf00: Layer already exists 
latest: digest: sha256:186694df7e479d2b8bf075d9e1b1d7a884c6de60470006d572350573bfa6dcd2 size: 527     //推送成功

2、192.168.188.128 查看私有仓库中的镜像是否上传上来了: 之前定义的私有镜像的存放目录为/data/registry ```shell [root@localhost ~]# tree -L 2 /data/registry/docker/registry/v2/repositories/ /data/registry/docker/registry/v2/repositories/ ├── busybox //私有仓库的镜像存放路径上已经有了busybox的目录,说明已经存放上来了。 │   ├── _layers │   ├── _manifests │   └── _uploads └── tomcat ├── _layers ├── _manifests └── _uploads ```

远程查看私有仓库中是否有镜像标记:

~]# curl -XGET http://docker.faqrobot.net/v2/_catalog 
{"repositories":["busybox","tomcat"]}
 ~]# curl -XGET http://docker.faqrobot.net/v2/busybox/tags/list
{"name":"busybox","tags":["latest","v1.0"]}
~]# curl -XGET http://registry.docker.net/v2/tomcat/tags/list
{"name":"tomcat","tags":["latest","v1.1"]}

search registry非常不友好,于是下一篇给大家推荐一个WEBGUI的仓库管理工具。非常好用,可认证,search,权限设定也很合理。

原文地址:https://www.cnblogs.com/dance-walter/p/9545249.html