部署java项目到linux服务器

部署前需要做到:

1、适用windows的子系统linux系统“wsl2” ,使用wsl2就无需在虚拟机中进行linux系统的安装,具体参考:WSL操作指南_wsl使用_天使手儿的博客-CSDN博客

2、在linux中创建docker服务,具体参考:Ubuntu Docker 安装 | 菜鸟教程

做完以上准备工作后,开始部署java项目,笔者做的是前后端代码在一起的javaweb项目,所以只部署好jar包就能够正常运行项目,无需再部署前端,所以这部分只有部署后端的步骤。

部署java项目:

1、创建自己的目录,在目录里编写Dockerfile配置文件,如下:

FROM anapsix/alpine-java:8_server-jre_unlimited #基础镜像,一切根据基础镜像构建
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #镜像构建时被需要运行的命令
RUN mkdir -p /app
WORKDIR /app #镜像的挂载目录
EXPOSE 8080 #暴露的端口
ADD reggie_take_out-1.0-SNAPSHOT.jar ./ #会添加同目录下名叫reggie_take_out-1.0-SNAPSHOT.jar的文件 别忘了后头还有一个点,那个点就代表当前目录
CMD sleep 30;java -Xms1024m -Xmx2048m -Djava.security.egd=file:/dev/./urandom -jar reggie_take_out-1.0-SNAPSHOT.jar #指定这个容器启动的时候要运行的命令

dockerfile 常用指令如下:

FROM #基础镜像,一切从这里开始构建
MAINTAINER #镜像是谁写的,名字+邮箱
RUN #镜像构建的时候被需要运行的命令
ADD #步骤,tomcat镜像,这个tomcat压缩包,添加内容
WORKDIR #镜像的挂载目录
VOLUME #挂载的目录
EXPOST #保留端口配置
CMD #指定这个容器启动的时候要运行的命令,只有之后一个会生效,可被替代
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
COPY #类似ADD,将我们文件拷贝到镜像中
ENV #构建的时候设置环境变量

2、在 Dockerfile 文件的存放目录下,执行构建动作。

编写如下命令:

docker build -t regiee_take_out:v5.0-dev .(冒号后指定版本)

或者可以将命令写入一个.sh脚本文件,之后执行脚本文件即可。

3、添加jar包到Dockerfile同目录中

执行命令:cp ~/../mnt/f/jar/*.jar ./

这句命令的含义是将~/../mnt/f/jar/*.jar目录下的jar包复制到当前目录./中,而~/../mnt/f/jar/*.jar目录对应的是本地windows系统F:jar/目录下的jar包,即~/../mnt/是linux目录 对应windows中f/jar/*.jar目录,将jar包放入F:jar/目录下即可同步到服务器上

4、镜像构建之后,开始构建容器

编写docker-compose.yml文件,如下:

version: '3.0'
services: # 可以指定多个服务
    regiee: #这个名字随便起 只要有意义
      restart: always # 自动开机启动
      image: regiee_take_out:v5.0-dev # 基于哪个镜像
      container_name: my_regiee_5.0 #容器名称
      ports: # 指定端口 可以是多个
         - 8888:8082

然后执行docker-compose up -d来启动容器,-d为后台运行

docker-compose down为关闭容器

5、执行docker logs -f 容器id 来查看日志是否启动成功

问题记录

1、每次重启电脑或者 WSL2 后,WSL2 子系统的 IP 地址就会发生改变,解决办法:

https://blog.csdn.net/manbu_cy/article/details/108476859

附上bat脚本:

@echo off
setlocal enabledelayedexpansion

::先停掉可能在跑的wsl实例
wsl --shutdown ubuntu
::重新拉起来,并且用root的身份,启动docker服务
wsl -u root service docker start
if !errorlevel! equ 0 (
    echo docker start success
    :: 看看我要的IP在不在
    wsl -u root ip addr | findstr "192.168.107.65" > nul
    if !errorlevel! equ 0 (
        echo wsl ip has set
    ) else (
        ::不在的话给安排上
        wsl -u root ip addr add 192.168.107.65/24 broadcast 192.168.107.0 dev eth0 label eth0:1
        echo set wsl ip success: 192.168.107.65
    )


    ::windows作为wsl的宿主,在wsl的固定IP的同一网段也给安排另外一个IP
    ipconfig | findstr "192.168.107.100" > nul
    if !errorlevel! equ 0 (
        echo windows ip has set
    ) else (
        netsh interface ip add address "vEthernet (WSL)" 192.168.107.100 255.255.255.0
        echo set windows ip success: 192.168.107.100
    )
)
pause

脚本创建完成后,记得一定要管理员运行!一定要管理员运行!一定要管理员运行!

我就是吃了一个这个大亏,在这个小问题上停滞了一天才解决。

2、容器中的项目数据无法持久化

方法一:

通过volume挂载进行 持久化到服务器,具体参考:

Docker——docker-volume原理_庄小焱的博客-CSDN博客_docker --volume

方法二:通过部署minio服务器进行图片的存储

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值