docker仓库实际上提供两方面的功能,一个是镜像管理,一个是认证。前者主要由docker-registry项目来实现,经过http服务来上传下载;后者能够经过docker-index(闭源)项目或者利用现成认证方案(如nginx)实现http请求管理。最主要仍是实现本身公司业务的镜像管理。
两台机器都装有Docker version 1.13.1 一、192.168.188.128 私有仓库 二、192.168.188.136 docker开发环境
安装前将iptables,selinux给关闭linux
~]# 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
~]# 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也必然能够容器化,此篇幅直接使用官方的registry容器。也可以使用rpm或源码安装。docker
~]# 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镜像
一、 192.168.188.136shell
~]# 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:json
~]# docker login docker.farobot.net Username: xiaoniaoo Password: Login Succeeded //账号密码输出正确,提示登录成功
再次push镜像:vim
~]# 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 //推送成功
二、192.168.188.128
查看私有仓库中的镜像是否上传上来了:
以前定义的私有镜像的存放目录为/data/registrytomcat
[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,权限设定也很合理。服务器