docker私有仓库搭建

http://xiaorenwutest.blog.51cto.comlinux

             docker中部署私有仓库nginx

前言:docker中若是要使用镜像必须从本地或者从docker Hup公共仓库中下载镜像,可是若是须要的镜像本地没有;另外公共仓库中的镜像或许会有咱们须要的镜像,可是出于安全的考虑也不会使用。那么有没有一种办法能够存储本身的镜像的仓库呢?就是搭建本身的私有仓库。web

注:搭建本身的私有仓库在生产环境中须要CA服务器,另外咱们须要一个nginx进行反向代理,在使用CA服务器进行链接的时候是经过https协议进行加密传输的,因此须要安装openssl包裹。正则表达式

实验环境:docker

wKiom1kXHSvQy9K2AAAdvOZlmxI730.png-wh_50 

两台Linux主机,一台服务器ip192.168.65.128,另一台为客户端IP192.168.65.129centos

说明:安全

docker.benet.com 这是docker registry服务器的主机名称,ip192.168.65.128;由于httpsSSL证书要用到主机名,因此要设置主机名。服务器

dockerregistry 服务器做为处理docker镜像的最终上传和下载,用的是官方的镜像registrycurl

nginx 1.6.x 是一个用nginx做为反向代理服务器ide

注:关闭selinux

1)私有仓库https支持:

A)安装依赖软件包:

wKiom1kXHV7DeOT4AAAN6w6VaAw617.png-wh_50 

1:首先安装docker环境,将docker设置为启动

wKiom1kXHXbwr7-ZAAAKPrUKwsM682.png-wh_50 

添加系统服务和启动docker服务

wKioL1kXHYnAqcqKAAANdT8coTQ724.png-wh_50 

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

主机名、ip地址:

wKiom1kXHZuzKQXTAAAgN-Jzhp4885.png-wh_50 

(2) 生成根密钥

先把

/etc/pki/CA/cacert.pem 
/etc/pki/CA/index.txt 
/etc/pki/CA/index.txt.attr 
/etc/pki/CA/index.txt.old 
/etc/pki/CA/serial 
/etc/pki/CA/serial.old

删除掉!

若是没有则不用删除,另外在初始安装CA的时候不用删除

wKiom1kXHbGSeW_XAABM2gRWoEA477.png-wh_50 

(3) 生成根证书

执行以下图:

wKioL1kXHcbyisKwAAB8-94zKcY872.png-wh_50 

 

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

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

wKiom1kXHduSbQjWAAAUWEGm2og621.png-wh_50 

(4) nginx web服务器生成ssl密钥

#mkdir  /etc/pki/CA/ssl

#cd  /etc/pki/CA/ssl

wKioL1kXHfDCJwKiAAALqITRhMI621.png-wh_50 

接下来为nginx生成秘钥

wKiom1kXHgKBVqDYAAAxWJQU-DM980.png-wh_50 

注:由于CA中心与要申请证书的nginx服务器是同一个因此就在本机上执行为nginx服务器生成ssl密钥了,不然应该是在另外一台须要用到证书的服务器上生成。

查看nginx服务器的密钥

wKiom1kXHhrScNFCAAAKiaN98X4278.png-wh_50 

 

(5) nginx生成证书签署请求

执行

wKioL1kXHi6wPGQLAACgwHpIUb8739.png-wh_50 

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

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

wKioL1kXHkKDjNe6AAAQZ_odWv4826.png-wh_50 

执行

openssl ca -in nginx.csr -out nginx.crt

输出内容:nginx的证书信息

wKiom1kXHlXhY0mCAACNI17sPuk191.png-wh_50 

 

一样会提示输入一些内容,选择y就能够了!

查看nginx的证书

wKioL1kXHmjB81C0AAA9J7icLmk880.png-wh_50 

查看生成的证书

wKiom1kXHnuB9wrjAAAQEUXPjs4081.png-wh_50 

