在Docker中运行Java后端服务器
2024-11-15 09:07:26

场景

项目中遇到了要接手师兄的Java代码,并迁移到新服务器启动服务。考虑到方便日后可能的迁移,打算使用Docker容器化部署。

dockerfile

首先撰写需要的dockerfile文件。目前代码运行稳定而且没有修改需求,因此我直接使用了之前的Jar包,而不考虑区分调试环境和构建环境,并且直接使用Jar包部署。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 使用官方的OpenJDK镜像作为基础镜像
FROM openjdk:11-jre-slim as kgmaker

# 设置工作目录
WORKDIR /app

# 将生成的jar包复制到工作目录
COPY target/kgmaker-0.0.1-SNAPSHOT.jar /app

# 暴露应用运行的端口(假设应用运行在8090端口)
EXPOSE 8090

# 运行Java应用
ENTRYPOINT ["java", "-jar", "kgmaker-0.0.1-SNAPSHOT.jar"]

这里只复制了jar包,减少了部署时间和镜像大小;EXPOSE指令声明了监听端口,用作文档化目的(实际还需要在部署时指定端口);ENTRYPOINT指令定义了容器运行后执行的命令,与CMD的区别是,CMD提供的参数会被传递给 ENTRYPOINT 指定的程序,简单使用直接用ENTRYPOINT即可。

docker-compose

docker-compose提供了简洁高效的多Docker容器运行编排功能,这里定义的docker-copose.yml如下。

1
2
3
4
5
6
7
8
version: '3'
services:
  kgmaker:
    build:
      context: .
      target: 'kgmaker'
    ports:
      - '8090:8090'

这里的build指定了通过当前文件夹下的kgmaker镜像进行构建,ports指定了容器和主机的端口映射。

运行时,只需要简单的

1
docker-compose up

即可。