"倒流的泪会变得坚固,去守护"
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 Registry 中的镜像通常由开发人员制作,而后推送至“公共”或“私有”Registry 上保存,供其他人员使用。
Docker hub
docker hub功能预览
Docker Hub 是 Docker 提供的托管存储库服务,用于查找容器映像并与您的团队共享。该存储库服务具有如下的功能:
🎨 个人可以注册私有仓库,能够发布自己的镜像
🎨 提供镜像检索能力支持 webhook
🎨 提供海量官方和认证组织的镜像
🎨 从 GitHub 和 Bitbucket 自动构建容器镜像并将它们推送到 Docker Hub
🎨 支持 webhook
我们可以直接访问docker hub网站,通过其检索功能,查找可以贯穿docker学习的仓库: 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# 重启 dockersudo 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 pull | docker image pull | 拉取镜像 |
docker push | docker 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 logout
语法:
shell
docker logout [SERVER]
🎠 样例: docker logout
dockers 镜像命令(部分)清单
命令 | 别名 | 功能 |
docker images | 列出本地镜像 | |
docker image inspect | docker image pull | 查看镜像信息 |
docker tag | docker 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
本篇到此结束,感谢你的阅读。
祝你好运,向阳而生~