当前位置: 首页 > 知识库问答 >
问题:

Jenkins /docker:从供应商存储库中提取图像并推送到本地存储库

洪越泽
2023-03-14

我试图找到一种方法来为我的供应商提供的< code>special-app容器执行以下操作:

  1. 从供应商拉取 docker 映像
  2. 将 docker 映像推送到内部存储库(对于本地副本)

目前,对于我从第三方存储库中获得的其他 docker 映像,我可以在 Github 中找到它们,它们包含 Dockerfile,然后我在管道中使用它来构建,然后推送到我的个人存储库,如下所示:

    stage('Clone from Git') {
        try {
            git branch: 'master',
                url: 'https://github.com/exampleapp.git'

        } catch (Exception ex) {
            println("Unable to git clone: ${ex}")
            error 'Git Clone failure'
        }
    }

    stage ('Build Docker Image') {
        try {
            dir('./') {
                def customImage = 
                 docker.build("myregistry.com/myimages/exampleapp:${env.BUILD_ID}")
            }
        } catch (Exception ex) {
            error 'Docker Build failure'
        }
    }

    stage ('Push Image to Registry') {
        try {
            docker.withRegistry('https://myregistry.com', 'mycreds') {
                def customImage = 
                docker.image("myregistry.com/myimages/exampleapp:${env.BUILD_ID}")
                customImage.push('latest')
            }
        } catch (Exception ex) {
            println("Unable push image to registry: ${ex}")
            error 'Registry Push failure'
        }
    }

但是对于特殊应用程序,供应商基本上只提供一个yaml文件,然后我用它来创建容器:

docker-compose -p special-app -f vendor-provided.yml up -d

虽然这可以让容器启动并运行,但此方法没有提供Dockerfile,因此我无法使用上面的方法论来处理我确实有Dockerfile的其他映像。在这种情况下,我应该怎么做?如果我没有Dockerfile,我如何从供应商那里获取docker映像并将其推送到我的本地存储库中进行保管?在我的管道中还有其他方法可以实现这一点吗?

(我们将这些图像的本地副本作为标准流程保留,即使我们不对其中一些进行调整/自定义 - 在这个特殊的应用程序中就是这种情况)。

谢谢J

共有1个答案

方波娃
2023-03-14

您可以尝试提取vendor-provided.yml从中提取的图像的url/name,并在一个简单的Dockerfile中使用它来提取图像并创建自己的:

使用这篇文章中的技术,您可以获得图像值。

为您的管道创建一个新阶段,您可以在其中创建单行Dockerfile:

stage('Make Dockerfile from vendor yaml') {
    steps {
        script{
            def valuesYaml = readYaml (file: './path-to/vendor-provided.yml')
            def line1 = "FROM ${valuesYaml.image}"
            writeFile file: "Dockerfile", text: line1
        }
    }
}

创建Dockerfile:

FROM vendor-image

从这里,您应该能够构建图像并将其推送到注册表。

 类似资料:
  • 问题内容: 我是AWS的新手。我想在AWS ECS容器实例上设置私有Docker存储库。我创建了一个名为的存储库。AWS显示的示例推入命令正在运行。 但是,通过此命令,我构建并推送了一个名为的映像,我想构建一个名为的映像。所以我将命令更改为: 这应该可以,但是不能。重试一段时间后,出现错误: AWS真的需要我要推送的每个映像专用的存储库吗? 问题答案: 在EC2容器注册需要一个像仓库要设置为你想要

  • 我已经成功地与另一位现场开发人员一起使用GitLab,开发了C和MATLAB中的小型项目。 在家使用VPN工作时,我将一个大型LabVIEW程序推到了一个新项目中,这样我就可以与另一个非现场开发人员一起工作。开发人员克隆了该项目,并开始开发一个分支。 问题是我无法提取/获取此分支。GitLab正在显示开发人员所做的分支和提交。 我使用git的时间不长,所以我可能只是太傻了。 Git推送:“致命的‘

  • 问题内容: 我正在使用docker-compose命令运行多个容器。问题是我的docker- compose必须从公共存储库中提取一些图像,并从私有存储库中提取一些图像。我打算做的是将所有必需的映像推送到私有存储库,但是如何使docker- compose从私有存储库中提取映像。 简而言之->当图像仅在那里可用时,如何指向私有存储库 问题答案: 使用命令。(官方文件) 输入您的凭据,然后,只有拥有

  • 问题内容: 我有一个标记为的docker 映像,并且在dockerhub上有一个名为的私有仓库。 当我推动我的工作时,我最终总是会碰到公共仓库。 具体将我的图片推送到我的私人仓库的确切语法是什么? 问题答案: 您需要先使用正确标记图像: 然后码头工人使用相同的标签推。 例:

  • 我有一个docker图像标记为,我在dockerhub上有一个名为的私人回购 当我推我的时,我最终总是点击公共回购。 将我的图像推送到私人回购协议的确切语法是什么?

  • 我是docker的新手,基本上我已经开始遵循以下官方指南:https://hub.docker.com/_/mongo 我已经执行了以下命令:步骤1-- 第二步-- 步骤3- 无法在本地找到映像“latest:tag”:docker:来自后台程序的错误响应:拒绝对latest的拉取访问,存储库不存在或可能需要“docker login”:拒绝:请求的资源访问被拒绝。 任何帮助都很好,提前谢谢,

  • 问题内容: 我正在运行kubeadm alpha版本来设置我的kubernates集群。从kubernates,我试图提取在nexus存储库中托管的docker镜像。每当我尝试创建Pod时,每次都会给出“ ImagePullBackOff”。有人可以帮我吗? 有关详细信息,请参见https://github.com/kubernetes/kubernetes/issues/41536 吊舱定义:

  • 我在kubernetes(minikube)上有问题,从Docker上的本地图像库中提取图像。创建了Docker存储库: