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