|
```html 打开终端敲下 docker search nginx,何搜你会看到一屏结果。何搜但这只是何搜开始,真正要找的何搜镜像可能藏在细节里。 Docker Hub 的何搜搜索接口返回的数据结构很简单:镜像名、描述、何搜星标数、何搜是何搜否官方、是何搜否自动构建。默认按星标数排序,何搜但星标高不一定适合你。何搜比如 nginx 官方镜像星标过万,何搜而 bitnami/nginx 星标少得多,何搜可后者在 ARM 架构上表现更稳。何搜我上周在树莓派上跑 nginx 官方镜像,何搜启动就报 exec format error,换成 arm64v8/nginx 才正常。 命令行搜索有个坑:docker search 默认只返回 25 条结果,而且不支持分页。想翻更多?得加 --limit 参数,最大 100。但 100 条也未必够。更好的办法是直接上 Docker Hub 网页版,左侧筛选栏能按架构、类别、是否官方镜像过滤。我习惯先勾选 “Official Image”,再在结果里找 “nginx”。 官方镜像的命名有规律。nginx 就是官方主仓库,标签默认是 latest。但 latest 指向哪个版本?去 Docker Hub 的 tags 页面看,会发现 latest 通常对应最新的稳定版,比如现在的 1.27.x。生产环境别用 latest,用具体版本号,比如 nginx:1.26.2。更细的还有 nginx:1.26.2-alpine,体积小一半,但 Alpine 的 musl libc 可能让某些第三方模块编译失败。我吃过这个亏,后来在 x86 服务器上固定用 nginx:1.26.2,在边缘设备上用 nginx:1.26.2-alpine。 搜索时注意镜像的 “Last pushed” 时间。一个镜像如果两年没更新,即使星标高也慎用。安全漏洞不等人。比如 jwilder/nginx-proxy 曾经很火,但最近更新停在 2023 年,现在我用 nginxproxy/nginx-proxy 替代,后者维护更勤。 有人喜欢用 docker search 加 --filter=stars=100 过滤低星镜像。这招在找小众工具时有用,但对 nginx 这种基础镜像反而会漏掉 nginxinc/nginx-unprivileged——它星标不到 50,却是非 root 运行的最佳选择。这个镜像由 NGINX 官方团队维护,只是宣传少。我是在一个安全审计报告里发现的,现在所有容器都改用它,避免 80 端口需要 root 权限的问题。 如果你在 CI/CD 里搜索,别依赖 docker search 的文本输出。用 Docker Hub 的 API:https://hub.docker.com/v2/search/repositories/?query=nginx&page_size=100。返回 JSON,好解析。我写过一个脚本,抓取所有官方 nginx 镜像的标签,按日期排序,自动选最新的稳定版。脚本里加个判断:跳过带 beta、rc、mainline 的标签。 最后说个实际场景。你要在 Kubernetes 里用 nginx 做 ingress controller,搜 nginx 出来的 nginx/nginx-ingress 和 kubernetes/ingress-nginx 是两码事。前者是 NGINX 公司的商业版,后者是社区版。社区版更新快,但配置复杂;商业版有官方支持,但需要 license。我选社区版,因为文档全,出问题搜得到答案。 搜索不是终点。找到镜像后,用 docker inspect 看它的 Entrypoint 和 Cmd,用 docker history 看层结构。有时候一个镜像看起来小,但拉下来发现基础层是 1GB 的 Ubuntu,那就得不偿失。我现在的习惯:先 docker pull 再 docker images 看实际大小,最后才决定用不用。 ``` |