Docker根据名称查询容器ID镜像ID并停止删除,并通过shell脚本部署项目

背景:

公司最近做环境搬迁,把以前直接部署在服务器上的项目都与docker进行整合部署,每次手动执行有些繁琐,于是写个脚本便于部署项目。


实现:

1.容器、镜像删除方法
参考链接:https://blog.csdn.net/zimou5581/article/details/94012682

1. 根据容器名称查询容器ID并删除
# 第一种写法
docker stop `docker ps -a| grep oes-live-manage | awk '{print $1}' `
docker rm   `docker ps -a| grep oes-live-manage | awk '{print $1}' `

# 第二种写法
docker stop  `docker ps -aq --filter name=oes-live-manage`
docker rm    `docker ps -aq --filter name=oes-live-manage`


2. 根据镜像名称查询容器ID并删除
# 第一种写法
docker stop `docker ps -a| grep ygsama/test-project:1.0.2 | awk '{print $1}' `
docker rm   `docker ps -a| grep ygsama/test-project:1.0.2 | awk '{print $1}' `

# 第二种写法--filter,reference 后跟镜像名称
docker stop  `docker ps -aq --filter oes-live-manage:1.0.2`
docker rm   `docker ps -aq --filter oes-live-manage:1.0.2`

3. 根据镜像名称查询镜像ID并删除
docker images -q --filter reference=oes-live-manage*:*
docker image rm `docker images -q --filter reference=oes-live-manage*:*`

2.具体实现脚本内容

#!/bin/bash

#查看镜像是否存在
appname=oes-live-manage
name=harborUrl/${appname}:1.0.0

#查询得到指定名称的容器ID
#容器ID
ARG1=$(docker ps -aqf "name=${appname}")

#查询得到指定名称的镜像ID
#镜像ID
ARG2=$(docker images -q --filter reference=${
     
     name})

#如果查询结果不为空,先停容器在删除
#容器
if [  -n "$ARG1" ]; then
 docker rm -f $(docker stop $ARG1)
 echo "$name容器停止删除成功.....!!!"
fi

#如果查询结果不为空,先删除镜像
#删除镜像
if [  -n "$ARG2" ]; then
 docker rmi -f $ARG2
 echo "$name镜像删除成功.....!!!"
fi

#启动项目,远程拉取镜像,并启动容器
docker run -d --name=${appname} --net=host -v /tools/logs/${appname}/:/tools/logs \
--env SPRING_PROFILE_ACTIVE=preview \
--restart=always -d ${name}

结果:

1.在服务器脚本目录执行脚本,比如:
如果脚本不能执行,先赋权

chmod 777 manage.sh

脚本执行
2.查看镜像、容器信息
镜像,容器信息

猜你喜欢

转载自blog.csdn.net/hurtseverywhere/article/details/119726650