使用 Docker 部署 tio-boot
本文档详细介绍了如何使用 Docker 部署 tio-boot 项目,包括安装 Java 和 Maven、克隆项目、使用 Docker 运行和构建镜像等步骤。
安装 Java
首先,创建目录并下载 Oracle JDK 8u411:
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 环境变量:
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 安装:
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:
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 环境变量:
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 安装:
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 项目:
mkdir -p /data/apps && cd /data/apps
git clone https://github.com/litongjava/tio-boot-web-hello.git
使用 Java 命令启动
打包项目
进入项目目录并执行 Maven 打包:
cd tio-boot-web-hello
mvn clean package -DskipTests -Pproduction
启动应用
使用 Java 命令运行 JAR 包:
java -jar target/tio-boot-web-hello-1.0.0.jar
使用 Docker 启动
测试启动
使用预构建的 JDK 镜像运行应用:
使用 litongjava/jdk:8u411-stable-slim
镜像
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
镜像
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
命令测试应用是否成功启动:
curl http://localhost:8080
封装成镜像
编写 Dockerfile
创建 Dockerfile
文件,内容如下:
FROM litongjava/jdk:8u391-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 镜像
在项目根目录下执行构建命令:
docker build -t litongjava/tio-boot-web-hello .
运行 Docker 容器
启动容器并设置自动重启:
docker run -dit --restart=always --net=host --name=tio-boot-web-hello litongjava/tio-boot-web-hello
使用 ENTRYPOINT
为了支持 JAVA_OPTS
等环境变量,可以修改 Dockerfile
为使用 ENTRYPOINT
:
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"]
指定运行环境
运行容器时,可以通过命令行参数指定应用环境:
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)
使用 Builder 和 Runner
通过分阶段构建(multi-stage build)优化 Docker 镜像大小和构建效率。
编写 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 /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"
]
构建和运行镜像
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
:
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
启动应用。示例代码如下:
TioApplication.run(HelloApp.class, args);
打包成二进制文件
使用 Maven 打包为原生二进制文件:
mvn clean package -DskipTests -Pnative
运行二进制文件
注意: 目前运行二进制文件可能存在不支持反射的问题,测试阶段可能会失败。
尝试运行容器
docker run --rm -p 8080:80 -v $(pwd)/target:/app debian /app/web-hello
若失败,可尝试以下命令:
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 项目。如果在部署过程中遇到任何问题,请参考相关日志或联系项目维护者获取帮助。