docker仓库

本文详细介绍了Docker仓库的概念,包括Docker Hub、Registry工作原理以及如何配置镜像加速器。同时,文章还指导了如何搭建私有仓库,特别是使用Harbor的步骤,包括安装、配置和管理,确保安全访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是仓库?

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

2.docker hub

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

  • 首先在https://hub.docker.com/网站注册一个账号
  • 在docker hub上新建一个公共仓库
    在这里插入图片描述
  • 创建之后可以看到如下公共仓库
    在这里插入图片描述
  • 接下来要从docker主机上传镜像,首先需要登录:
  [root@server1 ~]# docker login
Username: yakexi007 
Password: <填写密码>
  • docker hub为了区分不同用户的同名镜像,要求镜像的格式是:
 [username]/xxx.tag 
   docker tag busybox:latest 
   yakexi007/busybox:latest 
  • 上传镜像到docker hub
 docker push yakexi007/busybox:latest

在这里插入图片描述

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

3.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客户端来维护推送和拉取,以及客户端的授权。

  • 情景A:用户要获取并下载镜像
    在这里插入图片描述
  • 情景B:用户要推送镜像到registry中。
    在这里插入图片描述
  • 情景C:用户要从index或registry中删除镜像。
    在这里插入图片描述

4.配置镜像加速器

  • 从docker hub上下载镜像的速度太慢,需要配置镜像加速器,这里以 阿里云为例:(需要提前注册阿里云帐号)
  • 配置docker daemon文件:
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://vo5twm71.mirror.aliyuncs.com"] 
}
  • 重载docker服务:
systemctl daemon-reload 
systemctl restart docker 

5.搭建私有仓库

docker hub虽然方便,但是还是有限制

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

好消息是docker公司已经将registry开源,我们可以快速构建企业私有仓库


具体步骤:

  • 下载registry镜像
docker pull registry
  • 运行registry容器
docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry
  • 本地镜像在命名时需要加上仓库的ip和端口

  • 上传镜像到本地仓库

docker tag nginx:latest localhost:5000/nginx:latest
  • 上传镜像到本地仓库
docker push localhost:5000/nginx:latest
  • 以上生成的仓库为本地仓库,远程主机不能访问,远程主机访问仓库需要通过加密认证

  • 强制使用非加密认证的方式让远程主机访问仓库:(不安全
    在远程主机上

vim /etc/docker/daemon.json
编辑:
{
  "insecure-registries" : ["192.168.0.80:5000"]
}
systemctl restart docker
  • 加密方式访问仓库需要做加密及认证
    具体步骤如下:
  • 安装openssl11版本
yum install -y openssl11-libs-1.1.1k-2.el7.x86_64.rpm openssl11-1.1.1k-2.el7.x86_64.rpm

在这里插入图片描述

  • 为docker仓库添加证书加密功能
  • 生成证书(域名reg.westos.org要求在主机上有解析)
[root@server4 ~]# mkdir certs
[root@server4 ~]# 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

在这里插入图片描述

  • 安装httpd-tools工具
yum install httpd-utils -y

在这里插入图片描述

  • 创建认证文件及用户

创建用户RINGringrui和admin "追加创建第二个用户不用加 -c "

[root@server4 ~]# mkdir auth
[root@server4 ~]# htpasswd -Bc auth/htpasswd RINGringnrui
New password:
Re-type new password:
Adding password for user RINGringnrui

[root@server4 ~]# htpasswd -B auth/htpasswd admin
New password:
Re-type new password:
Adding password for user admin
  • 创建加密文件
[root@server4 ~]# cd /etc/docker/
[root@server4 docker ]# mkdir certs.d
[root@server4 ~]# cd certs
[root@server4 certs]# mkdir reg.westos.org
[root@server4 certs]# cd reg.westos.org/
[root@server4 reg.westos.org]# cp /root/certs/westos.org.crt ca.crt
  • 重建registry容器 ,[做加密以及认证]
[root@server4 ~]# docker run -d --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/westos.org.crt/ 
-e REGISTRY_HTTP_TLS_KEY=/certs/westos.org.key/ 
-v /root/auth:/auth/
-e "REGISTRY_AUTH=htpasswd"/
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"/
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd/
registry

在这里插入图片描述

  • 在docker主机(server1)上:
vim /etc/docker/daemon.json
编辑:
{
 "registry-mirrors" : ["https://reg.westos.org"]
}
systemctl restart docker
  • 将证书拷贝到docker主机上:
[root@server4 ~]# scp -r /etc/docker/certs.d/ server1:/etc/docker/
root@server1's password:
ca.crt                                       100% 2163     2.3MB/s   00:00
  • docker 主机认证
docker login reg.westos.org

在这里插入图片描述


6.harbor仓库

  • 软件下载:https://githhub.com/goharbor/harbor/releases
  • 部署: (依赖性 17.06.0-ce+ and docker-compose 1.18.0+)
  • 下载并解压harbor软件包
 [root@server4 ~]# tar zxf harbor-offline-installer-v2.5.0.tgz
 [root@server4 ~]# cd harbor/
  • 修该harbor配置文件相关信息
[root@server4 harbor]# cp harbor.yml.tmpl harbor.yml
[root@server4 harbor]# vim harbor.yml

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

  • 下载docker-compose软件
[root@server4 ~]# mv docker-compose-linux-x86_64-v2.5.0 /usr/local/bin/docker-compose
[root@server4 ~]# chmod +x /usr/local/bin/docker-compose
  • 创建证书文件(复制之前创建的证书即可)
[root@server4 ~]# mv certs/ /data/
  • 执行harbor配置文件相关脚本
[root@server4 harbor]# ./install.sh --with-chartmuseum

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

  • 由于之前实验生成的registry容器与执行该脚本生成的registry容器名称冲突,因此需要删除之前建立的registry容器
[root@server4 harbor]# docker rm -f registry
registry

再次执行上面的脚本,执行成功!
在这里插入图片描述

  • 启动harbor仓库
[root@server4 harbor]# docker-compose up -d

在这里插入图片描述

  • 在浏览器登录harbor仓库
    在这里插入图片描述
  • harbor仓库创建成功!!!
    在这里插入图片描述

  • 从windows导入镜像
docker load -i 镜像名称

在这里插入图片描述

  • 标记镜像到harbor仓库指定位置
[root@server4 ~]# docker tag ikubernetes/myapp:v1 reg.westos.org/library/myapp:v1
  • 上传镜像
[root@server4 ~]# docker push reg.westos.org/library/myapp:v1

在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值