Linux系统中部署java服务(docker)

1、不使用docker

1. 检查并安装 Java 环境

检查 Java 是否已安装:

java -version

 

2. 上传 Java 项目 JAR 文件

可以创建一个server文件夹,然后上传目录 

查看当前目录

 然后创建目录上传jar包

3. 启动 Java 服务 

java -jar hywl-server.jar

这个命令会 阻塞当前终端,关闭终端后服务会终止 

✅ 4. 后台启动 Java 服务  

nohup java -jar hywl-server.jar > app.log 2>&1 &
nohup java -jar -Dspring.profiles.active=dev hywl-server.jar > app.log 2>&1 &
tail -f app.log

停止服务:

通过 ps 命令查找并终止进程

ps -ef | grep hywl-server.jar

 PID 是 5007,然后执行:

kill -9 5007

补充:

信号数字信号名称作用
1SIGHUP挂起信号,重新加载配置
2SIGINT中断(Ctrl + C)
9SIGKILL强制终止进程
15SIGTERM终止进程(默认信号)
18SIGCONT继续运行停止的进程
19SIGSTOP暂停进程

 

✅ 5.脚本后台启动 Java 服务  

启动脚本:

vi start.sh
#!/bin/bash

# 项目名称(JAR文件名称)
APP_NAME="hywl-server.jar"

# JVM 参数(可根据需要调整)
JAVA_OPTS="-Xms512m -Xmx1024m -Dspring.profiles.active=dev"

# 日志文件路径
LOG_FILE="app.log"

# 检查进程是否已启动
PID=$(pgrep -f "$APP_NAME")

if [ -n "$PID" ]; then
    echo "服务已启动,PID: $PID"
    exit 0
fi

# 启动服务
echo "启动服务: $APP_NAME"
nohup java -jar $JAVA_OPTS $APP_NAME > $LOG_FILE 2>&1 &

# 获取新的PID
PID=$(pgrep -f "$APP_NAME")
echo "服务启动成功,PID: $PID"
echo "日志文件:$LOG_FILE"

然后设置脚本权限

chmod +x start.sh

最后启动服务

./start.sh

再编写一个停止脚本 stop.sh: 

vi stop.sh
#!/bin/bash

# 项目名称(JAR文件名称)
APP_NAME="hywl-server.jar"

# 获取PID
PID=$(pgrep -f "$APP_NAME")

if [ -z "$PID" ]; then
    echo "服务未运行"
    exit 0
fi

# 停止服务
echo "停止服务,PID: $PID"
kill -9 $PID

echo "服务已停止"
chmod +x stop.sh

再编写一个 restart.sh

vi restart.sh
#!/bin/bash

./stop.sh
sleep 2
./start.sh
chmod +x restart.sh

 ✅ 6.脚本后台启动 Java 服务 (plus)

#!/bin/bash
set -e

DATE=$(date +%Y%m%d%H%M)
# 基础路径(绝对路径)
BASE_PATH=/root/service
# 服务名称。同时约定部署服务的 jar 包名字也为它。
SERVER_NAME=hywl-server
# 环境
PROFILES_ACTIVE=dev

# heapError 存放路径
HEAP_ERROR_PATH=$BASE_PATH/heapError
# JVM 参数
JAVA_OPS="-Xms512m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$HEAP_ERROR_PATH"

# SkyWalking Agent 配置
#export SW_AGENT_NAME=$SERVER_NAME
#export SW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.0.84:11800
#export SW_GRPC_LOG_SERVER_HOST=192.168.0.84
#export SW_AGENT_TRACE_IGNORE_PATH="Redisson/PING,/actuator/**,/admin/**"
#export JAVA_AGENT=-javaagent:/work/skywalking/apache-skywalking-apm-bin/agent/skywalking-agent.jar

