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
[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,权限设定也很合理。