镜像仓库:用好Docker Hub
镜像仓库(Registry)
图里右边的区域就是镜像仓库,术语叫“Registry”。
镜像仓库提供镜像拉取、上传、查询、删除等功能,是一个全面的镜像管理服务站点。
我们可以把镜像仓库,看作是手机上的应用商店,里面分门别类存放了许多容器化的应用。
Docker Hub
Docker默认的镜像仓库,就是“Docker Hub”(hub.docker.com/)。
Docker Hub 是 Docker 公司搭建的官方 Registry 服务,创立于 2014 年 6 月,和 Docker 1.0 同时发布。它号称是世界上最大的镜像仓库,和 GitHub 一样,几乎成为了容器世界的基础设施。
如何在Docker Hub 上挑选镜像
在 Docker Hub 上有官方镜像、认证镜像和非官方镜像的区别
官方镜像
Docker 公司官方提供的高质量镜像(github.com/docker-libr…,都经过了严格的漏洞扫描和安全检测,支持 x86_64、arm64 等多种硬件架构,还具有清晰易读的文档,一般来说是我们构建镜像的首选,也是我们编写 Dockerfile 的最佳范例
官方镜像会有一个特殊的“Official image”的标记,这就表示这个镜像经过了 Docker 公司的认证,有专门的团队负责审核、发布和更新,质量上绝对可以放心。
认证镜像
标记是“Verified publisher”,也就是认证发行商,比如 Bitnami、Rancher、Ubuntu 等。它们都是颇具规模的大公司,具有不逊于 Docker 公司的实力,所以就在 Docker Hub 上开了个认证账号,发布自己打包的镜像,类似“大V”
非官方镜像
半官方镜像
成为“Verified publisher”是要给 Docker 公司交钱的,而很多公司不想花这笔“冤枉钱”,所以只在 Docker Hub 上开了公司账号,但并不加入认证。
图示的是 OpenResty 官方发布,但并没有经过 Docker 正式认证,所以难免就会存在一些风险。
民间镜像
通常是个人上传到 Docker Hub 的镜像。
如何判断镜像质量是否足够好
做法和 GitHub 差不多,就是看它的下载量、星数、还有更新历史
镜像的命名
“用户名 / 应用名”的形式,比如 bitnami/nginx、ubuntu/nginx、rancher/nginx 等等
使用非官方镜像时,必须把用户名带上。
docker pull bitnami/nginx
docker pull ubuntu/nginx
Docker Hub上镜像命名规则
通常来说,镜像标签的格式是应用的版本号加上操作系统
版本号
主版本号 + 次版本号 + 补丁号
有的正式版发版前会出rc版(候选版本,release candidate)。
另外,有的标签还会加上 slim、fat,来进一步表示这个镜像的内容是经过精简的,还是包含了较多的辅助工具
nginx:1.21.6-alpine,表示版本号是 1.21.6,基础镜像是最新的 Alpine。 redis:7.0-rc-bullseye,表示版本号是 7.0 候选版,基础镜像是 Debian 11。 node:17-buster-slim,表示版本号是 17,基础镜像是精简的 Debian 10
怎么上传自己的镜像
分成4步:
- 在 Docker Hub 上注册一个用户;
- 在本机上使用 docker login 命令,用刚才注册的用户名和密码认证身份登录
- 使用 docker tag 命令,给镜像改成带用户名的完整名字
docker tag 115d lcgrn/busybox-echo:1.0
- 用 docker push 把这个镜像推上去
docker push lcgrn/busybox-echo:1.0
离线环境怎么办
内网环境仿造Docker Hub
自建 Registry 已经有很多成熟的解决方案,比如 Docker Registry,还有 CNCF Harbor
使用docker save和docker load
docker save ngx-app:latest -o ngx.tar
docker load -i ngx.tar
docker save 把镜像存成压缩包,再用 docker load 从压缩包恢复成镜像
总结
- 镜像仓库(Registry)是一个提供综合镜像服务的网站,最基本的功能是上传和下载。
- Docker Hub 是目前最大的镜像仓库,拥有许多高质量的镜像。上面的镜像非常多,选择的标准有官方认证、下载量、星数等,需要综合评估。
- 镜像也有很多版本,应该根据版本号和操作系统仔细确认合适的标签。
- 在 Docker Hub 注册之后就可以上传自己的镜像,用 docker tag 打上标签再用 docker push 推送。
- 离线环境可以自己搭建私有镜像仓库,或者使用 docker save 把镜像存成压缩包,再用 docker load 从压缩包恢复成镜像。
《极客时间-Kubernetes入门实战课》学习笔记 Day6