Docker镜像仓库

本文详细解释了Docker镜像仓库的概念,包括其分类(公有与私有、赞助、镜像和供应商),工作原理以及拉取和上传流程。特别提到国内镜像加速器的使用方法和私有仓库工具如Harbor和Nexus。

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

"倒流的泪会变得坚固,去守护" 


Docker的镜像仓库

(1) 什么是Docker Registry?

        镜像仓库(Docker Registry)是负责存储、管理和分发镜像,并提供登录认证能力,建立了索引能力的仓库。

        在整个镜像仓库内部,也会管理多个仓库(Repository)。每一个仓库(Repository)中,包含一组或多组镜像,这些镜像通过 镜像名称、tag或者DIGEST_ID区分。

        如下,模拟的是镜像仓库的视图:

✨ 镜像仓库(Registry): 表示的是,你要从哪一个镜像仓库拉去镜像。我们常通过DNS 或 IP定位访问到镜像仓库 诸如: docker hub 清华大学开源软件镜像站。一个Registry中存在多个仓库。

✨仓库(Repository): 由特定的docker镜像的所有迭代版本组合成的,镜像仓库。

✨镜像名称(name) + 标签 (tag): 如 nginx:latest

✨ 认证能力: 提供用户注册、登录、登出能力。用户需要登录认证通过后,才能向镜像仓库中提交镜像

✨ 索引: 提供镜像的索引信息,方便检索

✨ 元数据与blob: 一个容器镜像还包含两个部分,一个部分是用来描述这个容器镜像的层数,以及每层内容。另一个部分就是blob,容器的所有数据真实存储在blob中。      

(2) 镜像仓库如何分类?

        镜像仓库的分类,大致按照两类划分,一类是按照是否对外开发的标准,另一类按照供应商和面向群体划分。

是否对外开发:

🩸公有仓库: 像阿里云、dockerhub等,放到公共网络上,不需要登录就可以下载镜像

🩸私有仓库: 不对外开放,往往存放于私网,只为公司以及内部人员使用

供应商与面向群体:

🌍 sponsor(赞助) registry: 第三方的 registry,供客户和 docker 社区版使用

🌍 mirror(镜像) registry: 第三方的 registry,只让客户使用,例如阿里云必须注册才能使用

🌍 vendor(供应商) registry: 由发布 docker 镜像的供应商提供的 registry,例如像 Google 和

RedHat 提供了镜像仓库服务

🌍 private registry: 通过没有防火墙和额外的安全层的私有实体提供的 registry,仅内部使用

(3) 镜像仓库工作机制

        我们现在知道了什么叫镜像仓库,了解到了与镜像仓库有关的基本概念,那么我们该如何拉去镜像呢?在这个过程中,镜像仓库起着怎样的作用?

镜像仓库的拉取机制:
        启动容器时, docker daemon 会试图从本地获取相关的镜像,本地镜像不存在时,其将
Registry 中下载该镜像并保存到本地 ;
镜像仓库使用流程:
🎆 通过  docker login 登录仓库。如果你是直接访问诸如:docker hub等放在公共网络上的镜像仓库,则不需要这一步。
🎆 使用docker 命令: docker pull 拉取 需要的镜像。
🎆 如果你想要制作镜像后上传, 通过 dockerfile 或者 commit 等方式制作完镜像后,使用docker命令:docker push 可以将镜像上传到仓库(这个前提是你通过了docker登录认证)
        如下,则是 实际研发中镜像仓库的使用流程: 

        Docker Registry 中的镜像通常由开发人员制作,而后推送至“公共私有”Registry 上保存,供其他人员使用。

Docker hub

docker hub功能预览

        Docker Hub Docker 提供的托管存储库服务,用于查找容器映像并与您的团队共享。该存储库服务具有如下的功能:

🎨 个人可以注册私有仓库,能够发布自己的镜像

🎨 提供镜像检索能力支持 webhook

🎨 提供海量官方和认证组织的镜像

🎨 GitHub Bitbucket 自动构建容器镜像并将它们推送到 Docker Hub

🎨 支持 webhook

        我们可以直接访问docker hub网站,通过其检索功能,查找可以贯穿docker学习的仓库: nginx

镜像 tag 查找:
        当我们点击tag时,docker hub页面就会跳出nginx一系列的历史版本,供我们选择。

国内镜像源:

        从国内去拉取Docker hub中的镜像时会遇到困难,此时我们就可以配置 “国内的加速器”。国内有许多的云服务商都配置了国内镜像加速器服务: 

