实验需求:

创建自己的仓库----镜像仓库

实验环境

两台centos7虚拟机

wKioL1j21eDAh_ncAABXcSkedDM177.png-wh_50

实验步骤:

说明:

docker.benet.com这是docker registry服务器的主机名称,ip192.168.1.107;因为httpsSSL证书要用到主机名,所以要设置主机名。

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

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

注:关闭selinux

wKiom1j21jij3oz0AAAOIIcQQus098.png-wh_50

挂载centos7系统盘

wKioL1j21QTAZKEvAAAMWsUSgdY264.png-wh_50

手动创建yum源

docker仓库(手动创建)_第1张图片

私有仓库https支持:

安装依赖软件包:

wKioL1j21QWSMWlfAAAJcS8CAfE753.png-wh_50

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

主机名、ip地址

wKioL1j21QWQGIrQAAASarlLafI715.png-wh_50

生成根密钥

先把

/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

删除掉!

wKiom1j21QbwchB9AAAGLn54Ec8192.png-wh_50

生成根证书

wKioL1j21QayYz80AAAZ7xXhyjU014.png-wh_50

输出如下信息

docker仓库(手动创建)_第2张图片

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

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

wKioL1j21QfSnw8SAAAJdHWldSc641.png-wh_50

nginx web服务器生成ssl密钥

wKiom1j21QfDw8cmAAAPFv4Ms_I058.png-wh_50

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

查看nginx服务器的密钥

wKioL1j21QfTrg4yAAAYXuQkCSQ902.png-wh_50

nginx生成证书签署请求(同样会提示输入一些内容,Commone Name一定要是你要授予证书的服务器域名或主机名,challenge password不填)

docker仓库(手动创建)_第3张图片

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

wKioL1j21QiwMaxVAAAN-hpY2oE963.png-wh_50

输出内容

docker仓库(手动创建)_第4张图片

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

查看nginx的证书

wKiom1j21QmQNINyAAAILLQxt0E878.png-wh_50

安装,配置,运行nginx

添加组和用户

wKioL1j21QmCcB91AAAKVJP6w_4494.png-wh_50

下载nginx源文件

wKiom1j21QmC4-UAAAAbuDRp9Hw926.png-wh_50

编译 nginx:

wKioL1j21QmSET8YAAAohs-o3jk181.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)文件提供服务端伪流媒体支持)

wKioL1j21Qqw_Lt7AAAHZ4teGm8127.png-wh_50

编辑/opt/nginx/conf/nginx.conf文件

wKiom1j21QqwEyJTAAAHXd7nCOM656.png-wh_50

docker仓库(手动创建)_第5张图片

验证配置

wKioL1j21UTShI6PAAASgNyykVU104.png-wh_50

启动nginx

wKioL1j21UTwiAGMAAAGmAMkd2Q696.png-wh_50

验证nginx是否启动

docker仓库(手动创建)_第6张图片

配置,运行Docker

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

wKiom1j21UWh-OVIAAAJDe7-gDI751.png-wh_50

wKioL1j21UXjYzAwAAALCX3oUAo948.png-wh_50

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

wKioL1j21UbALMlbAAAQNFQ9O1o430.png-wh_50

启动docker

wKiom1j21Uawt0AYAAAIc_FhFCo697.png-wh_50

通过获取官方 registry 镜像来运行

wKioL1j21UfhWtWlAAA_6QNypho615.png-wh_50

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

wKiom1j21UfhnvzbAAAR_61Ykk8061.png-wh_50

运行私有仓库容器

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

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

wKiom1j21UfBL8hOAAAUZESG7Wc157.png-wh_50

验证registry

docker仓库(手动创建)_第7张图片

注意防火墙

wKiom1j21UjgBrgKAAAO6q1W4uo413.png-wh_50

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

 

Docker客户端配置

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

wKioL1j21UnSQU6tAAATTXZIQms781.png-wh_50

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

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

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

wKioL1j21UnCHVGQAAAzIecb7eU300.png-wh_50

wKiom1j21UrgzC1PAAAIwq3u-T4913.png-wh_50

验证docker.yy.com下的registry

docker仓库(手动创建)_第8张图片

导入镜像

docker仓库(手动创建)_第9张图片

开启docker服务

wKiom1j22OKzNZdqAAAK1mXiF_E709.png-wh_50

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

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

wKiom1j21UzRSPoYAAASVyjVyMk595.png-wh_50

wKioL1j21U2AllLsAAAdQ4ULXoA078.png-wh_50

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

wKiom1j21U2R5nFXAAAxdgiIjZE572.png-wh_50

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

# curl 192.168.0.167:5000/v1/search

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

tree /opt/data/registry/repositories

docker仓库(手动创建)_第10张图片

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

docker仓库(手动创建)_第11张图片

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

wKioL1j21VDh9xopAAAbAZzYvQw830.png-wh_50