Docker Registry(镜像仓库)

发布于:2025-04-21 ⋅ 阅读:(14) ⋅ 点赞:(0)

官方架构

Docker 使用客户端 - 服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器。Docker 容器通过 Docker 镜像来创建。
  • Docker 仓库(Registry):Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub 供了庞大的镜像集合供使用。
  • Docker daemon:Docker daemon 是服务器组件,是 Docker 最核心的后台进程,我们也把它称为守护进程。
  • Docker 客户端(Client):Docker 客户端通过命令行或者其他工具使用 Docker API Docker 的守护进程通信。
  • Docker 主机(Host):一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
  • Docker 镜像(Images):Docker 镜像是用于创建 Docker 容器的模板。
  • Docker 容器(Container):容器是独立运行的一个或一组应用。

Docker Registry(镜像仓库)概念

镜像仓库 (Docker Registry) 负责存储、管理和分发镜像,并且提供了登录认证能力,建立了仓库的索引。镜像仓库管理多个 Repository Repository 通过命名来区分。每个 Repository 包含一个或多个镜像,镜像通过镜像名称和标签 (Tag) 来区分。整体视图如下:
  • 镜像仓库(Registry):要从哪一个镜像仓库拉取镜像,通常通过 DNS IP 地址来确定一个镜像仓库如 hub.docker.com。一个 Registry 中可以存在多个 Repository,Repository 可分为顶层仓库用户仓库”,用户仓库名称格式为用户名/仓库名”·每个仓库可以包含多个tag(标签),每个标签对应一个镜像。
  • Repository:由某特定的 docker 镜像的所有迭代版本组成的镜像仓库,镜像名称(name)+标签(tag):nginx:latest
  • 认证能力:提供用户注册,登录、登出能力
  • 索引:提供镜像的索引信息,方便检索
一个容器镜像包含了两个部分,一个是元数据,其实就是由 dockerfile 构建出来的描述文件,这个描述文件会说这个容器镜像有多少层,每一层里面有什么内容,它的 checksum 这些信息都会记录下来,还有最终的可执行文件在哪就是在存储数据里面,就是在一个一个的 blob 里面,真正占有空间的就是这些 blob

镜像仓库分类

按是否对外开放划分
  • 公有仓库:像阿里云、dockerhub 等放到公有网络上,不用登录就可以下载镜像,供大家访问使用
  • 私有仓库:不对外开放,往往位于私有网络,只有公司内部人员可以使用。
按供应商和面向群体划分
  • sponsor(赞助)registry:第三方的 registry,供客户和 docker 社区版使用
  • mirror(镜像)registry:第三方的 registry,只让客户使用,例如阿里云必须注册才能使用
  • vendor(供应商) registry:由发布 docker 镜像的供应商提供的 registry,例如像 Google 和 Redhat 提供了镜像仓库服务
  • private registry:通过没有防火墙和额外的安全层的私有实体提供的 registry,仅供内部使用

镜像仓库工作机制

镜像仓库使用流程
  • 通过 docker login 登录仓库
  • docker pull 拉取需要的镜像
  • 通过 dockerfile 或者 commit 等方式制作完镜像通过 docker push 上传到仓库
实际研发中镜像仓库如何使用
Docker Registry 中的镜像通常由开发人员制作,而后推送至 公共 私有 ”Registry 上保存,供其他人员使用,例如“ 部署 到生产环境
  • 开发环境:开发人员使用的一套环境
  • 测试环境:需求开发完成后,发布到供测试人员进行测试的环境
  • 预发布环境:版本测试完成后,发布到和生产类似的环境,提前模拟生产发布
  • 生产环境:真正面向客户的环境
镜像仓库的拉取机制
启动容器时, docker daemon 会试图从本地获取相关的镜像, 本地镜像不存在时,其将从 Registry 中下载该镜像并保存到本地。

常用的镜像仓库

DockerHub

Docker Hub Docker 提供的托管存储库服务,用于查找容器映像并与团队共享。链接如下:

https://hub.docker.com/

具有以下功能:

  • 个人可以注册私有仓库,能够发布自己的镜像
  • 提供镜像检索能力
  • 提供海量官方和认证组织的镜像
  • GitHub Bitbucket 自动构建容器镜像并将它们推送到 Docker Hub
  • 支持 webhookwebhook 是一种基于 HTTP 的回调函数,发生指定的事件时,服务器会自动将相关的有效负载发送到客户端的 webhook URL

阿里云国内镜像加速站

由于国内并没有 Docker Hub 的服务器,所以我们可以使用国内的镜像源,不如阿里云的,在阿里云官网搜索并进入容器镜像服务页面,然后创建个人容器实例仓库即可。

镜像仓库命令

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

docker login

功能:登陆到一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
语法:
docker login [OPTIONS] [SERVER]
关键参数
  • -u :登陆的用户名
  • -p :登陆的密码
样例:我们以登录阿里云的镜像仓库为例。
docker login --username=用户名 crpi-u3d7h19iifo9g57h.cn-shenzhen.personal.cr.aliyuncs.com

docker pull

功能:从镜像仓库中拉取或者更新指定镜像
语法:
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
别名:
docker image pull
关键参数:
  • -a :拉取所有 tagged 镜像
  • --disable-content-trust :忽略镜像的校验,默认开启
样例:
docker pull nginx:1.27.0-perl

docker push

