天天看点

Linux企业运维——Docker仓库(三)一、什么是仓库?二、Docker Hub仓库三、Registry工作原理及仓库搭建四、添加证书加密功能五、为仓库添加用户认证功能

Docker仓库

  • 一、什么是仓库?
  • 二、Docker Hub仓库
  • 三、Registry工作原理及仓库搭建
    • 1.工作原理
    • 2.配置镜像加速器
    • 3.搭建私有仓库
  • 四、添加证书加密功能
  • 五、为仓库添加用户认证功能

一、什么是仓库?

  • Docker 仓库是用来包含镜像的位置,Docker提供一个注册服务器(Register)来保存多个仓库,每个仓库又可以包含多个具备不同tag的镜像。
  • Docker运行中使用的默认仓库是 Docker Hub 公共仓库。
Linux企业运维——Docker仓库(三)一、什么是仓库?二、Docker Hub仓库三、Registry工作原理及仓库搭建四、添加证书加密功能五、为仓库添加用户认证功能

二、Docker Hub仓库

docker hub是docker公司维护的公共仓库,用户可以免费使用,也可以购买私有仓库。

Linux企业运维——Docker仓库(三)一、什么是仓库?二、Docker Hub仓库三、Registry工作原理及仓库搭建四、添加证书加密功能五、为仓库添加用户认证功能

首先在https://hub.docker.com/网站注册一个账号

在docker hub上新建一个公共仓库

Linux企业运维——Docker仓库(三)一、什么是仓库?二、Docker Hub仓库三、Registry工作原理及仓库搭建四、添加证书加密功能五、为仓库添加用户认证功能
  • 创建之后可以看到如下公共仓库
    Linux企业运维——Docker仓库(三)一、什么是仓库?二、Docker Hub仓库三、Registry工作原理及仓库搭建四、添加证书加密功能五、为仓库添加用户认证功能
  • 接下来要从docker主机上传镜像,首先需要登录:

    [[email protected] ~]# docker login

    Username: yakexi007

    Password: <填写密码>

docker hub为了区分不同用户的同名镜像,要求镜像的格式是:[username]/xxx.tag

docker tag busybox:latest yakexi007/busybox:latest

  • 上传镜像到docker hub

    docker push yakexi007/busybox:latest

  • 从docker hub拉取镜像

    docker pull yakexi007/busybox:latest

    Linux企业运维——Docker仓库(三)一、什么是仓库?二、Docker Hub仓库三、Registry工作原理及仓库搭建四、添加证书加密功能五、为仓库添加用户认证功能
  • 删除本地镜像

    docker rmi yakexi007/busybox:latest

  • 删除docker hub中的镜像仓库
    Linux企业运维——Docker仓库(三)一、什么是仓库?二、Docker Hub仓库三、Registry工作原理及仓库搭建四、添加证书加密功能五、为仓库添加用户认证功能

三、Registry工作原理及仓库搭建

1.工作原理

Registry是一个几种存放image并对外提供上传下载以及一系列API的服务。可以很容易和本地源代码以及远端Git服务的关系相对应。

Docker hub是Docker公司提供的一些存储镜像的空间,这部分空间是有限的。我们一般会自主建设Docker私有仓库Registry。

  • Docker Registry有三个角色,分别是index、registry和registry client

    index:

    负责并维护有关用户帐户、镜像的校验以及公共命名空间的信息。

    Web UI

    元数据存储

    认证服务

    符号化

    registry:

    是镜像和图表的仓库,它不具有本地数据库以及不提供用户认证,通过Index Auth service的Token的方式进行认证。

    registry client:

    Docker充当registry客户端来维护推送和拉取,以及客户端的授权。

Linux企业运维——Docker仓库(三)一、什么是仓库?二、Docker Hub仓库三、Registry工作原理及仓库搭建四、添加证书加密功能五、为仓库添加用户认证功能

index服务主要提供镜像索引以及用户认证的功能。当下载一个镜像的时候,首先会去index服务上做认证,然后查找镜像所在的registry的地址并放回给docker客户端,docker客户端再从registry下载镜像,在下载过程中 registry会去index校验客户端token的合法性,不同镜像可以保存在不同的registry服务上,其索引信息都放在index服务上。

  • 情景A:

    用户要获取并下载镜像

Linux企业运维——Docker仓库(三)一、什么是仓库?二、Docker Hub仓库三、Registry工作原理及仓库搭建四、添加证书加密功能五、为仓库添加用户认证功能
  • 情景B:

    用户要获取并下载镜像

Linux企业运维——Docker仓库(三)一、什么是仓库?二、Docker Hub仓库三、Registry工作原理及仓库搭建四、添加证书加密功能五、为仓库添加用户认证功能
  • 情景C:

    用户要从index或registry中删除镜像

Linux企业运维——Docker仓库(三)一、什么是仓库?二、Docker Hub仓库三、Registry工作原理及仓库搭建四、添加证书加密功能五、为仓库添加用户认证功能

2.配置镜像加速器

从docker hub上下载镜像的速度太慢,需要配置镜像加速器,这里以阿里云为例:(需要提前注册阿里云帐号)

配置docker daemon文件:

vim /etc/docker/daemon.json
\\\
  {
  "registry-mirrors": ["https://vo5twm71.mirror.aliyuncs.com"]
  }
\\\
systemctl daemon-reload      #重载docker服务
systemctl restart docker
           

