企业运维——Docker仓库

目录

一、什么是仓库

二、Docker Hub

三、Registry 工作原理

四、配置镜像加速器

五、搭建私有仓库

1.初级搭建 

2.docker私有仓库的优化

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

1.harbor简介

2.harbor安装部署

​​3、添加签名和扫描

 内容信任---镜像签名

 扫描

4、建立一个私有仓库 


一、什么是仓库

Docker 仓库是用来包含镜像的位置,Docker提供一个注册服务器(Register)来保存多个仓库,每个仓库又可以包含多个具备不同tag的镜像。实际上注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。

Docker运行中使用的默认仓库是 Docker Hub 公共仓库。仓库(Repository)是集中存放镜像的地方。

二、Docker Hub

Docker官方维护了一个公共仓库Docker Hub,其中已经包括了数量上百万的镜像,大部分需求都可以通过在Docker Hub 中直接下载镜像来实现。用户可以免费使用,也可以购买私有仓库。

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

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

docker info    #可以查看到默认的官方仓库
docker search    #搜索镜像
docker login     #来完成 Docker Hub 的登录
docker logout     #来完成 Docker Hub 的注销
docker tag busybox:latest yakexi007/busybox:latest  #更名,重新打标签
docker push yakexi007/busybox:latest     #上传到公共仓库
docker pull yakexi007/busybox:latest    #从docker hub拉取镜像
docker rmi yakexi007/busybox:latest3    #删除本地镜像

 也可以浏览器中搜素内容是一样的。官方网站:https://hub.docker.com

从docker主机上传镜像,首先需要登录。通过 docker login 命令在终端输入用户名及密码来完成 Docker Hub 的登录

认证信息保存在改文件中,登陆一次就可。

​​​​​​

上传镜像到公共仓库。

我们打算创建一下最下面这个镜像。

 首先新建一个。

 更改名字,然后上传。

 刷新一下,上传成功。

 重新搜索,便可以找到

 注销

 浏览器中删除docker hub中的镜像仓库

三、Registry 工作原理

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

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

情景A:用户要获取并下载镜像

 情景B:用户要推送镜像到registry中

 情景C:用户要从index或registry中删除镜像

四、配置镜像加速器

从docker hub上下载镜像的速度太慢,需要配置镜像加速器,推荐使用阿里云的镜像加速器。

注册阿里云帐号

vim /etc/docker/daemon.json
  {
  "registry-mirrors": ["https://vo5twm71.mirror.aliyuncs.com"]
  }
systemctl daemon-reload    #重载docker服务:
systemctl restart docker
docker info
docker images
docker pull zabbix/zabbix-agent  #测试可以看到拉取速度很快
docker images

五、搭建私有仓库

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

1.初级搭建 

docker pull registry #下载registry镜像
docker history registry:latest
docker run -d -p 5000:5000 --restart=always --name registry registry ##运行容器 -d 是打入后台 默认端口为5000 --restart=always表示随docker 自己启动
docker ps
netstat -antlp 

curl localhost:5000/v2/_catalog ##查看仓库
docker images
docker tag nginx:latest localhost:5000/nginx:latest
docker push localhost:5000/nginx:latest ##上传镜像到本地仓库
curl localhost:5000/v2/_catalog ##查看仓库

查看此时没有内容。

2.docker私有仓库的优化

 为Docker仓库添加证书

make certs

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

 生成秘钥,填写证书信息。域名一定要和DNS解析保持一致

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

清除原来的仓库和信息

docker rm -f registry ##删除原来的仓库
docker history registry:latest 里面默认卷
docker volume  ls
docker volume  prune ##清除卷内信息

 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    ## -v 选项表示把宿主机的目录挂接到容器内的路径 -e是修改内部选项 监听端口 端口映射443容器内的程序会在/var/lib/registry
docker ps
ll /opt/registry/ ##里面为空
docker images
vim /etc/hosts  #给docker1添加解析:reg.westos.org

docker tag nginx:latest reg.westos.org/nginx:latest ##贴标签
docker push reg.westos.org/nginx:latest 

上传时发现需要认证

mkdir -p /etc/docker/certs.d/reg.westos.org
cd certs/
ls
cp westos.org.crt /etc/docker/certs.d/reg.westos.org/ca.crt ##拷贝证书到指定目录中,docker引擎会识别到
ll /etc/docker/certs.d/reg.westos.org/ca.crt
docker push reg.westos.org/nginx:latest
cd   /opt/registry/docker/registry

 加入认证功能

mkdir auth
yum install -y httpd-tools
htpasswd --help
htpasswd -cB auth/htpasswd admin ##为admin用户和dmq用户添加认证信息和密码,并查看,第一次用-c
cat auth/htpasswd ##看到用户密码
htpasswd -B auth/htpasswd wxh
cat auth/htpasswd
docker rm -f registry
docker ps -a
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

再次上传测试

