docker仓库介绍

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

docker公有仓库和私有仓库的区别

  • 公有仓库:Docker官方提供一个公共仓库,称为Docker Hub。任何人都可以在Docker Hub上创建帐户,并在其中存储和共享Docker镜像。
  • 私有仓库:私有仓库是指由用户自己搭建、管理和维护的Docker仓库,可以自己选择存储位置和数据安全性,也可以和其他项目无缝集成。

docker hub

docker hub介绍

docker hub是docker公司维护的公共仓库,用户可以免费使用,也可以购买私有仓库。
在这里插入图片描述

docker hub公共仓库使用

docker hub官网

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

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

3.登录docker hub
docker login

4.上传镜像
docker images
docker tag kaminskypavel/mario:latest lyueyue/mario:latest
docker push lyueyue/mario:latest

5.在浏览器上查看

docker仓库 首先注册一个账号
在这里插入图片描述
在这里插入图片描述
创建一个公共仓库
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

私有仓库搭建(registry)

为什么需要搭建私有仓库

registry部署官网

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

registry工作原理

  • 一次docker pull 或 push背后发生的事情
    index服务主要提供镜像索引以及用户认证的功能。当下载一个镜像的时候,首先会去index服务上做认证,然后查找镜像所在的registry的地址并放回给docker客户端,docker客户端再从registry下载镜像,在下载过程中 registry会去index校验客户端token的合法性,不同镜像可以保存在不同的registry服务上,其索引信息都放在index服务上。
    在这里插入图片描述
  • Docker Registry有三个角色,分别是index、registry和registry client。
  • index
    负责并维护有关用户帐户、镜像的校验以及公共命名空间的信息(Web UI、元数据存储、认证服务、符号化)
  • registry
    是镜像和图表的仓库,它不具有本地数据库以及不提供用户认证,通过Index Auth service的Token的方式进行认证。
  • Registry Client
    Docker充当registry客户端来维护推送和拉取,以及客户端的授权。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

私有仓库部署

1.下载registry镜像
docker pull registry

2.运行registry容器
docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry

3.给镜像打标签(本地镜像在命名时需要加上仓库的ip和端口)
docker tag nginx:latest localhost:5000/nginx:latest

4.上传镜像至私有仓库
docker push localhost:5000/nginx:latest

5.测试
cd /opt/registry
ls
curl localhost:5000/v2/_catalog

现在搭建私有仓库
在这里插入图片描述/opt/registry目录不存在也没有关系
在这里插入图片描述

私有仓库部署(添加证书加密功能)

准备工作
设置域名解析
1.生成证书(域名www.lyueyue.org要求在主机上有解析)
mkdir -p certs
openssl req -newkey rsa:4096 -nodes -sha256 -keyout /root/certs/www.lyueyue.org.key -x509 -days 365 \
-out /root/certs/www.lyueyue.org.crt

2.停止运行中的registry或者直接删除
docker container stop registry 或者 docker rm registry

3.重建registry
docker run -d --restart=always --name registry \
-p 443:443 \
-v /opt/registry:/var/lib/registry \
-v /root/certs:/certs \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/www.lyueyue.org.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/www.lyueyue.org.key registry

4.查看是否重建成功
docker port registry

5.拷贝证书到docker主机,不然无法上传下载。
mkdir -p /etc/docker/certs.d/www.lyueyue.org/ 
cp /root/certs/www.lyueyue.org.crt /etc/docker/certs.d/www.lyueyue.org/ca.crt
systemctl daemon-reload
systemctl restart docker

6.上传镜像
docker pull nginx:latest
docker tag nginx:latest www.lyueyue.org/nginx:latest
docker push www.lyueyue.org/nginx:latest

搭建私有仓库的步骤:
(1)在hosts文件里设置域名解析
在这里插入图片描述
(2)生成自签名证书以及密钥
在这里插入图片描述
在这里插入图片描述
(3)重建registry容器
如果原来有registry容器的话先停掉或删除原有的再进行重建
可以查看端口看是否重建成功

在这里插入图片描述
(4)拷贝证书到docker主机
在这里插入图片描述
(5)上传镜像
在这里插入图片描述

私有仓库部署(添加用户认证功能)

1.安装工具
yum install -y httpd-tools

2.建立目录
mkdir /root/auth
cd /root/auth

3.生成用户密码文件
htpasswd -B -c /root/auth/htpasswd yueyue
htpasswd -B -c /root/auth/htpasswd admin