功能:将本地的镜像上传到镜像仓库, 要先登陆到镜像仓库
语法:
docker push [OPTIONS] NAME[:TAG]
别名:
docker image push
关键参数
  • -a :推送所有 tagged 镜像
  • --disable-content-trust :忽略镜像的校验,默认开启
样例
//给镜像文件加标签
docker tag nginx:1.27.0-perl crpi-u3d7h19iifo9g57h.cn-shenzhen.personal.cr.aliyuncs.com/lbk_repository/mytest:mynginx_1.27.0
//push到仓库中
docker push crpi-u3d7h19iifo9g57h.cn-shenzhen.personal.cr.aliyuncs.com/lbk_repository/mytest:mynginx_1.27.0

在远端的仓库也可以看到push上去的镜像文件。

docker search

功能:从 Docker Hub 查找镜像
语法
docker search [OPTIONS] TERM
关键参数:
  • --no-trunc :显示完整的镜像描述;
  • -f <过滤条件>:列出收藏数不小于指定值的镜像。
样例: 从 Docker Hub 查找所有镜像名包含 nginx ,并且 star 数大于 10 的镜像
docker search -f stars=10 nginx

不过一般我们很少使用该命令,如果我们要查找某个镜像文件一般都到 Docker Hub 网站上去直接搜索。

docker logout

功能:登出一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
语法
docker logout [SERVER]

镜像命令[部分]

学习仓库前我们需要提前了解一部分的镜像命令,为后续的实战做准备。

docker images

功能:列出本地镜像。
语法:
docker images [OPTIONS] [REPOSITORY[:TAG]]
别名:
docker image ls, docker image list
关键参数:
  • -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
  • --digests :显示镜像的摘要信息;
  • -f :显示满足条件的镜像;
  • --format :指定返回值的模板文件;
  • --no-trunc :显示完整的镜像信息;
  • -q :只显示镜像 ID
样例: 列出本地全部镜像
docker images

docker image inspect

功能:查看镜像详细信息
语法:
docker image inspect [OPTIONS] IMAGE [IMAGE...]
样例: 查看镜像详细信息
docker image inspect nginx:1.27.0-perl 

docker tag

功能:标记本地镜像,将其归入某一仓库。
语法:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
别名:
​​​​​​​docker image tag
样例:
docker tag nginx:1.27.0-perl crpi-u3d7h19iifo9g57h.cn-shenzhen.personal.cr.aliyuncs.com/lbk_repository/mytest:mynginx_1.27.0

容器命令[部分]

学习仓库前我们需要提前了解一部分的容器命令,为后续的实战做准备。

docker run

功能:创建一个新的容器并运行一个命令
语法​​​​​​​
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
别名:
docker container run
关键参数:
  • -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 镜像拉取  nginx  以后台模式启动一个容器, 并将容器命名为 mynginx。
docker run -d --name mynginx --rm nginx:1.27.5

docker ps

功能:列出容器
语法:​​​​​​​
docker ps [OPTIONS]
别名:​​​​​​​
docker container ls, docker container list, docker container ps
关键参数:
  • -a :显示所有的容器,包括未运行的。
  • -f :根据条件过滤显示的内容。
  • --format :指定返回值的模板文件。如 json 或者 table
  • -l :显示 latest 的容器。
  • -n :列出最近创建的 n 个容器。
  • --no-trunc :不截断输出。
  • -q :静默模式,只显示容器编号。
  • -s :显示总的文件大小。
docker ps -a

实战:搭建 nginx 服务

nginx 介绍

Web 服务器,一般是指 网站服务器 ,是指驻留于互联网上某种类型计算机的程序。Web 服务器可以向 Web 浏览器等客户端提供文档,也可以放置网站文件,让全世界浏览,更可以放置数据文件,让全世界下载。 例如百度就是一个 web 服务器,提供搜索服务。
Nginx 是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器;同时也是一个 IMAP POP3 SMTP 代理服务器; Nginx 可以作为一个 HTTP 服务器进行网站的发布处理,另外 Nginx 可以作为反向代理进行负载均衡的实现。可以理解 Nginx 是 web 服务器的一种实现,Nginx 作为 Web 服务器可以向各种浏览器等客户端提供浏览服务,比如我们通过手机、电脑、平板可以访问百度来实现对 web 服务器的访问。
正向代理
由于防火墙的原因,我们并不能直接访问谷歌,那么我们可以借助 VPN 来实现,这就是一个简单的正向代理的例子。这里你能够发现,正向代理“ 代理 的是客户端,而且客户端是知道目标的,而目标是不知道客户端是通过 VPN 访问的。
由于防火墙的原因,我们并不能直接访问谷歌,那么我们可以借助 VPN 来实现,这就是一个简单的正向代理的例子。这里你能够发现,正向代理“ 代理 的是客户端,而且客户端是知道目标的,而目标是不知道客户端是通过 VPN 访问的。

反向代理​​​​​​​

当我们在外网访问百度的时候,其实会进行一个转发,代理到内网去,这就是所谓的反向代理,即反向代理“ 代理 的是服务器端,而且这一个过程对于客户端而言是透明的。
接下来我们来尝试搭建 nginx 服务器,先拉取镜像然后在后台启动该镜像。
//拉取镜像
docker pull nginx:1.27.5
//启动容器
docker run -d --name mynginx --rm -p 8000:80 nginx:1.27.5

如果我们的云服务器安全组配好了能访问设置的端口,那么就可以通过浏览器查看 nginx 页面。


网站公告

今日签到

点亮在社区的每一天
去签到