在docker映像内执行命令并将其保存在文件中

在docker映像内执行命令并将其保存在文件中,docker,jenkins,jenkins-pipeline,docker-registry,declarative,Docker,Jenkins,Jenkins Pipeline,Docker Registry,Declarative,我正在处理Jenkins文件,该文件正在提取docker图像,并在该docker图像中执行一些命令,然后我想保存该图像并将其推入AWS ECR。 在这里,在docker容器内执行命令,并将docker映像推送到ECR部件正在工作,并且不知道如何提交(保存)更新的docker映像 执行内部命令 stage('Run inside Docker container') { agent { docker { image 'test/testimage:619c95b' } } st

我正在处理Jenkins文件,该文件正在提取docker图像,并在该docker图像中执行一些命令,然后我想保存该图像并将其推入AWS ECR。 在这里,在docker容器内执行命令,并将docker映像推送到ECR部件正在工作,并且不知道如何提交(保存)更新的docker映像

执行内部命令

stage('Run inside Docker container') {
  agent {
    docker { image 'test/testimage:619c95b' }
  }
  steps {
    sh 'ls & pwd & ps'
  }
}
保存Docker映像

???
推送至AWS ECR

steps {
    script {
      docker.withRegistry('https://xxxxxxxxxxx.dkr.ecr.us-east-2.amazonaws.com/', 'ecr:us-east-2:aws-xx-automation') {
        image.push("${env.tag}")
      }
    }
  }

首先,我不太确定你的目标是不是最佳实践。除此之外,我将以你们的方式回答你们的问题

命令在docker映像的实例中执行,而不是在docker映像的实例中执行。 所以,stage应该命名为“从image foo在Docker容器中运行”

例如,从名为mycontainer的图像创建docker容器后,您可以使用

docker commit <mycontainer> <mynew docker image tag>

首先,我不太确定你的目标是不是最佳实践。除此之外,我将以你们的方式回答你们的问题

命令在docker映像的实例中执行,而不是在docker映像的实例中执行。 所以,stage应该命名为“从image foo在Docker容器中运行”

例如,从名为mycontainer的图像创建docker容器后,您可以使用

docker commit <mycontainer> <mynew docker image tag>

您可以将其构建到一个简单的Dockerfile中:

来自test/testimage:619c95b#docker{image…}
运行ls&&pwd&&ps#sh“…”
您可以在开发人员系统上测试并运行生成的映像。(我在本地测试复杂的Jenkins管道时运气不好。)

现在,您的Jenkins管道代码可以构建并推送该映像:

步骤{
剧本{
image=docker.build(“${env.tag}”)
docker.withRegistry('https://xxxxxxxxxxx.dkr.ecr.us-east-2.amazonaws.com/“,”ecr:us-east-2:aws xx自动化“){
image.push()
}
}
}

你所描述的方法(可能)在技术上是不可能的。如果您查看Jenkins日志,您将看到一个非常长的
docker run
命令,该命令(除其他外)有一个
-v
选项,用于将build workdir装载到同一路径上的映像中。这意味着您在构建workdir中所做的任何更改都无法提交到映像中,它们只存在于Jenkins托管目录中。

您可以将其构建到一个简单的Dockerfile中:

来自test/testimage:619c95b#docker{image…}
运行ls&&pwd&&ps#sh“…”
您可以在开发人员系统上测试并运行生成的映像。(我在本地测试复杂的Jenkins管道时运气不好。)

现在,您的Jenkins管道代码可以构建并推送该映像:

步骤{
剧本{
image=docker.build(“${env.tag}”)
docker.withRegistry('https://xxxxxxxxxxx.dkr.ecr.us-east-2.amazonaws.com/“,”ecr:us-east-2:aws xx自动化“){
image.push()
}
}
}

你所描述的方法(可能)在技术上是不可能的。如果您查看Jenkins日志,您将看到一个非常长的
docker run
命令,该命令(除其他外)有一个
-v
选项,用于将build workdir装载到同一路径上的映像中。这意味着您在构建workdir中所做的任何更改都无法提交到映像中,它们只存在于Jenkins托管目录中。

不使用docker文件不使用docker文件