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