基于 Docker 的自动化部署脚本

基于 Docker 的自动化部署脚本

分享一个检测是否已存在容器和镜像的部署脚本

项目文件

包括: 源代码 + Dockerfile(用于构建镜像) + docker-compose.yml(用于启动一系列服务)

部署流程:

推送到 GitLab 触发 Jenkins 钩子, 自动拉取项目到指定服务器进行构建部署 (已指定部署文件),

一开始的部署脚本是这样的:

#!/bin/bash

docker-compose down
# 删除已有镜像,在 docker-compose up -d 的时候会重新构建镜像
# 考虑过使用 docker-compose up -d --build 进行重新构建镜像, 但这会导致产生很多僵尸镜像
docker rmi image
docker-compose up -d

存在问题

首次部署的时候, 因为没有镜像的存在, 所以 docker rmi image 命令失败导致整个构建退出

改进部署脚本

#!/bin/bash

tag=''
image=''

# 判断是否已有容器存在,有的话则停止并删除相应容器
existed_service=$(docker ps -a | awk '{print $2}' | grep '^'${image}':'${tag}'$')
if [ "${existed_service}" == "" ]; then
echo 'service not exist'
else
docker-compose down
fi

# 判断是否已有镜像存在,有的话则删除
existed_image=$(docker images | awk '{print $1}' | grep '^'${image}'$')
if [ "${existed_image}" == "" ]; then
echo 'image not exist'
else
docker rmi ${image}':'${tag}
fi

docker-compose up -d

image:tag

image

# deploy

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×