curl -k https://reg.westos.org/v2/_catalog -u admin:westos ##查看仓库镜像
 ll -d /opt/registry/
docker tag yakexi007/game2048:latest reg.westos.org/game2048:latest
docker push reg.westos.org/game2048:latest ##需要认证
docker login reg.westos.org ##登陆到域名reg.westos.org
cat .docker/config.json ##认证信息
docker push reg.westos.org/game2048:latest
curl -k https://reg.westos.org/v2/_catalog -u admin:westos ##可以看到上传的镜像

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

1.harbor简介

 Harbor是为企业用户设计的容器镜像仓库开源项目,包括了权限管理(RBAC)、LDAP、审计、安全漏洞扫描、镜像验真、管理界面、自我注册、HA等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能。还整合了K8s的插件(Add-ons)仓库,即Helm通过chart方式下载,管理,安装K8s插件,而chartmuseum可以提供存储chart数据的仓库。

作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全。提升用户使用 Registry 构建和运行环境传输镜像的效率。Harbor 支持安装在多个 Registry 节点的镜像资源复制,镜像全部保存在私有 Registry 中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor 也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。

官方网站:Redirecting to https://goharbor.io

2.harbor安装部署

删除之前的仓库,防止端口被占用。

docker rm -f registry
docker ps -a

软件下载

下载地址:https://github.com/goharbor/harbor/releases

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/                    #向目录中复制证书
cd
cd harbor/
./install.sh ##启动脚本(失败需要安装docker-compose)

 安装失败,需要安装docker-compose。

从github 上下载最新版本。是可执行的二进制文件,直接放到指定位置即可。

file docker-compose-linux-x86_64-v2.2.3 ##查看版本信息
 mv docker-compose-linux-x86_64-v2.2.3 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose ##给执行权限
which docker-compose
docker-compose ##运行
cd harbor/
ls
 ./install.sh ##启动脚本成功, ##会自动生成docker-compose文件【此命令必须和docker-compose.yml保持在同一目录】

ls
docker-compose ps ##执行的时候是从docker-compose.yml文件里加载信息的【有9个容器】

 测试:网页浏览172.25.0.1

 向仓库中上传镜像文件

再新建一台虚拟机,并安装docker

cd /etc/yum.repos.d/
ls
scp Centos-7.repo  docker-ce.repo server2:/etc/yum.repos.d/ ##软件仓库传过去为了安装docker
cd /etc/sysctl.d/
scp docker.conf server2:/etc/sysctl.d/ ##传输文件为了修改内核选项

yum install -y docker-ce
sysctl --system  #生效
systemctl enable --now docker   #设置开机自起
docker info
vim /etc/hosts    #给docker1添加解析:reg.westos.org

开始拉取。

此时需要添加主机名,只输入镜像名还会从外网拉取,不能从本地仓库拉取。

 

docker info        发现下载位置已经更改。

测试:

先将之前的删除。

再次拉取

3、添加签名和扫描

docker-compose ps	    #查看正在运行的容器
docker-compose stop	    #停止所有容器
docker-compose down	    #停止并删除所有容器

重新建立仓库,添加相应功能

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

发现之前的信息都还在,是因为删除了仓库,但是数据保存在本地。

 内容信任---镜像签名

打开项目内容信任功能即不允许没有签名的镜像上传下载

拉取失败

内容信任的服务端口是4443

cd .docker/
ls

部署根证书:
mkdir -p tls/reg.westos.org:4443 ##建立目录
cd tls/
ls
cd reg.westos.org:4443
cp /data/certs/westos.org.crt  ca.crt

启动docker内容信任
export DOCKER_CONTENT_TRUST=1
export DOCKER_CONTENT_TRUST_SERVER=https://reg.westos.org:4443  
docker push reg.westos.org/library/nginx:latest  #在上传的时候一定要加标签,因为内容信任是通过标签判断的

上传同一镜像的不同版本,只需要仓库的key,如果上传不同的镜像则需要根的key

此时是 上传同一镜像的不同版本,只需要仓库的key

docker images nginx
docker tag nginx:1.18.0 reg.westos.org/library/nginx:1.18.0
docker push reg.westos.org/library/nginx:1.18.0

拉取也成功了。

 扫描

以前上传的镜像都是没有经过扫描的,可以对已经上传的镜像进行扫描: 

点击扫描

 扫描出来很多漏洞

4、建立一个私有仓库 

取消镜像签名

unset DOCKER_CONTENT_TRUST     #取消这个选项,改成0也可以
export

 

 上传镜像到私有仓库

docker tag yakexi007/game2048:latest reg.westos.org/westos/game2048:latest
docker push reg.westos.org/westos/game2048:latest

拉取镜像失败

新建一个用户(密码大小写加数字最少8位)

 进入项目 --> westos--> 成员-->+ user为维护人员

 以新建用户登录后,大多功能消失。

登陆新用户拉取成功,私有的,专属的。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值