安装,配置,运行nginx

(1) 添加组和用户

wKioL1kXHpyyEk2_AAAVJKceSeY909.png-wh_50 

编译,安装nginx:

wKiom1kXHq6jKLpOAABT-U0lpVE047.png-wh_50 

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

--prefix=PATH 设定安装目录

--with-pcre启用pcre库,NginxRewrite模块和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)文件提供服务端伪流媒体支持

编辑nginx配置文件

 wKioL1kXIPixwkQoAAAODWSEVJw260.png-wh_50

wKiom1kXIRqBMp9-AACAsB259is698.png 

语法检测:是否ok

wKioL1kXITjTmfdfAABGrero3mw302.png-wh_50 

启动nginx另外查看是否为443端口使用https协议

 wKiom1kXIWvzOtujAAAifsL2eFw783.png-wh_50

2) 配置,运行Docker

(1) 中止docker

wKioL1kXIZGDne3WAAAL3ew8TQU501.png-wh_50 

(2)编辑/etc/sysconfig/docker文件,加上以下一行

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

wKioL1kXIaOCu9kOAAAXBX_-ANo246.png-wh_50 

(3) 把根证书复制到/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

wKiom1kXIbryNLC2AAAdhku6XPc411.png-wh_50 

(4) 启动docker

wKioL1kXIc2jiudCAAAMUnfthIc466.png-wh_50 

3)运行私有仓库容器

运行registry 镜像来搭建私有仓库,经过官方得到

wKioL1kXId-T2hDLAAAnFG_6ilk463.png-wh_50 

wKiom1kXIfGxegmAAAAbSEz_47A888.png-wh_50 

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

wKiom1kXIgOQADVuAAALipzp1v0249.png-wh_50 

运行私有仓库容器

wKioL1kXIheAvTP7AAA3vTGEH1A510.png-wh_50 

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

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

 

4)验证registry:

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

wKiom1kXIivBIvVjAAA2mij4u9o446.png-wh_50 

Docker客户端配置

(1)编辑/etc/hosts,docker.benet.comip地址添加进来

wKioL1kXIkGAubdrAAAgN-Jzhp4182.png-wh_50 

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

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

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

 

wKioL1kXIlbgeYkkAABx0qyscBk102.png-wh_50 

 

(3) 验证docker.benet.com下的registry:

wKiom1kXInPBmaXRAAA2mij4u9o644.png-wh_50 

注:此项工做以前先将防火墙关闭再或者将5000端口和443端口放行,不然防火墙禁止通行

(4) 使用私有registry步骤:

能够经过docker login命令登陆交互式系统输入用户名和密码;或者也能够经过

登陆: docker login -u lxftest -p pwd123 -e "lxf@benet.com" https://docker.benet.com实现

Docker HUB 上拉取一个镜像测试为基础镜像打个标签:

docker tag centos:centos6 docker.benet.com/centos:centos6

wKiom1kXIobjzAcnAABfZCeEYVc100.png-wh_50 

发布:上传镜像到本地私有仓库  上传命令 docker push 加完整的镜像

docker push docker.benet.com/centos:centos6

 

wKioL1kXIpeDg0YiAAA47tR2XDo785.png-wh_50 

从私有仓库pull下来p_w_picpath,查看p_w_picpath 下载命令 docker pull 加完整的镜像名

wKiom1kXIqjzidqFAADp0DQkb4k328.png-wh_50 

 

 

在服务器端的私有仓库:查看私有仓库是否有对应的镜像

wKiom1kXIrmzH8hnAAAY39N-UjY658.png-wh_50 

私有仓库的优缺点:

弊端:

server端能够login到官方的Docker Hub,能够pull,push官方和私有仓库
client端只能操做搭设好的私有仓库
私有仓库不能search!

 

优势:

全部的build,pull,push操做只能在私有仓库的server端操做,下降企业风险!

相关文章
相关标签/搜索