Docker私有仓库

一、前提条件

(1)关闭selinux


(2)开启路由转发


改写完成之后  sysctl -p   刷新一下

正式开始

1、安装依赖软件包


在Nginx编译需要PCRE,因为Nginx的Rewrite模块和HTTP核心模块会使用到 PCRE 正则表达式。需要安装pcre 和pcre-devel用yum就能安装。

Zlib库提供了开发人员的压缩算法,在 nginx的模块中需要使用 gzip压缩。 需要安装zlib和zlib-devel用yum就可以安装在 Nginx 中如果需要为服务器提供安全则需要用到 OpenSSL 库。

需要安装的是 openssl 和 openssl-devel。用 yum 就可以安装。

配置SSL

(1)  编辑/etc/hosts,把 docker.benet.com的 ip地址添加进来,例如:

主机名、ip地址:

更改主机名


更改hosts文件




生成根证书


会提示输入一些内容,因为是私有的,所以可以随便输入,最好记住能与后面保持一致,特别是"Common Name”。必须要和hostname 显示的一致

上面的自签证书cacert.pem应该生成在/etc/pki/CA下


为 nginx web服务器生成 ssl密钥



注: 因为 CA 中心与要申请证书的 nginx服务器是同一个所以就在本机上执行为nginx服务器生成ssl密钥了,否则应该是在另一台需要用到证书的服务器上生成。

查看nginx服务器的密钥


为 nginx生成证书签署请求


同样会提示输入一些内容, Commone Name一定要是你要授予证书的服务器域名或主机名,challenge password 不填。

私有CA 根据请求来签发证书



同样会提示输入一些内容,选择 y就可以了!

查看nginx的证书


安装,配置,运行 nginx

添加组和用户

下载nginx源文件:


编译,安装nginx:


上述选项的解释:

--user=USER  设定程序运行的用户环境(www)

--group=GROUP  设定程序运行的组环境(www)

--prefix=PATH  设定安装目录

--with-pcre启用pcre库,Nginx的Rewrite模块和 HTTP核心模块会使用到 PCRE正则表达式

--with-http_stub_status_module是为了启用 nginx 的 NginxStatus 功能,用来监控 Nginx 的当前状态

--with-http_ssl_module                    开启 SSL 模块,支持使用 HTTPS协议的网页

--with-http_realip_module  开启Real IP的支持,该模块用于从客户请求的头数据中读取Real Ip地址

--with-http_addition_module   开启 Addtion 模块,该模块允许你追加或前置数据到相应的主体部分

--with-http_flv_module模块ngx_http_flv_module 为Flash Video(FLV)文件提供服务端伪流媒体支持


编辑/usr/local/nginx/conf/nginx.conf 文件


相关选项含义:

ssl_session_cache会话缓存用于保存 SSL 会话,这些缓存在工作进程间共享,可以使用

ssl_session_cache指令进行配置。1M缓存可以存放大约 4000个会话。

ssl_session_timeout缓存超时,默认的缓存超时是5分钟。

ssl_ciphers    HIGH:!aNULL:!MD5使用高强度的加密算法

ssl_prefer_server_ciphers    on 依赖 SSLv3 和 TLSv1 协议的服务器密码将优先于客户端密码。

即:在 SSLv3 或这是TLSv1握手时选择一个密码,通常是使用客户端的偏好。如果这个指令是启用的,那么服务器反而是使用服务器的偏好。

client_max_body_size即允许上传文件大小的最大值

proxy_set_headerHost $host 和proxy_set_header X-Forward-For $remote_addr 的作用描述:

nginx 为了实现反向代理的需求而增加了一个 ngx_http_proxy_module 模块。其中proxy_set_header 指令就是该模块需要读取的配置文件。在这里,所有设置的值的含义和 http

请求同中的含义完全相同,除了 Host外还有X-Forward-For。

       Host的含义是表明请求的主机名,因为 nginx作为反向代理使用,而如果后端真实的服务器设置有类似防盗链或者根据http请求头中的host字段来进行路由或判断功能的话,如果反向代理层的 nginx不重写请求头中的host字段,将会导致请求失败【默认反向代理服务器会向后端真实服务器发送请求,并且请求头中的 host 字段应为 proxy_pass 指令设置的服务器】。

同理,X_Forward_For字段表示该条http请求是有谁发起的?如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来自反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。因此,在配置用作反向代理的 nginx中一般会增加两条配置,修改 http的请求头:

proxy_set_headerHost $host;

proxy_set_headerX-Forward-For $remote_addr;

这里的$host和$remote_addr 都是nginx的导出变量,可以再配置文件中直接使用。

验证配置


启动nginx:


验证nginx是否启动:


配置,运行Docker

停止docker


编辑/etc/sysconfig/docker 文件,加上如下一行

DOCKER_OPTS="--insecure-registrydocker.benet.com --tlsverify --tlscacert /etc/pki/CA/cacert.pem"


把根证书复制到/etc/docker/certs.d/docker.yy.com/目录下

mkdir -p/etc/docker/certs.d/docker.benet.com

cp /etc/pki/CA/cacert.pem /etc/docker/certs.d/docker.benet.com/ca-certificates.crt


启动docker


上传registry 镜像         rz

再载入       


例如将目录/opt/data/registry 作为私有仓库的位置


运行私有仓库容器


有时候启动不起来  自己手动一下

可以通过  -v  参数来将镜像文件存放在本地的指定路径。例如上面的例子将上传的镜像放到/opt/data/registry  目录。

-p(小写的)用于将容器的 5000端口映射宿主机的 5000端口。

验证registry:

用浏览器输入: https://docker.benet.com


或者:curl -i -k https://docker.benet.com


curl 是通过 url 语法在命令行下上传或下载文件的工具软件,它支持 http,https,ftp,ftps,telnet 等多种协议,常被用来抓取网页和监控 Web 服务器状态

服务端的配置就到此完成!

注意:注意防火墙


Docker客户端配置

编辑/etc/hosts,把 docker.benet.com的 ip地址添加进来,例如:


把 docker registry服务器端的根证书追加到 ca-certificates.crt文件里

先从docker registry服务器端把文件/etc/pki/CA/cacert.pem 拷贝到本机,然后执行命令:

cat ./cacert.pem>>/etc/pki/tls/certs/ca-certificates.crt


验证docker.yy.com下的registry:

用浏览器输入: https://docker.benet.com


或者:curl -i -k https://docker.benet.com

使用私有registry 步骤:

登录: docker login -u testuser -p pwd123 -e"test@benet.com" https://docker.benet.com


上传个镜像测试 给打上标

docker pushdocker.benet.com/centos:centos6


发布:上传镜像到本地私有仓库

docker pushdocker.benet.com/centos:centos6


查看私有仓库是否有对应的镜像

# curl192.168.0.167:5000/v1/search

查看镜像的存储目录和文件(在镜像服务器

/opt/data/registry/repositories


从私有仓库pull下来 image,查看image


查看私有仓库是否有对应的镜像


或浏览器访问仓库


(1)  弊端:

server 端可以 login 到官方的 Docker Hub,可以 pull,push 官方和私有仓库! 

client 端只能操作搭设好的私有仓库! 

私有仓库不能 search!

(2)  优点:

所有的 build,pull,push 操作只能在私有仓库的 server 端操作,降低企业风险!

(3)  当 client端 docker login 到官方的https://index.docker.io/v1/网站,出现x509: certificate signed by unknown authority 错误时

重命名根证书 mv /etc/pki/tls/certs/ca-certificates.crt

/etc/pki/tls/certs/ca-certificates.crt.bak 

重启 docker 服务!

 servicedocker restart!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值