docker仓库(未完)

docker仓库

  • 一、docker仓库
    • 1.docker仓库简介
    • 2.docker hub
    • 3.在官方注册账号并建立docker仓库
    • 4.docker hub帐号的注销
    • 5.docker hub镜像的删除
  • 二、Registry 工作原理
  • 三、镜像加速器
  • 四、搭建私有仓库
    • 1.初级搭建
    • 2.docker私有仓库的优化
  • 五、企业级私有仓库的搭建——harbor
    • 1.habor简介
    • 2.安装方式
    • 3.安装完成后测试及使用
      • 1.server1端(仓库端)的镜像上传
      • 2.server2端(客户端)的镜像拉取
      • 3.一些小改进
  • 六、docker-compose的使用
  • 七、镜像签名的设置——公开仓库
  • 八、harbor私有仓库的建立及操作

一、docker仓库

1.docker仓库简介

Docker 仓库是用来包含镜像的位置,Docker提供一个注册服务器(Register)来保存多个仓库,每个仓库又可以包含多个具备不同tag的镜像。
Docker运行中使用的默认仓库是 Docker Hub 公共仓库。

2.docker hub

docker仓库(未完)_第1张图片
docker search 应用,可以看到该应用的官方仓库在哪里:
比如:docker info
docker仓库(未完)_第2张图片

3.在官方注册账号并建立docker仓库

首先在https://hub.docker.com/网站注册一个账号
在docker hub上新建一个公共仓库

注意:此处由于我们是在官方新建了仓库,所以我们下面的docker login 也是直接登陆到官方,(可以使用docker info 查看仓库地址)
docker仓库(未完)_第3张图片
docker仓库(未完)_第4张图片
下图展示了 该用户的官方认证信息保存在.docker目录中,这样就保证了后续的操作就不需要频繁的login,只需要login一次就可以了。
docker仓库(未完)_第5张图片

在这里插入图片描述
做完上述操作,刷新一下该页面,就能得到如下界面。

docker仓库(未完)_第6张图片
并且在客户端也能搜得到:
docker仓库(未完)_第7张图片

4.docker hub帐号的注销

docker logout #注销帐号
在这里插入图片描述
注意:login一次就好,上传的时候也只需要在login时认证一次,注销后需要重新认证。

5.docker hub镜像的删除

docker仓库(未完)_第8张图片

二、Registry 工作原理

一次docker pull 或 push背后发生的事情:
docker仓库(未完)_第9张图片
Docker Registry有三个角色,分别是index、registry和registry client。
(1)index
负责并维护有关用户帐户、镜像的校验以及公共命名空间的信息。
Web UI
元数据存储
认证服务
符号化
(2)registry
是镜像和图表的仓库,它不具有本地数据库以及不提供用户认证,通过Index Auth service的Token的方式进行认证。
(3)Registry Client
Docker充当registry客户端来维护推送和拉取,以及客户端的授权。

以下 是几种访问情形。

docker用户端向index端提出访问申请,然后,index端将镜像地址以及token返回给客户端,客户端知道了镜像地址以后拿着token去取镜像,registry端此时会和index端做一次token校验,确认token的真实性,确认无误后,会允许客户端下载镜像。

docker仓库(未完)_第10张图片
docker仓库(未完)_第11张图片
docker仓库(未完)_第12张图片

三、镜像加速器

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

整体操作思路如下:
配置docker daemon文件:
vim /etc/docker/daemon.json
{
“registry-mirrors”: [“阿里云加速器地址”]
}
重载docker服务:
systemctl daemon-reload
systemctl restart docker

(1)获取阿里云加速器地址
docker仓库(未完)_第13张图片
docker仓库(未完)_第14张图片
docker仓库(未完)_第15张图片
这里获得了阿里云的镜像加速器地址。

(2)修改daemon配置文件来使用加速器

vim /etc/docker/daemon.json

{
  "registry-mirrors": ["https://t5ajcuue.mirror.aliyuncs.com"]
}

(3)导入配置并重启服务

systemctl daemon-reload                 #重新导入daemon配置
 
systemctl restart docker                #重启docker

docker info       #查看docker信息

在这里插入图片描述
测试:拉取zabbix镜像 明显感觉速度快很多。

四、搭建私有仓库

1.初级搭建

docker hub虽然方便,但是还是有限制
需要internet连接,速度慢
所有人都可以访问
由于安全原因企业不允许将镜像放到外网
好消息是docker公司已经将registry开源,我们可以快速构建企业私有仓库

具体搭建步骤如下:
(1)下载registry镜像
docker pull registry
docker仓库(未完)_第16张图片
(2)运行registry容器
docker仓库(未完)_第17张图片

