如何在Docker Hub上找到包含`zip`和`git`的最受欢迎的镜像

84次阅读
没有评论

问题描述

想要加快构建速度,希望避免在每次提交时都需要安装gitzip工具,他想知道是否有已经包含这两个工具的最新镜像,并且想知道如何找到这些镜像。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

如果你想要查找一组镜像并进行调查,最好的方法是在一个新的容器中使用相关镜像,然后使用which命令来查看这些镜像中是否已经包含了你需要的二进制文件。这样你可以快速地查看特定镜像是否已经在PATH中包含了你需要的二进制文件。以下是一个示例:

docker run --rm ubuntu:latest which zip git

如果没有结果,则表示该镜像中不包含zipgit。但是,目前还没有一种方法可以发现一组镜像,因为没有一个镜像仓库提供文件清单。也就是说,一个镜像是一组tar文件,你可以提取一组文件/目录名称…但是,你仍然需要拉取整个镜像才能获取这些信息,所以运行上面的which命令会更容易一些。虽然有一些工具可以探索镜像仓库提供的信息(如skopeo、doocker-ls、reg、manifest-tool等),但它们都不能完全满足你的需求,即”查找一个包含特定二进制文件的镜像的镜像仓库”。

方案2

有几种方法可以解决这个问题:
1. 创建自己的镜像,将其推送到Docker Hub,并使用docker run命令运行该镜像,例如:

docker run yourimage git
  1. 使用已经发布的镜像,例如:
docker run dockerinpractice/docker-dev-tools-image git
  1. 使用Dockerfile将git添加到现有的镜像中,例如:
FROM alpine/git:1.0.7
RUN apk add --update zip

个人认为,在这种情况下,Docker是否是合适的工具还有待商榷。

方案3

如果你不想将镜像推送到Docker Hub,或者你在一个隔离的网络中,或者你经常这样做,你可以考虑设置自己的本地Docker仓库。以下是设置本地Docker仓库的简要步骤:
1. 获取/运行Docker仓库镜像(是的,仓库将在Docker内部运行):

docker run -d -p 5000:5000 --restart=always --name registry registry:2
  1. 构建你的镜像或使用现有的镜像:
docker tag ubuntu:16.04 localhost:5000/my-ubuntu
  1. 将该镜像推送到你的本地仓库:
docker push localhost:5000/my-ubuntu

完成后,你将能够像使用Docker Hub一样使用本地仓库;你可以删除你本地的”my-ubuntu”镜像副本,然后再次从本地仓库拉取它:

docker image remove ubuntu:16.04
docker image remove localhost:5000/my-ubuntu
docker pull localhost:5000/my-ubuntu

请注意,以上操作仅适用于本地仓库,如果你想要索引镜像中的文件,你可能需要使用一些第三方工具来提取镜像的文件列表。

正文完