目录:
1.什么是 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。
2.镜像仓库生活案例
大家可以类比超市,一个 Repository 就是一个货架,白象就是组织者,货架上放的产品打的不同标签就是对应的 tag
3.镜像仓库分类
- sponsor(赞助) registry:第三方的 registry,供客户和 docker 社区版使用
- mirror(镜像) registry:第三方的 registry,只让客户使用,例如阿里云必须注册才能使用
- vendor(供应商) registry:由发布 docker 镜像的供应商提供的 registry,例如像Google 和 Redhat 提供了镜像仓库服务
- private registry:通过没有防火墙和额外的安全层的私有实体提供的 registry,仅供内部使用
4.镜像仓库工作机制
1. 镜像仓库使用流程
名词解释
启动容器时, docker daemon 会试图从本地获取相关的镜像;本地镜像不存在时,其将从 Registry 中下载该镜像并保存到本地;
5.常用的镜像仓库
1. DockerHub
Docker Hub 是什么
Docker Hub 是 Docker 提供的托管存储库服务,用于查找容器映像并与您的团队共享。具有以下功能:
(1)个人可以注册私有仓库,能够发布自己的镜像
(2)提供镜像检索能力
(3)提供海量官方和认证组织的镜像
(4)从 GitHub 和 Bitbucket 自动构建容器镜像并将它们推送到 Docker Hub
(5)支持 webhook(webhook 是一种基于 HTTP 的回调函数,发生指定的事件时,服
务器会自动将相关的有效负载发送到客户端的 webhook URL)
Docker Hub 功能浏览
镜像搜索
2. 国内镜像源
国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。国内很多云服务商都提供了国内镜像加速器服务,例如:阿里云加速器(点击管理控制台 -> 登录账号(淘宝账号) -> 右侧镜像工具 -> 镜像加速器-> 复制加速器地址)
网易云加速器地址 https://hub–mirror.c.163.com
百度云加速器地址“https://mirror.baidubce.com“
可以在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)
3. 私有仓库
私有镜像仓库则是指部署在公司或组织内部,用于自身应用 Docker 镜像存储、分发的
镜像仓库。在构建公司内部使用的自动化发布系统的过程中,从安全的角度出发,应
用的打包镜像一般情况下只会被存储在私有镜像仓库中, CI/CD 流程的衔接点也是通
过向私有镜像仓库上传镜像和拉取镜像的操作来完成的。
Harbor:Harbor 是 VMware 公司最近开源的企业级 Docker Registry 项目, 其目标是帮助用户迅速搭建一个企业级的 Docker registry 服务。它以 Docker 公司开源的registry 为基础,提供了管理 UI, 基于角色的访问控制(Role Based Access Control),AD/LDAP 集成、以及审计日志(Audit logging) 等企业用户需求的功能,同时还原生支持中文。 Harbor 的每个组件都是以 Docker 容器的形式构建的,使用 DockerCompose 来对它进行部署。
Nexus:Nexus 是 Sonatype 公司发布的一款仓库(Repository)管理软件,目前常被用来作为 Maven 私服、 Docker 私服。
Docker registry:由 docker 官方提供的私服,类似于 docker hub。用于保存公司内
部上传的 Docker 镜像。
6.镜像仓库命令
命令清单
docker login
功能
登陆到一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
docker login [OPTIONS] [SERVER]
关键参数
docker login -u 用户名 -p 密码
docker pull
功能
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
docker image pull
关键参数
-a :拉取所有 tagged 镜像
—disable–content-trust :忽略镜像的校验,默认开启
样例
docker pull nginx:1.23.3
docker push
功能
docker push [OPTIONS] NAME[:TAG]
docker image push
关键参数
-a :推送所有 tagged 镜像
—disable–content-trust :忽略镜像的校验,默认开启
样例
docker push myapache:v1
docker search
功能
从 Docker Hub 查找镜像
docker search [OPTIONS] TERM
关键参数
样例
#从 Docker Hub 查找所有镜像名包含 nginx,并且 star 数大于 10 的镜像
docker search -f stars=10 nginx
docker logout
功能
登出一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
docker logout [SERVER]
样例
docker logout
7.镜像命令[部分]
docker images
功能
docker images [OPTIONS] [REPOSITORY[:TAG]]
docker image ls, docker image list
关键参数
- -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
- —digests :显示镜像的摘要信息;
- -f :显示满足条件的镜像;
- —format :指定返回值的模板文件;
- —no-trunc :显示完整的镜像信息;
- -q :只显示镜像 ID。
样例
#列出本地全部镜像
docker images
#列出本地镜像中 REPOSITORY 为 ubuntu 的镜像列表。
docker images ubuntu
docker image inspect
功能
查看镜像详细信息
docker image inspect [OPTIONS] IMAGE [IMAGE...]
样例
#查看镜像详细信息
docker images inspect nginx:1.23.3
docker tag
功能
标记本地镜像,将其归入某一仓库。
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
别名
docker image tag
样例
docker tag ubuntu:22.04 myregistry.com/myubuntu:22.04
8.容器命令[部分]
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:latest 以后台模式启动一个容器,并将容器命名为
mynginx。
docker run --name mynginx -d nginx:latest
#使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主
机的 80 端口,主机的目录 /data 映射到容器的 /data。
docker run -p 80:80 -v /data:/data -d nginx:latest
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
9.docker 镜像仓库实战
综合实战一:搭建一个 nginx 服务
Web 服务器
Web 服务器,一般是指“网站服务器”,是指驻留于互联网上某种类型计算机的程序。Web 服务器可以向 Web 浏览器等客户端提供文档,也可以放置网站文件,让全世界浏览,更可以放置数据文件,让全世界下载。Web 服务器,也称为“WWW 服务器”( 英文全写: World Wide Web,翻译成中文:万维网或环球信息网 ),主要功能是“提供网上信息浏览服务”。 WWW 是 Internet(互联网)的多媒体信息查询工具,是 Internet(互联网)上发展起来的服务,也是发展最快和目前使用最广泛的服务。正是因为有了 WWW 工具,才使得近十几年来互联网迅速繁荣发展,用户数量飞速飙升。据最新数据显示,目前全球人口数量达到 76.76 亿人,其中全球“网民”(互联网用户)达到惊人的 43.88 亿。例如百度就是一个 web 服务器,提供搜索服务
Nginx
Nginx 是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器;同时也是一个 IMAP、 POP3、 SMTP 代理服务器; Nginx 可以作为一个 HTTP 服务器进行网站的发布处理,另外 Nginx 可以作为反向代理进行负载均衡的实现。可以理解 Nginx 是 web 服务器的一种实现。
Web 服务器
Nginx 作为 Web 服务器可以向各种浏览器等客户端提供浏览服务,比如我们通过手机、电脑、平板可以访问百度来实现对 web 服务器的访问。
由于防火墙的原因,我们并不能直接访问谷歌,那么我们可以借助 VPN 来实现,这就是一个简单的正向代理的例子。这里你能够发现,正向代理“代理”的是客户端,而且客户端是知道目标的,而目标是不知道客户端是通过 VPN 访问的。
当我们在外网访问百度的时候,其实会进行一个转发,代理到内网去,这就是所谓的反向代理,即反向代理“代理”的是服务器端,而且这一个过程对于客户端而言是透明的。
# centos
# centos 配置 nginx 源
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginxrelease-centos-7-0.el7.ngx.noarch.rpm
yum install -y nginx
#查看版本
nginx -v
#手动启动
nginx
4. nginx 调整配置
6. 停止 nginx, kill master 进程来杀死进程
查找 nginx 镜像
Docker search 可以查找,但是 nginx 的详细的 tag 我们看不见
1. 拉取 nginx 镜像
我们到 https://hub.docker.com/ 上找到 nginx 镜像
2. 查看本地是否有该镜像
3. 运行镜像
4. 查看我们现在是在容器的 shell 里面,执行 cat /etc/*release*查看操作系统不是Ubuntu
5. 启动 nginx
6. shell 不退出打开另外一个 shell 窗口执行 curl 命令,可以看到 nginx 的欢迎信息返回
如果你的服务器的 80 端口外部能访问那么可以用浏览器看到 nginx 的欢迎页面,注意云厂商一般都屏蔽了 80 端口,需要联系客服开通。
7. shell 退出观察再 curl 发现我们已经 ping 不同了,说明 nginx 是容器里面的而不是服务器里面的
综合实战二: Docker hub 上创建自己私有仓库
Busybox
BusyBox 是一个集成了三百多个最常用 Linux 命令和工具的软件。 BusyBox 包含了一些简单的工具,例如 ls、 cat 和 echo 等等,还包含了一些更大、更复杂的工具,例grep、 find、 mount 以及 telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说 BusyBox 就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Linux 系统的自带的 shell。 busybox 是一个集成了一百多个最常用 linux 命令和工具的软件,他甚至还集成了一个 http 服务器和一个 telnet 服务器,而所有这一切功能却只有区区 1M 左右的大小.因海外带宽较小,我们拉取该镜像推送到自己的仓库。
#Ubuntu 安装
apt install -y busybox
#CentOS 安装
wget https://busybox.net/downloads/binaries/1.28.1-defconfigmultiarch/busybox-x86_64 --no-check-certificate
mv busybox-x86_64 busybox
chmod +x busybox
./busybox
busybox ls
busybox ifconfig
busybox ifconfig |busybox grep lo
如果不使用后面可以卸载
#ubuntu 卸载
apt --purge autoremove busybox
#centos 卸载
#清理对应目录就好
创建账号
进入 https://hub.docker.com/,点击注册按钮,输入注册信息
创建仓库
推送镜像到仓库
拉取 busybox 镜像
给镜像打标签
docker tag busybox:latest maxhou/mybusybox:v0.1
此时查看我们多了个镜像
登录 docker hub
推送镜像成功
在我们的 docker hub 仓库里面查看
退出
docker logout
综合实战三、腾讯云创建自己的私有仓库
创建账号
进入 https://cloud.tencent.com/,完成注册,可以使用微信快速注册
登录后进入容器镜像服务
点击立即选购
点击左侧的镜像仓库
创建仓库
可以看到我们的仓库已经创建成功了
推送镜像到仓库
打标签,推送
在腾讯云上查看我们的仓库
docker logout ccr.ccs.tencentyun.com
综合实战四、阿里云创建自己的私有仓库
创建账号
进入阿里云 https://www.aliyun.com/,点击右上角完成注册,可以使用支付宝快速注册
创建仓库
点击管理控制台
完成登录密码的设置,这个密码就是我们的 docker login 的密码
配置仓库参数
设置仓库为本地仓库,完成创建
推送镜像到仓库
登录
给镜像打标签,推送到仓库
查看服务器镜像
退出
实战经验
Q:我入职了一个公司,开发一个镜像,我怎么选择用哪个作为基础镜像啊?A:一般大型公司有自己专门的镜像制作组织,他们会选取对应的系统版本作为基础镜像,例如华为某部门选取欧拉来制作基础镜像,腾讯选择自己的 TLinux 制作基础镜像,不会因为出现 CentOS 不维护了无法使用的情况,而且这些镜像一般都会经过严格的安全扫描,然后作为基础组件提供给各个部门。一般的公司往往也会同意镜像的基础版本,所以这个选择个人一般不用太多纠结。
原文地址:https://blog.csdn.net/qq_56444564/article/details/134754879
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_36536.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!