3.搭建私有仓库

docker hub虽然方便,但是还是有限制

需要internet连接,速度慢

所有人都可以访问

由于安全原因企业不允许将镜像放到外网

好消息是docker公司已经将registry开源,我们可以快速构建企业私有仓库

网址: https://docs.docker.com/registry/deploying/

Linux企业运维——Docker仓库(三)一、什么是仓库?二、Docker Hub仓库三、Registry工作原理及仓库搭建四、添加证书加密功能五、为仓库添加用户认证功能

下载registry镜像tag标记,需要加上仓库的ip和端口然后上传到本地

docker pull registry     #下载镜像
docker run -d -p 5000:5000 registry:2       #运行registry容器
docker tag game2048:latest localhost:5000/game2048:latest     #标记镜像
docker push localhost:5000/game2048:latest		  #上传镜像到本地仓库需要加上ip和端口
           

拉取镜像

Linux企业运维——Docker仓库(三)一、什么是仓库?二、Docker Hub仓库三、Registry工作原理及仓库搭建四、添加证书加密功能五、为仓库添加用户认证功能

查看

Linux企业运维——Docker仓库(三)一、什么是仓库?二、Docker Hub仓库三、Registry工作原理及仓库搭建四、添加证书加密功能五、为仓库添加用户认证功能

上传

Linux企业运维——Docker仓库(三)一、什么是仓库?二、Docker Hub仓库三、Registry工作原理及仓库搭建四、添加证书加密功能五、为仓库添加用户认证功能

测试

Linux企业运维——Docker仓库(三)一、什么是仓库?二、Docker Hub仓库三、Registry工作原理及仓库搭建四、添加证书加密功能五、为仓库添加用户认证功能

测试成功,但是这个私有仓库任何人都可以访问不安全,我们需要为Docker仓库添加证书加密功能

四、添加证书加密功能

  • 为Docker仓库添加证书加密功能
    • 生成证书(域名westos.org要求在主机上有解析)

创建证书存放目录并生成证书

mkdir certs      #创建证书目录
openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/westos.org.key -x509 -days 365 -out certs/westos.org.crt
           

证书生成时报错,原因是ssl版本太低的问题

我们需要用openssl11来生成证书,需要删掉原来的证书文件

下载本地安装包
lftp 172.25.254.111:/pub/docs/docker> mirror openssl11/
exit
cd openssl11/
 yum install  -y *    #将目录中的openssl11的安装包全部安装
           

下载好openssl11之后创建加密认证的密钥

openssl11 req -newkey rsa:4096 -nodes -sha256 -keyout certs/westos.org.key  -addext "subjectAltName = DNS:reg.westos.org" -x509 -days 365 -out certs/westos.org.crt
           

重新将证书拷贝到/etc/docker/certs.d/reg.westos.org/ca.crt

拷贝证书到docker主机

因为使用的是自签证书,客户端要与私有仓库通信,那么必须建立一个目录:/etc/docker/certs.d,在这个目录下建立签名的域名的目录,需要把私有仓库的证书拷贝到这个目录下

mkdir -p /etc/docker/certs.d/reg.westos.org
cp certs/westos.org.crt /etc/docker/certs.d/reg.westos.org/ca.crt
           

将域名reg.westos.org写在/etc/hosts解析文件中

标记重命名game2048并上传到本地的reg.westos.org仓库中

五、为仓库添加用户认证功能

(1)创建用户认证文件并安装相关支持软件

mkdir auth
yum install -y httpd-tools-2.4.6-88.el7.x86_64     #安装认证的软件
           
Linux企业运维——Docker仓库(三)一、什么是仓库?二、Docker Hub仓库三、Registry工作原理及仓库搭建四、添加证书加密功能五、为仓库添加用户认证功能

(2)添加用户admin

htpasswd -Bc auth/htpasswd admin

Linux企业运维——Docker仓库(三)一、什么是仓库?二、Docker Hub仓库三、Registry工作原理及仓库搭建四、添加证书加密功能五、为仓库添加用户认证功能

(3)删除之前的容器并重建,添加用户认证及密钥模块

运行registry容器

docker rm -f registry  
docker run -d --restart=always --name registry  -v "$(pwd)"/certs:/certs  -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/westos.org.crt -e REGISTRY_HTTP_TLS_KEY=/certs/westos.org.key  -p 443:443 registry     # -v表示挂载
           

(4)在server2主机上拉取仓库镜像

server2主机应当安装docker,设置为开机启动,拷贝server1的证书ca.crt到server2已经安装docker的

Linux企业运维——Docker仓库(三)一、什么是仓库?二、Docker Hub仓库三、Registry工作原理及仓库搭建四、添加证书加密功能五、为仓库添加用户认证功能

报错了,说明需要身份验证

(5)server1进行身份认证后,再次上传镜像

登陆用户

上传镜像

Linux企业运维——Docker仓库(三)一、什么是仓库?二、Docker Hub仓库三、Registry工作原理及仓库搭建四、添加证书加密功能五、为仓库添加用户认证功能

上传成功

(6)server2再次拉取镜像

登陆用户admin 再次拉取

Linux企业运维——Docker仓库(三)一、什么是仓库?二、Docker Hub仓库三、Registry工作原理及仓库搭建四、添加证书加密功能五、为仓库添加用户认证功能

说明添加身份认证之后必须登陆用户之后才能拉取和上传镜像!