docker run -d -p 5000:5000 --restart=always --name registry registry:latest 
# -d 后台运行; -p 宿主机端口:容器端口; --restart=always 容器随docker自启动; --name 容器名称

docker仓库(未完)_第18张图片
(3)上传镜像到本地仓库
本地镜像在命名时需要加上仓库的ip和端口

docker tag nginx:latest localhost:5000/nginx:latest
docker push localhost:5000/nginx:latest
docker tag : 标记本地镜像,将其归入某一仓库。
示例:将镜像ubuntu:15.10标记为 runoob/ubuntu:v3 镜像: docker tag ubuntu:15.10 runoob/ubuntu:v3

docker push : 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
示例:上传本地镜像myapache:v1到镜像仓库中:docker push myapache:v1

docker仓库(未完)_第19张图片
上传后再次检查,发现已经上传到私有仓库
docker仓库(未完)_第20张图片

2.docker私有仓库的优化

默认情况下私有仓库不需通过认证即可操作,因此很不安全,所以需要对私有仓库进行加密。
具体操作步骤如下:

(1)生成证书(域名westos.org要求在主机上有解析)

生成密钥时,对openssl的版本有要求,所以需要先升级openssl

yum install -y openssl11-1.1.1k-2.el7.x86_64.rpm  openssl11-libs-1.1.1k-2.el7.x86_64.rpm

docker仓库(未完)_第21张图片
docker仓库(未完)_第22张图片
应用证书功能到仓库:

先删除容器,并且删除容器创建的卷
docker仓库(未完)_第23张图片

(2)重新运行容器:

docker run -d   --restart=always   --name registry   -v /root/certs:/certs  -v /opt/registry:/var/lib/registry -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
 
#具体参数如下
docker run -d   \                                    #后台运行
--restart=always \                                  #跟随docker启动
--name registry   \                                    #容器名称
-v /root/certs:/certs  \                            #目录映射关系——宿主机目录:容器内目录
-v /opt/registry:/var/lib/registry \                #目录映射
-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                                            #镜像名称

docker仓库(未完)_第24张图片
docker仓库(未完)_第25张图片
但是上传镜像时并没有验证证书,这是因为docker检测证书时会从指定路径读取证书,因此需要将证书放在指定路径下,操作步骤如下:

#创建目录
[root@server1 ~]# mkdir -p /etc/docker/certs.d/reg.westos.org      
[root@server1 ~]# cd certs/
[root@server1 certs]# ls
westos.org.crt  westos.org.key
 
#复制证书
[root@server1 certs]# cp westos.org.crt /etc/docker/certs.d/reg.westos.org/ca.crt
        #目录的名字“reg.westos.org”一定要和域名保持一致,docker引擎会自动识别
 
 
[root@server1 certs]# 
[root@server1 certs]# ll /etc/docker/certs.d/reg.westos.org/ca.crt
-rw-r--r-- 1 root root 2159 Feb 18 13:14 /etc/docker/certs.d/reg.westos.org/ca.crt

证书复制完成后,重新上传镜像。在目录下可以看到刚才上传的镜像,目录已经不再是空的了。

docker仓库(未完)_第26张图片
应用认证功能到仓库:

[root@server1 ~]# docker rm -f registry                #删除registry容器
[root@server1 ~]# mkdir auth                        #创建目录,用于存储认证信息
[root@server1 ~]# yum install -y httpd-tools            #安装工具,用于生成密钥

docker仓库(未完)_第27张图片

创建用户并生成密钥/文件:

htpasswd -cB auth/htpasswd admin            #创建用户admin
htpasswd -B auth/htpasswd zlw                #创建用户zlw
          (再次创建用户时不要添加参数-c,否则会覆盖之前的文件,只有第一次创建用户时需要添加参数c)

docker仓库(未完)_第28张图片

docker run -d   --restart=always   --name registry   -v /root/certs:/certs  -v /opt/registry:/var/lib/registry -v /root/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -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
 
#具体参数如下
docker run -d   \                                    #后台运行
--restart=always \                                  #跟随docker启动
--name registry   \                                    #容器名称
-v /root/certs:/certs  \                            #目录映射关系——宿主机目录:容器内目录
-v /opt/registry:/var/lib/registry   \              #目录映射
-v /root/auth:/auth    \                             #用户认证功能的目录映射
-e "REGISTRY_AUTH=htpasswd"    \                    #指定用户密码
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" 
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd         #指定用户密钥路径
-v /opt/registry:/var/lib/registry \                #目录映射
-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                                            #镜像名称