# 停止:优雅关闭之前已经启动的服务
function stop() {
    echo "[stop] 开始停止 $BASE_PATH/$SERVER_NAME"
    PID=$(ps -ef | grep $BASE_PATH/$SERVER_NAME | grep -v "grep" | awk '{print $2}')
    # 如果 Java 服务启动中,则进行关闭
    if [ -n "$PID" ]; then
        # 正常关闭
        echo "[stop] $BASE_PATH/$SERVER_NAME 运行中,开始 kill [$PID]"
        kill -15 $PID
        # 等待最大 120 秒,直到关闭完成。
        for ((i = 0; i < 120; i++))
            do
                sleep 1
                PID=$(ps -ef | grep $BASE_PATH/$SERVER_NAME | grep -v "grep" | awk '{print $2}')
                if [ -n "$PID" ]; then
                    echo -e ".\c"
                else
                    echo '[stop] 停止 $BASE_PATH/$SERVER_NAME 成功'
                    break
                fi
		    done

        # 如果正常关闭失败,那么进行强制 kill -9 进行关闭
        if [ -n "$PID" ]; then
            echo "[stop] $BASE_PATH/$SERVER_NAME 失败,强制 kill -9 $PID"
            kill -9 $PID
        fi
    # 如果 Java 服务未启动,则无需关闭
    else
        echo "[stop] $BASE_PATH/$SERVER_NAME 未启动,无需停止"
    fi
}

# 启动:启动后端项目
function start() {
    # 开启启动前,打印启动参数
    echo "[start] 开始启动 $BASE_PATH/$SERVER_NAME"
    echo "[start] JAVA_OPS: $JAVA_OPS"
    echo "[start] JAVA_AGENT: $JAVA_AGENT"
    echo "[start] PROFILES: $PROFILES_ACTIVE"

    # 开始启动
    nohup java -server $JAVA_OPS $JAVA_AGENT -jar $BASE_PATH/$SERVER_NAME.jar --spring.profiles.active=$PROFILES_ACTIVE > nohup.out 2>&1 &
    echo "[start] 启动 $BASE_PATH/$SERVER_NAME 完成"
}

# 部署
function deploy() {
    cd $BASE_PATH
    # 第一步:停止 Java 服务
    stop
    # 第二步:启动 Java 服务
    start
}

deploy

 一般修改

 

 

启动:

tail -f nohup.out

注意:这里是stop还是启动,所以

ps -ef | grep hywl-server.jar | grep -v grep
kill -15 12345


 

2、使用docker

02Docker(mysql、nginx)-CSDN博客

首写编写一个Dockerfile文件

## AdoptOpenJDK 停止发布 OpenJDK 二进制,而 Eclipse Temurin 是它的延伸,提供更好的稳定性

FROM m.daocloud.io/docker.io/eclipse-temurin:8-jre

## 创建目录,并使用它作为工作目录
RUN mkdir -p /hywl-server
WORKDIR /hywl-server
## 将后端项目的 Jar 文件,复制到镜像中
COPY hywl-server.jar app.jar

## 设置 TZ 时区
## 设置 JAVA_OPTS 环境变量,可通过 docker run -e "JAVA_OPTS=" 进行覆盖
ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms512m -Xmx512m" BASE_PATH="/hywl-server"

## 暴露后端项目的 48080 端口
EXPOSE 48080

## 启动后端项目
ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -Dapp.home=${BASE_PATH} -jar app.jar

然后如下:

执行

docker build -t hywl-server .

制作完镜像后需要启动容器:

新建 Shell 脚本 deploy.sh,使用 Docker 启动后端项目。编写内容如下:

#!/bin/bash
set -e

## 第一步:删除可能启动的老 hywl-server 容器
echo "开始删除 hywl-server 容器"
docker stop hywl-server || true
docker rm hywl-server || true
echo "完成删除 hywl-server 容器"

## 第二步:启动新的 hywl-server 容器 \
echo "开始启动 hywl-server 容器"
docker run -d \
--name hywl-server \
-p 48080:48080 \
-e "SPRING_PROFILES_ACTIVE=dev" \
-v /opt/service/mall-docker/logs:/hywl-server/logs/ \
hywl-server
echo "正在启动 hywl-server 容器中,需要等待 60 秒左右"

执行

sh deploy.sh

 docker logs -f hywl-server

-fdocker logs 命令中的一个选项,表示 --follow(跟随/实时输出日志)。 

日志也挂载了:

快速构建:

 第一次构建后

1、然后下次代码更新先打包上传

2、然后构建镜像

docker build -t hywl-server .

3、然后 

sh deploy.sh

4、实时查看日志

 docker logs -f hywl-server

5、我们也可以直接进入容器查看:

docker exec -it hywl-server /bin/sh
docker exec -it hywl-server ls /bin

 

 

exit

 

或者 

CTRL + P + Q

然后停止容器:

docker stop

然后重启:

 

sh deploy.sh

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值