4.重建registry
docker rm -f registry 
docker run -d --name registry \
-p 443:443 \
-v /opt/registry:/var/lib/registry \
-v "$(pwd)"/certs:/certs \
-v "$(pwd)"/auth:/auth \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/www.lyueyue.org.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/www.lyueyue.org.key \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry

5.测试(此时不能上传和下载镜像)
docker push www.lyueyue.org/nginx:latest

6.登录仓库(这次使用yueyue登录)
docker login www.lyueyue.org

7.再次测试
docker push www.lyueyue.org/nginx:latest

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

harbor仓库

harbor仓库介绍

  • Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。
  • harbor使用Docker-compose快速部署

补充:为什么有了registry还需要harbor?
1、提供分层传输机制,优化网络传输
Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。
2、提供WEB界面,优化用户体验
只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。
3、支持水平扩展集群
当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。

harbor仓库部署(基础)

habor下载地址

首先清理环境
docker rm -f registry 
cd .docker/
rm -fr config.json
1.解压harbor包
tar zxf harbor-offline-installer-v1.10.1.tgz 

2.修改habor配置文件
cd harbor
vim harbor.yml

3.安装docker-compose
curl -L "https://github.com/docker/compose/releases/download/1.27.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

4.安装habor
./install.sh  --help
./install.sh 
--with-notary                      #签名模块
--with-clair                       #扫描模块
--with-chartmuseum                 #K8S中用于软件包管理 
./install.sh --with-clair --with-notary --with-chartmuseum

4.查看安装情况
docker-compose ps

5.本地登录
docker login www.lyueyue.org

6.在本机测试
docker images
docker tag nginx:latest www.lyueyue.org/library/nginx:latest
docker push www.lyueyue.org/library/nginx:latest

7.配置别的虚拟机,并测试
scp /root/certs/www.lyueyue.org.crt server2:/etc/docker/certs.d/www.lyueyue.org/ca.crt
scp /root/certs/www.lyueyue.org.crt server3:/etc/docker/certs.d/www.lyueyue.org/ca.crt
ssh server2 systemctl restart docker
ssh server3 systemctl restart docker

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上传镜像测试,上传成功。
在这里插入图片描述
在这里插入图片描述
此时在server2上无法拉取镜像
在这里插入图片描述
给server2和server3配置证书之后
在这里插入图片描述
发现可以正常拉取
在这里插入图片描述

harbor仓库部署(添加用户及项目)

1.添加用户

2.添加项目

3.给新建项目添加用户

先来介绍一下怎么添加用户
在这里插入图片描述
在这里插入图片描述
添加私有项目
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

harbor仓库部署(添加功能)

官方参考文档

1.添加扫描功能(平时建议关闭,每扫描一次就会增加虚拟机大小)

2.测试(做完实验将其关闭)

3.添加签名功能
部署根证书
cp /root/certs/www.lyueyue.org.crt  /etc/docker/certs.d/www.lyueyue.org/ca.crt
mkdir /root/.docker/tls/www.lyueyue.org:4443/ -p
cd /etc/docker/certs.d/www.lyueyue.org/
cp ca.crt /root/.docker/tls/www.lyueyue.org\:4443/

启用docker内容信任
export DOCKER_CONTENT_TRUST=1 
export DOCKER_CONTENT_TRUST_SERVER=https://www.lyueyue.org:4443

4.测试:上传镜像
docker images
docker push www.lyueyue.org/library/busybox:latest 

5.设置内容信任

6.在server2上测试
docker pull www.lyueyue.org/library/nginx:latest 
docker pull www.lyueyue.org/library/busybox:latest 

7.取消签名机制,保留其不占用空间,为之后学习K8S作准备。
export DOCKER_CONTENT_TRUST=0
docker-compose down
./prepare
./install.sh --with-chartmuseum

开启上传时的自动扫描
在这里插入图片描述
在这里插入图片描述
上传镜像测试
在这里插入图片描述
发现镜像被自动扫描
在这里插入图片描述
添加签名功能
在这里插入图片描述
在这里插入图片描述
当项目更改时需要更改root密码,当项目没变动而项目中镜像版本发生变化时需要更改repository密码。
在这里插入图片描述
在这里插入图片描述
设置内容信任
在这里插入图片描述
在server2上只能拉取已签名的镜像
在这里插入图片描述
清理环境重新安装部署
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