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


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 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 search -f stars=10 nginx

🎫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


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

祝你好运,向阳而生~

Logo

为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。

更多推荐