在这里插入图片描述

curl -k https://reg.westos.org/v2/_catalog -u admin:westos    #查看私有仓库的镜像

docker仓库(未完)_第29张图片

docker tag yakexi007/game2048:latest reg.westos.org/game2048:latest    #修改镜像标签
docker push reg.westos.org/game2048:latest             #上传镜像
    88fca8ae768a: Preparing 
    6d7504772167: Preparing 
    192e9fad2abc: Preparing 
    36e9226e74f8: Preparing 
    011b303988d2: Preparing 
    no basic auth credentials

docker仓库(未完)_第30张图片
直接上传镜像会显示用户认证失败。因为本次启动容器时开启了用户认证功能,所以需要先登录后才能上传镜像。
docker仓库(未完)_第31张图片

五、企业级私有仓库的搭建——harbor

1.habor简介

Habor是由VMWare公司开源的容器镜像仓库。事实上,Habor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制 ,AD/LDAP集成以及审计日志等,足以满足基本企业需求。

官方地址:https://vmware.github.io/harbor/cn/

2.安装方式

1.在线安装:从Docker Hub下载Harbor相关镜像,因此安装软件包非常小
2.离线安装:安装包包含部署的相关镜像,因此安装包比较大
3.OVA安装程序:当用户具有vCenter环境时,使用此安装程序,在部署OVA后启动Harbor

首先清除上一实验中的容器(必须删除,否则会因为端口冲突导致安装失败)
(1)软件下载:https://github.com/goharbor/harbor/releases
(2)解压并配置

tar zxf harbor-offline-installer-v2.3.4.tgz         #解压
 
 
[root@server1 ~]# cd harbor/
[root@server1 harbor]# ls
common.sh  harbor.v2.3.4.tar.gz  harbor.yml.tmpl  install.sh  LICENSE  prepare
[root@server1 harbor]# cp harbor.yml.tmpl harbor.yml        #从模板生成配置文件
 
#编辑配置文件
[root@server1 harbor]# vim harbor.yml
  5 hostname: reg.westos.org                        #仓库的域名
 17   certificate: /data/certs/westos.org.crt        #仓库的证书
 18   private_key: /data/certs/westos.org.key
 34 harbor_admin_password: westos                    #登录web的密码

接下来创建data目录,并将cert目录移过去,保持与 habor配置文件中的一致性:
mkdir /data                           #创建目录,用来存放harbor数据(和配置文件中一致)
cp -r certs /data/                    #向目录中复制证书

docker仓库(未完)_第32张图片

上图中可以看出明显的错误,habor.yml文件中,写的很清楚 是要在根目录下(/)新建一个目录,然后在把certs目录移过去,但是我把目录建立在了家目录下(~),这就会导致后续执行habor安装脚本时出问题。

”/“是根目录,”~“是家目录。Linux存储是以挂载的方式,相当于是树状的,源头就是”/“,也就是根目录。而每个用户都有”家“目录,也就是用户的个人目录,比如root用户的”家“目录就是/root,普通用户a的家目录就是/home/a.可以看到

(3)配置docker-compose
注意:hatbor使用时需要安装依赖性,这是一个二进制文件,按以下步骤操作,令其具有可执行权限即可
docker仓库(未完)_第33张图片
(4)安装habor

[root@server1 ~]# cd  harbor/
[root@server1 harbor]# ls
common.sh  harbor.v2.3.4.tar.gz  harbor.yml  harbor.yml.tmpl  install.sh  LICENSE  prepare
[root@server1 harbor]# pwd
/root/harbor
 
[root@server1 harbor]# ./install.sh             #进入harbor目录执行安装脚本

docker仓库(未完)_第34张图片
docker仓库(未完)_第35张图片

3.安装完成后测试及使用

上面可以看出habor安装执行完毕,在浏览器中访问宿主机IP,可以看到harbor界面:
docker仓库(未完)_第36张图片
docker仓库(未完)_第37张图片
接下来我们进行实验搭建:

实验需求:server1是一个docker私有仓库,server2是一个客户端。server2要从私有仓库server1中下载镜像。

实验环境:新配置一台虚拟机server2,并配置好软件源。

在server2上配置好docker

1.server1端(仓库端)的镜像上传

