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上成功下载:

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