将Java Maven项目在Docker中运行

        想把一个Spring boot 项目部署到云上 K8S 运行,发现对 K8S 一点都不懂,还是一步一步来,先做到能将这个项目在本机 docker 中运行吧。环境为windows系统,装好了Docker desktop , 下面是操作步骤:

        1. 在这个 Java 项目的 pom.xml 文件所在文件夹下,执行命令: mvn clean package,这样就会在 target 目录中生成打包好的文件。

        注意:在 pom.xml 中要设置好生成目标为 jar 包,而不是 war 包。就是 <packaging> 标签值要是 jar,而不是 war。

        还要注意的是编译所用 jdk 的版本。用的 Spring boot 是 3.3.2,要求 Java 17 或以上版本。

        假设前面生成的 jar 包叫做 jwt.jar,可以试着运行一下这个 jar 包,java -jar target/jwt.jar ,这个项目没有访问数据库,所以比较简单,访问一下返回没问题,就算准备好了。

        

        2. 准备用 Docker 新建镜像。要实现这一点,我新建一个文件夹,叫 forbuild,将前面生成的那个 jar 包复制粘贴进来,然后新建一个 Dockerfile。

        这个 Dockerfile 文件是没有后缀的(所以不要用windows自带的记事本来建,那样建的都会加上txt后缀),可以用 IDE 来新建/编辑这个文件(也可以用 Sublime),还要注意的是这个文件名严格为 Dockerfile, 首字母不能小写,不能有空格,也就是说写成 dockerfile 或 Docker file 都不行。

        Dockerfile文件的内容如下     

FROM openjdk:17-jdk-alpine
COPY ./jwt.jar /usr/app/app.jar
WORKDIR /usr/app
CMD ["java","-jar","app.jar"]

        解释一下这个文件内容:第一行 FROM openjdk:17-jdk-alpine 就是拉取一个Linux系统,这个系统预装好了JDK17,这样就为提供了一个运行环境。新建镜像命令执行这一行的时候要从仓库里拉取 openjdk:17-jdk-alpine,可能会拉取不到,这个要另想办法。

        COPY ./jwt.jar /usr/app/app.jar 就是将当前文件夹下的jwt.jar 包复制到前面那个 Linux 系统中的 /usr/app/ 文件夹下,改名为 app.jar

        WORKDIR /usr/app 是将 /usr/app 设置为工作目录,后面的命令就被当成是在这个工作目录下执行。

        CMD ["java","-jar","app.jar"],意思是执行 java -jar app.jar 命令。

        新建的 forbuild 文件夹下,有了 jar 包和 Dockerfile 文件,就可以开始新建镜像了, 用命令:

docker image build -t jwt:1.0 .

注意末尾的一点不能忽视,代表当前目录。

        build image 成功后,可以开一个 shell 用 docker image ls 命令,看到生成的镜像。就是那个jwt:1.0的镜像。

        

        3. 启动这个镜像作为容器在Docker中运行。 用命令 docker run -d -p 9000:9000 --name my-java-app jwt:1.0

        对这个命令做一点解释 -p 9000:9000 ,这是将项目的端口,也就是容器中的端口映射到本机windows系统中的端口,这个项目在application.properties中设置访问端口是9000,这就是9000:9000中后面那个9000, 然后,前面这个就是要将其暴露为本机的9000端口。

        启动容器后,在docker desktop中看到状态正常,用 curl 访问该容器也正确返回。到此成功地将Spring boot项目在docker中运行了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值