网易云加速器地址 https://hub-mirror.c.163.com
百度云加速器地址 "https://mirror.baidubce.com"

        我们可以在docker 中的配置文件 "etc/docker/daemon.json" 中写入如下内容:

    "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/",
                             "https://mirror.baidubce.com",
                             "https://hub-mirror.c.163.com"
                        ],

添加完成后需要重新加载配置,重启 Docker:

# 加载配置
sudo systemctl daemon-reload
# 重启 docker
sudo systemctl restart docker
# 查看docker信息
docker info

私有仓库

        私有镜像仓库则是指部署在公司或组织内部,用于自身应用 Docker 镜像存储、分发的镜像仓库。常见的私有仓库工具:

🎐 Harbor:Harbor 是 VMware 公司最近开源的企业级 Docker Registry 项目, 其目标是帮助用户迅速搭建一个企业级的 Docker registry 服务。

🎐 Nexus:Nexus Sonatype 公司发布的一款仓库(Repository)管理软件。目前常被用来作为 Maven 私服、Docker 私服。

🎐Docker registry:由 docker 官方提供的私服,类似于 docker hub。用于保存公司内部上传的 Docker 镜像。 当我们注册了docker 账号后,就可以在docker官网中,创建属于自己的私有仓库。

Docker 仓库命令

docker仓库 命令清单

命令别名功能
docker login登录仓库
docker pulldocker image pull拉取镜像
docker pushdocker image push推送镜像
docker search查找镜像
docker logout登出仓库

🎫 docker login

语法:

Shell
docker login [OPTIONS] [SERVER]

OPTIONS: -u 用户名 -p 密码

🎫 docker pull

语法:

Shell
docker pull [OPTIONS] NAME[:TAG|@DIGEST]

OPTIONS: 
-a :拉取所有tagged镜像 
--disable-content-trust :忽略镜像的校验,默认开启

🎠 样例: docker pull nginx:1.23.3

🎫 docker push

语法:

Shell
docker push [OPTIONS] NAME[:TAG]

OPTIONS:
-a :推送所有 tagged 镜像
--disable-content-trust :忽略镜像的校验,默认开启

🎠 样例: docker push myapache:v1

🎫 docker search

语法:

Shell
docker search [OPTIONS] TERM

OPTIONS:
--no-trunc :显示完整的镜像描述;
-f <过滤条件>:列出收藏数不小于指定值的镜像。

#Docker Hub 查找所有镜像名包含 nginx,并且 star 数大于 10 的镜像 

🎠 样例:  docker search -f stars=10 nginx

🎫docker logout

语法:

shell
docker logout [SERVER]

🎠 样例: docker logout

dockers 镜像命令(部分)清单

命令别名功能
docker images列出本地镜像
docker image inspectdocker image pull查看镜像信息
docker tagdocker image push标记本地镜像,并入某一仓库
docker run
创建一个新的容器并运行一个命令
docker ps
列出容器

🎪 docker images

语法:

Shell
docker images [OPTIONS] [REPOSITORY[:TAG]]

OPTIONS:
-a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
--digests :显示镜像的摘要信息;
-f :显示满足条件的镜像;
--format :指定返回值的模板文件;
--no-trunc :显示完整的镜像信息;
-q :只显示镜像 ID。

🎠 样例: docker images

🎪 docker image inspect

语法:

Shell
docker image inspect [OPTIONS] IMAGE [IMAGE...]

 🎠 样例: docker images inspect nginx:1.23.3

🎪 docker tag

语法:

Shell
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

 🎠 样例: docker tag ubuntu:22.04 myregistry.com/myubuntu:22.04

🎪 docker run

语法:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS:
-d: 后台运行容器,并返回容器 ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
-h "mars": 指定容器的 hostname;
-e username="ritchie": 设置环境变量;
--cpuset-cpus="0-2" or --cpuset-cpus="0,1,2": 绑定容器到指定 CPU 运行;
-m :设置容器使用内存最大值;
--network="bridge": 指定容器的网络连接类型;
--link=[]: 添加链接到另一个容器;
--volume , -v: 绑定一个卷
--rm :shell 退出的时候自动删除容器

🎠 样例: docker container run

🎪 docker ps

语法:

docker ps [OPTIONS]

OPTIONS:
-a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容。
--format :指定返回值的模板文件。如 json 或者 table
-l :显示 latest 的容器。
-n :列出最近创建的 n 个容器。
--no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。

🎠 样例: docker ps -a


本篇到此结束,感谢你的阅读。

祝你好运,向阳而生~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值