#server1中
scp /etc/yum.repos.d/* [email protected]:/etc/yum.repos.d/    #复制软件源到server2中
 
server2中
yum repolist                                    #刷新软件源
yum install -y docker-ce                        #安装docker
 
systemctl enable --now docker                    #启动docker
 
vim /etc/hosts                                    #添加reg.westos.org解析
    172.25.254.1	server1 reg.westos.org

docker仓库(未完)_第38张图片
在server1上 做如下操作:
在这里插入图片描述
在这里插入图片描述
同理,可以将另一个镜像也如此上传到仓库中。
docker仓库(未完)_第39张图片
在界面可观察如下:
docker仓库(未完)_第40张图片

2.server2端(客户端)的镜像拉取

接下来,就是在server2端拉取镜像:
首先需要将证书 派发给server2,
在这里插入图片描述
docker仓库(未完)_第41张图片

3.一些小改进

docker仓库(未完)_第42张图片
docker仓库(未完)_第43张图片

刚刚为什么是在内网拉取的呢?因为我们使用docker pull reg.westos.org/library/nginx:1.18.0 这种格式,告诉他去哪儿拉取。
那么如何在内网也实现这种简单的操作呢?

一种可行的方法是将加速器地址设置为私人仓库的IP,就类似于server1中阿里云的加速器,在server2中变成了私人仓库server1。

可以按入下进行操作:
在这里插入图片描述

#在server2中    
vim /etc/docker/daemon.json                                 #编辑加速器地址
    {
      "registry-mirrors": ["https://reg.westos.org"]
    }
systemctl daemon-reload                                 #重新导入daemon配置
systemctl restart docker                                #重启docker

此时 默认的仓库已经变成了我们自己的私有仓库,而且 在真实的生产环境中,是不允许连接外网的,这样不安全 。
docker仓库(未完)_第44张图片
且在客户端日志中都有记录。
docker仓库(未完)_第45张图片

六、docker-compose的使用

注意:docker-compose工具只能在同一目录下使用!!!

docker-compose ps	查看正在运行的容器
docker-compose stop	停止所有容器(有些慢)
docker-compose down	停止并删除所有容器(很快)

docker仓库(未完)_第46张图片
docker仓库(未完)_第47张图片
重新安装harbor:

./install.sh --with-notary --with-trivy --with-chartmuseum
                #镜像签名;     镜像扫描;     harbor_chart功能

docker仓库(未完)_第48张图片

七、镜像签名的设置——公开仓库

docker仓库(未完)_第49张图片
在这里插入图片描述
这是因为这个镜像没有签名认证,所以不能使用。
docker仓库(未完)_第50张图片
镜像签名的部署(在私人仓库服务器server1中)

第一步:部署根证书

在以下两个位置都部署上证书,证书是一样的

#证书所在位置
位置一:
/etc/docker/certs.d/reg.westos.org/ca.crt
 
位置二:
~/.docker/tls/reg.westos.org:4443/ca.crt
 
mkdir -p ~/.docker/tls/reg.westos.org:4443/        #创建目录
 
cp /etc/docker/certs.d/reg.westos.org/ca.crt ~/.docker/tls/reg.westos.org\:4443/
                                                    #复制证书

位置一的证书已经有了,咱们直接部署位置二的证书:

第二步:启用docker内容信任

[root@server1 ~]# export DOCKER_CONTENT_TRUST=1
                                    #激活docker的内容信任
[root@server1 ~]# export DOCKER_CONTENT_TRUST_SERVER=https://reg.westos.org:4443
                                    #告诉docker的内容信任服务器位置及端口
 

docker仓库(未完)_第51张图片
docker仓库(未完)_第52张图片

此时,去界面查看已发现刚刚上传的镜像(game2048)已经签名。docker仓库(未完)_第53张图片
客户端拉取镜像也没有任何问题:
docker仓库(未完)_第54张图片

八、harbor私有仓库的建立及操作

新建私有仓库
docker仓库(未完)_第55张图片
删除签名认证这个选项:
docker仓库(未完)_第56张图片

[root@server1 ~]# docker tag yakexi007/game2048:latest reg.westos.org/westos/game2048:latest                    #更改镜像标签
[root@server1 ~]# docker push reg.westos.org/westos/game2048        #上传镜像到私有仓库

在这里插入图片描述
在server2上拉取时,会出现如下内容:
docker仓库(未完)_第57张图片
这是因为,匿名用户拉取私有仓库时会报错,因为没有权限。
因此需要在harbor中创建一个用户,可以使用该用户访问镜像。创建用户方法如下:
docker仓库(未完)_第58张图片
然后,在westos项目中添加成员:
docker仓库(未完)_第59张图片
docker仓库(未完)_第60张图片
使用zlw用户登录habor,进能看到如下内容。
docker仓库(未完)_第61张图片
docker仓库(未完)_第62张图片

你可能感兴趣的:(redis,架构,缓存)