docker-官方hub仓库/私有仓库

文章目录

  • 1. 简介
    • 1.1 docker hub
    • 1.2 harbor
  • 2. 注册
    • 2.1 注册官方docker hub
    • 2.2 上传与下载
  • 3.register工作原理
    • 3.1 docker pull/push
    • 3.2 docker registry
    • 3.3镜像加速器
    • 3.4 配置
  • 4.搭建私有仓库
    • 4.1 配置server4
    • 4.1 运行一个外部访问的注册表
    • 4.2 限制访问

1. 简介

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

1.1 docker hub

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

1.2 harbor

  • harbor是为企业用户设计的容器镜像仓库开源项目,包括了权限管理(RBAC),LDAP,审计,安全漏洞扫描,镜像验真,自我注册等企业必须的功能,同时针对中国用户的特点,设计了镜像复制和中文支持等功能。是在官方仓库docker hub上的二次开发。
  • 开发语言:go
  • 开源协议:apache-2.0

2. 注册

2.1 注册官方docker hub

官方网址:hub.docker.com在这里插入图片描述
新建一个个人仓库:
在这里插入图片描述
补充:在server上,可以通过tab键查看相关命令,如
docker container/image/network/volume
在这里插入图片描述

2.2 上传与下载

自动连接官网地址,下载不需要登陆,上传需要登陆
docker login
在这里插入图片描述
上传前需要先按官方命名规则修改:docker tag busybox:latest leehoo0/busybox:latest
登陆后上传:docker push leehoo0/busybox:latest

在这里插入图片描述
从docker hub拉取镜像:docker pull leehoo0/busybox:latest
在这里插入图片描述
删除本地镜像:docker rmi leehoo0/busybox:latest
删除docker hub的镜像仓库:
在这里插入图片描述

3.register工作原理

3.1 docker pull/push

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

3.2 docker registry

包含三个角色:

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

  • web ui
  • 元数据储存
  • 认证服务
  • 符号化

registry

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

registry client

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

3.3镜像加速器

docker hub上下载镜像的速度太慢,需要配置镜像加速器。以阿里云为例:
需要注册阿里云账号
配置vim /etc/docker/daemon.json
在这里插入图片描述
重载服务:

systemctl daemon-reload
systemctl restart docker

3.4 配置

搜索
在这里插入图片描述
安装:
在这里插入图片描述
运行该镜像:打入后台,起名registry,指定端口映射,-v自定义挂载路径,冒号前为宿主机,后为虚拟机,自动创建路径
docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry
上传webserver(本人没来得及优化大小),查看结构分类:

yum install tree
docker images
docker tag webserver:v1 localhost:5000/webserver
docker images
docker push localhost:5000/webserver
tree /opt/registry/

在这里插入图片描述

在此也可以用curl解析:
在这里插入图片描述

4.搭建私有仓库

搭建私有仓库原因:

  • 需要网络连接
  • 所有人都可以访问
  • 由于安全原因企业不允许将镜像放到外网

4.1 配置server4

在server4上安装docker
编辑:

vim /etc/docker/daemon.ison{"insecure-registries" : ["172.25.119.4:5000"]			#此处为server3的地址
}

systemctl reload docker.service

安装webserver:docker pull 172.25.119.4:5000/webserver
在这里插入图片描述
改一个简短的名字:
docker tag 172.25.119.4:5000/webserver:latest webserver

4.1 运行一个外部访问的注册表

删除server5上的daemon文件
启用自签名仓库:
1.创建一个certs目录
mkdir -p certs
2停用registry
docker container stop registry

3.在server4中设置自签名证书:

mkdir -p certs
openssl req \
> -newkey rsa:4096 -nodes -sha256 -keyout certs/westos.org.key \
> -x509 -days 365 -out certs/westos.org.crt

在这里插入图片描述
注:此处的服务器名称写域名:reg.westos.org,并添加解析
在server4和server5上:
指明server4为仓库

172.25.119.4    server4 reg.westos.org

4.启动注册表,将其定向为使用TLS证书

  • 此命令将certs/目录绑定安装到容器中的/certs/,并设置环境变量,该变量告诉容器在何处找到domain.crt anddomain.key文件。注册表在端口443(默认的HTTPS端口)上运行。

docker run -d --name registry -p 443:443 -v /opt/registry:/var/lib/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 registry
在这里插入图片描述
5.将要上传的镜像规范命名
docker tag yakexi007/game2048 reg.westos.org/game2048:latest
6.使用自签名证书

server4:
在生成自己的证书和启用TLS注册表后(即上述步骤)
新建文件夹:mkdir /etc/docker/certs.d/reg.westos.org/ -p
将生成的证书文件拷贝:cp certs/westos.org.crt /etc/docker/certs.d/reg.westos.org/ca.crt
上述路径为docker专属识别路径
server5:
新建文件夹:mkdir /etc/docker/certs.d/reg.westos.org/ -p
在server4上拷贝文件:

cd /etc/docker/certs.d/reg.westos.org
scp ca.crt server5:/etc/docker/certs.d/reg.westos.org/

7.上传镜像至仓库
docker push reg.westos.org/game2048:latest
在这里插入图片描述
8.在server5(远程)上下载镜像

docker pull reg.westos.org/game2048

在这里插入图片描述
9.远程上传

  • 步骤和上述server4上一致
  • 需要由相关证书文化

此时,所有上传镜像,均在/opt/registry/

4.2 限制访问

除了运行在安全本地网络上的注册表外,注册表应始终实施访问限制。

本地基本身份验证
实现访问限制的最简单方法是通过基本身份验证(这与其他Web服务器的基本身份验证机制非常相似),本示例使用本机基本身份验证htpasswd来存储机密。

1.在指定目录下创建密码文件,安装工具
mkdir auth
yum install -y httpd-tools
新建两个用户admin,lee及配置密码
在这里插入图片描述
2.重置registry
删除:docker rm -f registry

使用基本身份验证启动注册表:
docker run -d --name registry -p 443:443 -v /opt/registry:/var/lib/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 -v "$(pwd)"/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry
3.此时直接上传或下载都会报错,需使用之前创建的账户
直接上传或下载被拒绝:
在这里插入图片描述
登陆后server4上成功上传:
在这里插入图片描述

登陆后server5上成功下载:
在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部