Skip to content

使用 Docker 部署 tio-boot ​

本文档详细介绍了如何使用 Docker 部署 tio-boot 项目,包括安装 Java 和 Maven、克隆项目、使用 Docker 运行和构建镜像等步骤。


安装 Java ​

首先,创建目录并下载 Oracle JDK 8u411:

bash
mkdir -p /opt/package/java && cd /opt/package/java
wget https://github.com/litongjava/oracle-jdk/releases/download/8u411/jdk-8u411-linux-x64.tar.gz

解压并配置 Java 环境变量:

bash
mkdir -p /usr/java/
tar -xf jdk-8u411-linux-x64.tar.gz -C /usr/java
export JAVA_HOME=/usr/java/jdk1.8.0_411
export PATH=$JAVA_HOME/bin:$PATH
java -version

验证 Java 安装:

bash
java version "1.8.0_411"
Java(TM) SE Runtime Environment (build 1.8.0_411-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.411-b09, mixed mode)

安装 Maven ​

创建目录并下载 Apache Maven 3.8.8:

bash
mkdir -p /opt/package/maven && cd /opt/package/maven
wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.zip

解压并配置 Maven 环境变量:

bash
mkdir -p /usr/maven
unzip apache-maven-3.8.8-bin.zip -d /usr/maven
export MVN_HOME=/usr/maven/apache-maven-3.8.8
export PATH=$MVN_HOME/bin:$PATH
mvn --version

验证 Maven 安装:

bash
Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39)
Maven home: /usr/maven/apache-maven-3.8.8
Java version: 1.8.0_411, vendor: Oracle Corporation, runtime: /usr/java/jdk1.8.0_411/jre
Default locale: en, platform encoding: UTF-8
OS name: "linux", version: "6.1.109-118.189.amzn2023.x86_64", arch: "amd64", family: "unix"

克隆项目 ​

在目标目录下克隆 tio-boot 项目:

bash
mkdir -p /data/apps && cd /data/apps
git clone https://github.com/litongjava/tio-boot-web-hello.git

使用 Java 命令启动 ​

打包项目 ​

进入项目目录并执行 Maven 打包:

bash
cd tio-boot-web-hello
mvn clean package -DskipTests -Dgpg.skip -Pproduction

启动应用 ​

使用 Java 命令运行 JAR 包:

bash
java -jar target/tio-boot-web-hello-1.0.0.jar

使用 Docker 启动 ​

测试启动 ​

使用预构建的 JDK 镜像运行应用:

使用 litongjava/jdk:8u411-stable-slim 镜像

bash
docker run --name web-hello \
  -dit \
  -v $(pwd)/target:/app \
  -p 8080:80 \
  -w /app \
  litongjava/jdk:8u411-stable-slim \
  java -jar tio-boot-web-hello-1.0.0.jar --app.env=prod

使用 litongjava/jdk:8u211 镜像

bash
docker run --name web-hello \
  -dit \
  -v $(pwd)/target:/app \
  -p 8080:80 \
  -w /app \
  litongjava/jdk:8u211 \
  /usr/java/jdk1.8.0_211/bin/java -jar tio-boot-web-hello-1.0.0.jar --app.env=prod

注意: 请将 $(pwd)/target 替换为实际的目标目录路径。

测试应用 ​

使用 curl 命令测试应用是否成功启动:

bash
curl http://localhost:8080

封装成镜像 ​

编写 Dockerfile ​

创建 Dockerfile 文件,内容如下:

dockerfile
FROM litongjava/jdk:21_0_6-stable-slim

# 设置工作目录
WORKDIR /app

# 复制 JAR 文件到容器
COPY target/tio-boot-web-hello-1.0.0.jar /app/

# 运行 JAR 文件
CMD ["java", "-jar", "tio-boot-web-hello-1.0.0.jar"]

构建 Docker 镜像 ​

在项目根目录下执行构建命令:

bash
docker build -t litongjava/tio-boot-web-hello .

运行 Docker 容器 ​

启动容器并设置自动重启:

bash
docker run -dit --restart=always --net=host --name=tio-boot-web-hello litongjava/tio-boot-web-hello

使用 ENTRYPOINT ​

为了支持 JAVA_OPTS 等环境变量,可以修改 Dockerfile 为使用 ENTRYPOINT:

