企业之Docker容器仓库简介及仓库的搭建及其使用

导语:

仓库在docker架构里是很重要的一部分。镜像会因为业务的需要以不同类型的方式存在。所以,这么多类型的镜像如果没有一个很好的机制去管理,那么肯定会乱套。好比一生产车间,生产需要各种各样的螺丝钉、齿轮等配件,如果没有一个很好的仓库管理员负责对配件进行管理,那么车间里将乱七八糟。同样的,docker 镜像也需要标准化管理,那么负责这块功能的模块就是Registry。

一.Docker仓库简介

共有仓库:

Docker Hub(https://hub.docker.com/) 是默认的 Registry,由 Docker 公司自己维护,上面有数以万计的镜像,用户可以自由下载和使用。当然除了docker hub,咱们国内也有很多共有仓库,因为docker hub因为当初有“墙”的原因,有时候会很慢

1.共有仓库的特点

  • 官方、权威
  • 数量大、种类多
  • 仓库名称前没有命名空间:这个特点是docker hub比较重大的特点,因为docker hub是镜像仓库的原始发源地,是所有镜像仓库的“根”,加上它是放在公网上,所以前面不存在命名空间去区分。

私有仓库:

上面我们说的共有仓库特点很多,也非常好用。但是,共有仓库也有它不能满足的地方。比如公司企业级的一些私有镜像,这些镜像涉及到一些机密的数据和软件,私密性比较强,就不太适合放在共有仓库里。另外,假如你们的服务器环境不允许上外网,那么也无法下载到共有仓库的镜像。因此,为了解决这两大问题,我们就需要搭建自己的私有仓库,存储我们自己的私有镜像。

1.私有仓库的特点

  • 私密性、安全性高
  • 访问速度快:私有仓库一般是放在公司内网的,当然不受外网访问的限制影响。
  • 自主控制、维护性高
二.Docker Hub

首先要确保网络畅通

1.首先在https://cloud.docker.com/网站注册一个账号,然后首先查看镜像加速器

  • Docker加速器提供Docker Registry(Docker Hub)在中国的镜像代理服务,为中国用户在国内服务器上缓存诸多镜像。当用户的Docker设定–registry-mirror参数后,用户的Docker拉取镜像时,首先去Docker加速器中查找镜像,若命中则说明该镜像已经在Docker加速器中缓存,用户直接从Docker加速器中下载。
  • 若没有命中,则说该镜像还没有被缓存那么Docker加速器首先会被驱使去Docker Hub中下载该镜像,并进行缓存,最终让用户从Docker加速器中下载该镜像。

企业之Docker容器仓库简介及仓库的搭建及其使用_第1张图片

2.配置镜像加速器

[root@server1 ~]# cd /etc/docker/
[root@server1 docker]# ls
key.json
[root@server1 docker]# vim daemon.json
文件中添加自己注册帐号下的镜像加速器:
{
  "registry-mirrors": ["https://x0jsw11m.mirror.aliyuncs.com"]
}

重启docker添加加入的镜像加速器:
[root@server1 docker]# systemctl daemon-reload
[root@server1 docker]# systemctl restart docker

3.进行登陆认证,在阿里云界面查看登陆认证方式

企业之Docker容器仓库简介及仓库的搭建及其使用_第2张图片

企业之Docker容器仓库简介及仓库的搭建及其使用_第3张图片

4.验证:升级nginx服务

a.查看公共仓库里面的nginx

企业之Docker容器仓库简介及仓库的搭建及其使用_第4张图片
b.查看本及nginx的现有版本

企业之Docker容器仓库简介及仓库的搭建及其使用_第5张图片

c.通过公共仓库下载nginx

企业之Docker容器仓库简介及仓库的搭建及其使用_第6张图片

d.下载完成后查看nginx的版本发现版本已经更新

企业之Docker容器仓库简介及仓库的搭建及其使用_第7张图片

三、registry私有仓库简介

1.Registry工作原理

一次docker pull 或 push背后发生的事情

企业之Docker容器仓库简介及仓库的搭建及其使用_第8张图片

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

2.Registry工作角色介绍

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

  • index
    负责并维护有关用户帐户、镜像的校验以及公共命名空间的信息。
    Web UI
    元数据存储
    认证服务
    符号化
  • registry
    是镜像和图表的仓库,它不具有本地数据库以及不提供用户认证,通过Index Auth service的Token的方式进行认证。
  • Registry Client
    Docker充当registry客户端来维护推送和拉取,以及客户端的授权。

四.私有仓库的部署

1.docker私有库的创建需要下载registry.tar的镜像,并且本地导入公共仓库的镜像,docker官方已经把仓库封装为镜像,直接通过启动容器就可以部署完成仓库

//本地下载镜像
[root@server1 ~]# docker load -i registry2.tar 

//使用registry镜像运行容器
[root@server1 ~]# docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry:2 
[root@server1 ~]# cd /opt/registry/
[root@server1 registry]# ls
docker
[root@server1 registry]# cd docker/
[root@server1 docker]# ls
registry
查看私有仓库下的docker进程树
[root@server1 registry]# cd /opt/registry/
[root@server1 registry]# ls
docker
[root@server1 registry]# yum insatll -y tree
[root@server1 registry]# tree docker/


//对本地镜像重命名并且上传本地镜像到仓库
[root@server1 ~]# docker tag nginx:latest localhost:5000/nginx
[root@server1 ~]# docker images localhost:5000/nginx

//拉取上传的镜像到本地,因为本地已经有该镜像,为了实验效果可以将本地有的镜像删除然后再进行拉取
[root@server1 registry]# docker rmi localhost:5000/nginx:latest
[root@server1 registry]# docker rmi nginx:latest 
[root@server1 registry]# docker pull localhost:5000/nginx

企业之Docker容器仓库简介及仓库的搭建及其使用_第9张图片

企业之Docker容器仓库简介及仓库的搭建及其使用_第10张图片

五、给创建的私有仓库添加证书

上一步创建的私有仓库任何人都可以访问,这是不安全的,因此需要添加证书来增加私有仓库的安全性

1.创建服务端私有仓库的key及其证书

[root@server1 docker]# pwd
/tmp/docker
[root@server1 docker]# mkdir - p certs
[root@server1 docker]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/westos.org.key -x509 -days 365 -out certs/westos.org.crt

企业之Docker容器仓库简介及仓库的搭建及其使用_第11张图片

2.删除已经使用私有仓库运行的容器,重新运行容器使用私有仓库镜像,添加认证方式

[root@server1 docker]# docker rm -f registry 

[root@server1 docker]# pwd
/tmp/docker
[root@server1 docker]# docker run -d \
> --restart=always \
> --name registry \
> -v /tmp/docker/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 \
> -v /opt/registry/:/var/lib/registry \
> registry:2

企业之Docker容器仓库简介及仓库的搭建及其使用_第12张图片

企业之Docker容器仓库简介及仓库的搭建及其使用_第13张图片

//容器运行完成之后查看信息,会出现https的端口:

企业之Docker容器仓库简介及仓库的搭建及其使用_第14张图片

3.创建证书存放目录(/etc/docker)并且将生成的证书(/tpm/docker)导入该目录

[root@server1 docker]# pwd
/etc/docker
[root@server1 docker]# ls
daemon.json  key.json
[root@server1 docker]# mkdir certs.d/
[root@server1 docker]# cd certs.d/
[root@server1 certs.d]# ls
[root@server1 certs.d]# mkdir westos.org
[root@server1 certs.d]# cd westos.org/
[root@server1 westos.org]# cp /tmp/docker/certs/westos.org.crt .
[root@server1 westos.org]# ls
westos.org.crt

4.对已有镜像使用私有仓库名重命名并且进行导入到私有仓库,再导入镜像时注意要添加私有仓库的域名解析

企业之Docker容器仓库简介及仓库的搭建及其使用_第15张图片
//添加域名解析

在这里插入图片描述

在这里插入图片描述

//上传本地镜像到私有仓库

企业之Docker容器仓库简介及仓库的搭建及其使用_第16张图片

5.使用虚拟机server2作为客户端来进行验证,需要安装docker并且开启docker,并且添加私有仓库解析

[root@server2 docker]# ls
container-selinux-2.21-1.el7.noarch.rpm  pigz-2.3.4-1.el7.x86_64.rpm
docker-ce-18.06.1.ce-3.el7.x86_64.rpm    policycoreutils-2.5-17.1.el7.x86_64.rpm
libsemanage-2.5-8.el7.x86_64.rpm         policycoreutils-python-2.5-17.1.el7.x86_64.rpm
libsemanage-python-2.5-8.el7.x86_64.rpm
[root@server2 docker]# yum insta -y *
[root@server2 docker]# systemctl start docker

[root@server2 docker]# vim /etc/hosts
172.25.254.1   server1 westos.org

6.创建同样的证书目录并且将私有仓库的证书上传到该目录下面

[root@server2 docker]# cd /etc/docker/
[root@server2 docker]# ls
key.json
[root@server2 docker]# mkdir certs.d/westos.org -p
[root@server2 docker]# cd certs.d/westos.org/
[root@server2 westos.org]# scp server1:/etc/docker/certs.d/westos.org/westos.org.crt  .
[root@server2 westos.org]# ls
westos.org.crt

7.再客户端拉取私有仓库的镜像

[root@server2 westos.org]# docker pull wetos.org/game2048

企业之Docker容器仓库简介及仓库的搭建及其使用_第17张图片

六、创建用户名,密码方式登陆私有库

1.创建用户名和密码的认证目录,并且运行容器添加用户和密码

注意:在创建时需要使用追加的方式,否则新创建的用户名和密码会覆盖已经创建的

[root@server1 docker]# docker run --rm --entrypoint htpasswd registry:2 -Bbn zll westos > auth/htpasswd
[root@server1 docker]# docker run --rm --entrypoint htpasswd registry:2 -Bbn student student >> auth/htpasswd
[root@server1 docker]# cat auth/htpasswd 
zll:$2y$05$GpOObbcFjD3bg115clAoGulPoH8mlYyBw6CeEQkMtw67S..JwLydG

student:$2y$05$9oYnSJjn8nQXVIfI.MKYbeRPCtz1vwKv3RyFbz29CcR4FtznxZQDq

2.删除已有的私有仓库镜像正在运行的容器,并且运行新的容器添加用户名和密码的认证方式

[root@server1 docker]# docker run -d \
> --restart=always \
> --name registry \
> -v /tmp/docker/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 \
> -v /opt/registry/:/var/lib/registry \
> -v /tmp/docker/auth/:/auth \
> -e "REGISTRY_AUTH=htpasswd" \
> -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
> -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
> registry:2

在这里插入图片描述

3.使用用户名和密码登陆仓库并且查看登陆信息

企业之Docker容器仓库简介及仓库的搭建及其使用_第18张图片
4.上传镜像

企业之Docker容器仓库简介及仓库的搭建及其使用_第19张图片

你可能感兴趣的:(企业之Docker容器仓库简介及仓库的搭建及其使用)