以下是一个用于启动 Docker 容器的脚本,适用于快速部署通过挂载方式运行的 JAR 应用,包含启动、停止、重启和查看状态等功能:
#!/bin/bash
# 完整重建Docker容器和镜像的脚本
# 流程:停止容器 → 删除镜像 → 删除容器 → 构建镜像 → 启动容器
# 配置参数
CONTAINER_NAME="back-service" # 容器名称
IMAGE_NAME="back-service" # 镜像名称
IMAGE_TAG="latest" # 镜像标签
DOCKERFILE_PATH="./" # Dockerfile所在目录(当前目录为.)
# 容器端口
HOST_PORT=8881 # 宿主机端口
CONTAINER_PORT=8881 # 容器端口
# 函数:停止容器
stop_container() {
if [ "$(docker ps -q -f name=$CONTAINER_NAME)" ]; then
echo "正在停止容器 $CONTAINER_NAME..."
docker stop $CONTAINER_NAME
if [ $? -eq 0 ]; then
echo "容器 $CONTAINER_NAME 已停止"
else
echo "停止容器 $CONTAINER_NAME 失败"
exit 1
fi
else
echo "容器 $CONTAINER_NAME 未在运行"
fi
}
# 函数:删除容器
remove_container() {
if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then
echo "正在删除容器 $CONTAINER_NAME..."
docker rm $CONTAINER_NAME
if [ $? -eq 0 ]; then
echo "容器 $CONTAINER_NAME 已删除"
else
echo "删除容器 $CONTAINER_NAME 失败"
exit 1
fi
else
echo "容器 $CONTAINER_NAME 不存在"
fi
}
# 函数:删除镜像
remove_image() {
if [ "$(docker images -q $IMAGE_NAME:$IMAGE_TAG)" ]; then
echo "正在删除镜像 $IMAGE_NAME:$IMAGE_TAG..."
docker rmi $IMAGE_NAME:$IMAGE_TAG
if [ $? -eq 0 ]; then
echo "镜像 $IMAGE_NAME:$IMAGE_TAG 已删除"
else
echo "删除镜像 $IMAGE_NAME:$IMAGE_TAG 失败(可能被其他容器引用)"
exit 1
fi
else
echo "镜像 $IMAGE_NAME:$IMAGE_TAG 不存在"
fi
}
# 函数:构建镜像
build_image() {
echo "正在构建镜像 $IMAGE_NAME:$IMAGE_TAG..."
docker build -t $IMAGE_NAME:$IMAGE_TAG $DOCKERFILE_PATH
if [ $? -eq 0 ]; then
echo "镜像 $IMAGE_NAME:$IMAGE_TAG 构建成功"
else
echo "镜像 $IMAGE_NAME:$IMAGE_TAG 构建失败"
exit 1
fi
}
# 函数:启动容器
start_container() {
echo "正在启动容器 $CONTAINER_NAME..."
docker run -d \
--name $CONTAINER_NAME \
-p $HOST_PORT:$CONTAINER_PORT \
$IMAGE_NAME:$IMAGE_TAG
if [ $? -eq 0 ] && [ "$(docker ps -q -f name=$CONTAINER_NAME)" ]; then
echo "容器 $CONTAINER_NAME 启动成功"
echo "访问地址: http://localhost:$HOST_PORT"
else
echo "容器 $CONTAINER_NAME 启动失败"
exit 1
fi
}
# 主流程执行
echo "===== 开始执行容器重建流程 ====="
stop_container
remove_container # 先删除容器再删除镜像,避免镜像被占用
remove_image
build_image
start_container
echo "===== 容器重建流程执行完毕 ====="