dockerfile
FROM litongjava/jdk:8u391-stable-slim

# 设置工作目录
WORKDIR /app

# 复制 JAR 文件到容器
COPY target/tio-boot-web-hello-1.0.0.jar /app/

# 使用 ENTRYPOINT 运行 JAR 文件
ENTRYPOINT ["java", "-jar", "tio-boot-web-hello-1.0.0.jar"]

指定运行环境 ​

运行容器时,可以通过命令行参数指定应用环境:

bash
docker run -d --net=host --name tio-boot-web-hello \
  -v $(pwd)/logs:/app/logs \
  -e TZ=Asia/Shanghai \
  -e LANG=C.UTF-8 \
  litongjava/tio-boot-web-hello:latest --app.env=prod

推荐镜像: 使用 litongjava/jdk:8u391-stable-slim 更加稳定高效。其他可选镜像包括:

  • litongjava/jre:8u391-stable-slim (352MB)
  • litongjava/jdk:8u391-stable-slim (437MB)
  • litongjava/jdk:8u411-stable-slim (458MB)
  • litongjava/jdk:8u211 (549MB)
  • litongjava/jdk:17.0.12-stable-slim
  • litongjava/jdk:21_0_6-stable-slim
  • litongjava/jdk:25_0_2-stable-slim

使用 Builder 和 Runner ​

通过分阶段构建(multi-stage build)优化 Docker 镜像大小和构建效率。

编写 Dockerfile ​

dockerfile
# 构建阶段
FROM litongjava/maven:3.8.8-jdk8u391 AS builder
WORKDIR /app

# 预先下载依赖
COPY pom.xml pom.xml
RUN mvn dependency:go-offline

# 复制源代码并打包
COPY src src
RUN mvn package -Passembly -q
RUN ls target

# 运行阶段
FROM litongjava/jre:8u391-stable-slim
WORKDIR /app

# 从构建阶段复制 JAR 文件
COPY --from=builder /app/target/gpt-translator-backend-1.0.0.jar /app

# 暴露端口
EXPOSE 8080

# 运行应用
CMD [
  "java", "-server", "-Xms1G", "-Xmx1G",
  "-XX:+UseNUMA", "-XX:+UseParallelGC",
  "-Dpacket.handler.mode=queue1",
  "-jar", "/app/gpt-translator-backend-1.0.0.jar"
]

构建和运行镜像 ​

bash
docker build -t litongjava/tio-boot-web-hello-builder .
docker run -dit --restart=always --net=host --name=tio-boot-web-hello litongjava/tio-boot-web-hello-builder

中文支持与北京时区 ​

为确保应用支持中文并使用北京时区,启动容器时添加环境变量 TZ 和 LANG:

bash
docker run -dit --name tio-boot-web-hello --restart=always --net=host \
  -v $(pwd):/app -w /app \
  -e TZ=Asia/Shanghai \
  -e LANG=C.UTF-8 \
  litongjava/jdk:8u391-stable-slim \
  java -jar tio-boot-web-hello-1.0.0.jar

使用二进制文件启动 ​

移除 hotswap-classloader 依赖 ​

为了使用二进制文件启动,建议移除 hotswap-classloader 依赖,并使用 TioApplication 启动应用。示例代码如下:

java
TioApplication.run(HelloApp.class, args);

打包成二进制文件 ​

使用 Maven 打包为原生二进制文件:

bash
mvn clean package -DskipTests -Pnative

运行二进制文件 ​

注意: 目前运行二进制文件可能存在不支持反射的问题,测试阶段可能会失败。

尝试运行容器

bash
docker run --rm -p 8080:80 -v $(pwd)/target:/app debian /app/web-hello

若失败,可尝试以下命令:

bash
docker run --rm -p 8080:80 -v $(pwd)/target:/app \
  -e JAVA_HOME=/usr/java/jdk1.8.0_211 \
  litongjava/jdk:8u211 /app/web-hello

备注: 运行二进制文件时可能会遇到未知错误,需进一步排查原因。


通过以上步骤,您可以成功使用 Docker 部署 tio-boot 项目。如果在部署过程中遇到任何问题,请参考相关日志或联系项目维护者获取帮助。

MIT Licensed