前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SSL及Nginx代理搭建环境的Docker仓库

SSL及Nginx代理搭建环境的Docker仓库

作者头像
SDNLAB
发布2018-04-02 16:37:19
1.9K0
发布2018-04-02 16:37:19
举报
文章被收录于专栏:SDNLABSDNLAB

使用私有仓库有许多优点:节省网络带宽,针对于每个镜像不用每个人都去中央仓库上面去下载,只需要从私有仓库中下载即可;提供镜像资源利用,针对于公司内部使用的镜像,推送到本地的私有仓库中,以供公司内部相关人员使用。

我的环境:CentOS-7-x86_64-Everything-1511

Docker版本:Version: 1.10.3,API version: 1.22,Go version: go1.5.3

在下载Linux发行版的时候需要下载较新的版本,Docker所支持的Linux kernel版本过低会出现问题。

一、安装Docker

CentOS中更新源后安装docker,官网https://docs.docker.com/engine/installation/linux/centos/

安装完成Docker环境之后不要去关闭CentOS的防火墙和Selinux,因为Docker的安全机制是基于iptables的,关闭selinux会是的Docker的安装出错。

Docker: Error response from daemon: failed to create endpoint registry on network bridge: iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 5000 -j DNAT --to-destination 172.17.0.2:5000 ! -i docker0: iptables: No chain/target/match by that name.

(exit status 1).

二、安装Docker Registry

目前Docker Registry已经升级到了v2,最新版的Docker已不再支持v1。Registry v2使用Go语言编写,在性能和安全性上做了很多优化,重新设计了镜像的存储格式。

1.官网安装 registry

https://docs.docker.com/registry/

2.使用Docker-compose安装(推荐)

Docker-compose是一个非常有用的Docker运行,管理的工具。你可以通过定义compose文件,使用简单的一条命令同时起多个Docker Container运行不同的服务。Docker-compose对于开发,测试,环境保存以及CI都提供了非常大的便利。

Docker-compose是用Python开发的一个工具,所以可以用pip直接安装。

需要注意的是,docker-compose可能对requests module的版本有限制,而本机上可能安装了更高版本的requests模块,造成运行时报错。可以使用pip-conflict-checker检查版本冲突,卸载不合适的版本,重新安装一个合适的版本。

实际使用操作中使用pip安装的docker-compose可能在执行时还会报代码有bug。

所以推荐直接从github中下载稳定的release版本安装。

安装htpasswd

因为需要使用nginx提供安全验证的功能,需要一个地方放置用户名和密码对。

使用由httpd-tools提供的htpasswd工具生成用户名密码对。

安装httpd-tools.

三、运行Registry Container并使用Nginx做代理

运行nginx和registry容器

创建一个工作目录,例如/data/programs/docker,并在该目录下创建docker-compose.yml文件,将以下docker-compose.yml内容复制粘贴到你的docker-compose.yml文件中。

内容大致意思为,基于“nginx:1.9” image运行nginx容器,暴露容器443端口到host 443端口。并挂载当前目录下的nginx/目录为容器的/etc/nginx/config.d目录。

nginx link到registry容器。基于registry:2 image创建registry容器,将容器5000端口暴露到host 5000端口,使用环境变量指明使用/data为根目录,并将当前目录下data/文件夹挂载到容器的/data目录。

配置nginx

在nginx目录中创建registry.conf文件配置nginx。配置nginx与registry的关系,转发端口,以及其他nginx的配置选项。复制,粘贴如下内容到你的registry.conf文件中:

配置文件创建完成后,回到工作目录执行docker-compose up运行registry和nginx容器。

执行docker-compose up后。注意是否有容器启动失败的消息,如果容器启动失败的消息,需要检查网络,是否能从dockerhub上pull image(需代理,或使用使用国内镜像,使用国内镜像需更改docker-compose.yml文件中image项)。也由可能粘贴配置文件错误,需仔细检查。

启动后也可以使用docker ps命令查看是否两个容器都正常运行。

确定docker容器都正常运行后,用curl 命令验证功能是否正常运行。使得localhost:5000和localhost:443访问registry都应该返回{}。

#都是返回{}

使用ctrl-c退出docker-compose,继续后面的步骤。

添加用户名和密码

在/data/programs/docker/nginx目录下执行下面命令创建用户名和密码对,如果要创建多个用户名和密码对,则不是使用“-c“选项。

然后修改Registry.conf文件,取消下面三行的注释。

再次执行docker-compose up运行registry,这时使用localhost:5000端口访问得到的结果为”{}”,但是使用localhost:443访问将得到”401 Authorisation Required“的提示。加入用户名和密码验证才能得到与直接访问registry 5000端口相同的结果。

四、加入SSL验证

如果你有经过认证机构认证的证书,则直接使用将证书放入nginx目录下即可。如果没有,则使用openssl创建自己的证书。

进行/data/programs/docker/nginx目录,生成一个新的root key

生成根证书(一路回车即可)

为server创建一个key。(这个key将被nginx配置文件registry.con中ssl_certificate_key域引用)

制作证书签名请求。注意在执行下面命令时,命令会提示输入一些信息,”Common Name”一项一定要输入你的域名(官方说IP也行,但是也有IP不能加密的说法),其他项随便输入什么都可以。不要输入任何challenge密码,直接回车即可。

签署认证请求

配置nginx使用证书

修改registry.conf配置文件,取消如下三行的注释

运行Registry

执行docker-compose up -d在后台运行Registry,并使用curl验证结果。这时使用localhost:5000端口仍然可以直接访问Registry,但是如果使用443端口通过nginx代理访问,因为已经加了SSL认证,所以使用http将返回“400 bad request”

应该使用https协议

由于是使用的未经任何认证机构认证的证书,并且还没有在本地应用自己生成的证书。所以此时会提示使用的是未经认证的证书,可以使用“-k"选项不进行验证。

五、Docker客户端使用Registry

添加证书

Centos 6/7 添加证书具体步骤如下:

安装ca-certificates包

使能动态CA配置功能

将key拷贝到/etc/pki/ca-trust/source/anchors/

使新拷贝的证书生效

证书拷贝后,需要重启docker以保证docker能使用新的证书

Docker pull/push image测试

制作要push到registry的镜像

#查看本地已有镜像

#为本地镜像打标签

push测试

#不登陆直接push镜像到registry,会提示失败

#登陆后,再试

#可以push 镜像到registry

搜索镜像

pull测试

#不登陆registry直接pull镜像也会失败

#登陆后再测试

#登陆后可以pull

六、CentOS 7安装Docker及常用命令

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-04-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SDNLAB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档