Spring Boot Docker容器化部署脚本
#!/bin/bash
# 定义变量
IMAGE_NAME=ydsc:v1
CONTAINER_NAME=ydsc-container
# 判断容器是否存在,若存在则停止并移除
if [ $(docker ps -q -f name=$CONTAINER_NAME) ]; then
echo "Stopping and removing $CONTAINER_NAME container..."
docker stop $CONTAINER_NAME
docker rm $CONTAINER_NAME
fi
# 判断镜像是否存在,若存在则移除
if [ $(docker images -q $IMAGE_NAME) ]; then
echo "Removing old $IMAGE_NAME image..."
docker rmi $IMAGE_NAME
fi
# 构建镜像
echo "Building new $IMAGE_NAME image..."
docker build --no-cache -t $IMAGE_NAME .
# 启动容器
echo "Starting $CONTAINER_NAME container..."
docker run -d -v $(pwd)/log:/app/log --name $CONTAINER_NAME -p 8093:8093 $IMAGE_NAME
# 判断容器是否成功启动
if [ $(docker ps -q -f name=$CONTAINER_NAME) ]; then
echo $CONTAINER_NAME "myapp service is running"
docker logs -f $CONTAINER_NAME
else
echo $CONTAINER_NAME "myapp service failed to start"
fi
解析:
第一行指定脚本解释器为 bash。
定义变量 IMAGE_NAME 和 CONTAINER_NAME,用于指定镜像名和容器名。
判断容器是否存在,若存在则停止并移除。
(
d
o
c
k
e
r
p
s
−
q
−
f
n
a
m
e
=
(docker ps -q -f name=
(
d
oc
k
er
p
s
−
q
−
f
nam
e
=
CONTAINER_NAME) 是一个命令替换,用于获取容器 ID。[ ] 中间的部分是一个测试命令,用于检查条件是否成立。echo 用于输出日志。
判断镜像是否存在,若存在则移除。$(docker images -q $IMAGE_NAME) 同样是一个命令替换,用于获取镜像 ID。
构建镜像。docker build –no-cache -t $IMAGE_NAME . 用于构建镜像,–no-cache 参数表示不使用缓存,-t 参数用于指定镜像名,. 表示 Dockerfile 文件所在目录。
启动容器。docker run -d -v $(pwd)/log:/app/log –name $CONTAINER_NAME -p 8093:8093 $IMAGE_NAME 用于启动容器,-d 表示在后台运行,-v 表示挂载目录,–name 表示指定容器名,-p 表示映射端口。
判断容器是否成功启动,若成功则输出容器名和日志。docker logs -f $CONTAINER_NAME 用于查看容器日志。