背景:

公司最近做环境搬迁,把以前直接部署在服务器上的项目都与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.查看镜像、容器信息
镜像,容器信息

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