使用 Jenkins 从 EC2 删除现有 docker 个图像
deleting existing docker images from EC2 using Jenkins
我必须 运行 AWS 中存在的图像中的一些容器 ECR.As 我需要自动化这个我正在使用 Jenkins。
我有 4 个 ECR 存储库,一旦新版本的图像出现在这个存储库中,我的 jenkins 作业将触发并创建一个新的 container.So,因为微服务代码正在改变,我正在获取新图像ECR 我必须删除旧容器和 运行 同一端口上的新容器。
我正在使用 Jenkins 的 "Send file or execute commands over SSH" 来执行此操作。
然后我提供如下命令
aws ecr get-login --no-include-email > login.sh
bash login.sh
docker pull 944198216610.dkr.ecr.us-east-1.amazonaws.com/demo-
docker:latest
docker run -d -p 8081:80 944198216610.dkr.ecr.us-east-
1.amazonaws.com/demo-docker:latest
现在的问题是,每当我获得新图像时,我都必须停止较早的容器 运行ning,为此我需要容器 ID。我不知道要在此处获取容器 ID 以停止 container.Any 在此方面的帮助非常感谢。
获取您可能使用的容器:
docker ps -q --filter "ancestor=944198216610.dkr.ecr.us-east-
1.amazonaws.com/demo-docker:latest"
所以删除它们:
docker rm -f $(docker ps -q --filter "ancestor=944198216610.dkr.ecr.us-east-
1.amazonaws.com/demo-docker:latest")
您可以将 -a
添加到 docker ps
以同时删除 运行 个容器
ancestor Filters containers which share a given image as an ancestor.
Expressed as image-name[:tag], image id, or image@digest
答案已经给出,但我永远不会建议使用
删除容器的重要一件事
docker rm -f
直接发送SIGKILL,没有宽限期。
最好的处理方式是先stop the container然后删除容器,它先发送SIGTERM,然后,在一个宽限期之后, SIGKILL.
此外,如果您不是 运行 ECS,那么硬编码名称就足够了,因为您不是同时 运行 两个容器,所以
docker run --rm --name my_container -d -p 8081:80 944198216610.dkr.ecr.us-east-1.amazonaws.com/demo-docker:latest
所以在部署过程中你需要的一切docker stop my_container
它会停止并且容器也会释放名称,所以你可以用相同的名称再次部署。
docker run --rm --name my_container -d -p 8081:80 944198216610.dkr.ecr.us-east-1.amazonaws.com/demo-docker:latest
以下是从 EC2 服务器删除下载图像的命令:
docker image prune
如果您遇到任何问题,请告诉我运行。
我必须 运行 AWS 中存在的图像中的一些容器 ECR.As 我需要自动化这个我正在使用 Jenkins。
我有 4 个 ECR 存储库,一旦新版本的图像出现在这个存储库中,我的 jenkins 作业将触发并创建一个新的 container.So,因为微服务代码正在改变,我正在获取新图像ECR 我必须删除旧容器和 运行 同一端口上的新容器。
我正在使用 Jenkins 的 "Send file or execute commands over SSH" 来执行此操作。 然后我提供如下命令
aws ecr get-login --no-include-email > login.sh
bash login.sh
docker pull 944198216610.dkr.ecr.us-east-1.amazonaws.com/demo-
docker:latest
docker run -d -p 8081:80 944198216610.dkr.ecr.us-east-
1.amazonaws.com/demo-docker:latest
现在的问题是,每当我获得新图像时,我都必须停止较早的容器 运行ning,为此我需要容器 ID。我不知道要在此处获取容器 ID 以停止 container.Any 在此方面的帮助非常感谢。
获取您可能使用的容器:
docker ps -q --filter "ancestor=944198216610.dkr.ecr.us-east-
1.amazonaws.com/demo-docker:latest"
所以删除它们:
docker rm -f $(docker ps -q --filter "ancestor=944198216610.dkr.ecr.us-east-
1.amazonaws.com/demo-docker:latest")
您可以将 -a
添加到 docker ps
以同时删除 运行 个容器
ancestor Filters containers which share a given image as an ancestor. Expressed as image-name[:tag], image id, or image@digest
答案已经给出,但我永远不会建议使用
删除容器的重要一件事docker rm -f
直接发送SIGKILL,没有宽限期。
最好的处理方式是先stop the container然后删除容器,它先发送SIGTERM,然后,在一个宽限期之后, SIGKILL.
此外,如果您不是 运行 ECS,那么硬编码名称就足够了,因为您不是同时 运行 两个容器,所以
docker run --rm --name my_container -d -p 8081:80 944198216610.dkr.ecr.us-east-1.amazonaws.com/demo-docker:latest
所以在部署过程中你需要的一切docker stop my_container
它会停止并且容器也会释放名称,所以你可以用相同的名称再次部署。
docker run --rm --name my_container -d -p 8081:80 944198216610.dkr.ecr.us-east-1.amazonaws.com/demo-docker:latest
以下是从 EC2 服务器删除下载图像的命令:
docker image prune
如果您遇到任何问题,请告诉我运行。