Amazon web services 使用Jenkins从EC2中删除现有docker映像
我必须从AWS ECR中显示的图像运行一些容器。因为我需要自动化,所以我使用Jenkins 我有4个ECR存储库,只要这个存储库中有一个新版本的映像,我的jenkins作业就会触发并创建一个新容器。因此,随着microservice代码的更改,我在ECR中获得新映像,我必须删除旧容器,并在同一端口上运行新容器 我正在使用Jenkins的“通过SSH发送文件或执行命令”来实现这一点。 然后我提供如下命令Amazon web services 使用Jenkins从EC2中删除现有docker映像,amazon-web-services,docker,jenkins,devops,aws-ecr,Amazon Web Services,Docker,Jenkins,Devops,Aws Ecr,我必须从AWS ECR中显示的图像运行一些容器。因为我需要自动化,所以我使用Jenkins 我有4个ECR存储库,只要这个存储库中有一个新版本的映像,我的jenkins作业就会触发并创建一个新容器。因此,随着microservice代码的更改,我在ECR中获得新映像,我必须删除旧容器,并在同一端口上运行新容器 我正在使用Jenkins的“通过SSH发送文件或执行命令”来实现这一点。 然后我提供如下命令 aws ecr get-login --no-include-email > lo
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
现在的问题是,每当我获得新图像时,我都必须停止先前的容器运行,为此我需要container-id。我不知道在这里获取容器id以停止容器。非常感谢您在这方面提供的任何帮助。要获取容器,您可以使用:
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
以删除未运行的容器
祖先筛选共享给定图像作为祖先的容器。
表示为图像名称[:标记]、图像id或image@digest
要获取容器,您可以使用:
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
以删除未运行的容器
祖先筛选共享给定图像作为祖先的容器。
表示为图像名称[:标记]、图像id或image@digest
答案已经给出了,但有一件很重要的事情我永远不会建议使用
docker rm -f
直接发送SIGKILL,无需宽限期
最好的处理方法是先移除容器,它先发送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
答案已经给出了,但有一件很重要的事情我永远不会建议使用
docker rm -f
直接发送SIGKILL,无需宽限期
最好的处理方法是先移除容器,它先发送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
您也可以为您的容器指定一个名称(),或者您可以使用docker
docker ps-q
获取容器id,您也可以为您的容器指定一个名称(),或者您可以使用dockerdocker ps-q
获取容器id,非常感谢。如果我想删除图像,有没有类似的命令?图像名称总是一样的?太好了,谢谢。如果我想删除图像,有类似的命令吗?图像名称总是一样的吗?