使用 Docker 部署

测试能否使用 docker 启动

打包

mvn clean package -DskipTests -Pproduction

测试启动

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-0.0.1-SNAPSHOT.jar --app.env=prod

注意$(pwd)/target 替换为你的目录 测试 curl http://localhost:8080

封装成镜像

Dockerfile


FROM litongjava/jdk:8u391-stable-slim

# Set the working directory in the container
WORKDIR /app

# Copy the jar file into the container
COPY target/tio-boot-web-hello-0.0.1-SNAPSHOT.jar /app/

# Command to run the jar file
CMD ["/usr/java/jdk1.8.0_211/bin/java", "-jar", "tio-boot-web-hello-0.0.1-SNAPSHOT.jar", "--app.env=prod"]
docker build -t litongjava/tio-boot-web-hello .
docker run -dit --restart=always --net=host --name=tio-boot-web-hello litongjava/tio-boot-web-hello

这里推荐推荐笔者封装的镜像,推荐使用 litongjava/jdk:8u391-stable-slim,当然你还有下面的选择

  • litongjava/jre:8u391-stable-slim 352MB
  • litongjava/jdk:8u391-stable-slim 437MB
  • litongjava/jdk:8u211 549MB

builder and runner

构建镜像使用一个 docker 容器,启动镜像使用另一个 docker 容器

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

FROM litongjava/jre:8u391-stable-slim

WORKDIR /app

COPY --from=builder /src/target/tio-http-server-benchmark-1.0.jar /app/target

EXPOSE 8080

CMD ["java", "-server", "-Xms1G", "-Xmx1G", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-Dpacket.handler.mode=queue1", "-jar", "/app/target/tio-http-server-benchmark-1.0.jar"]

中文支持 & 北京时区

启动镜像时添加两个环境变量 TZ and 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-0.0.1-SNAPSHOT.jar

binary

如果要使用二进制的方式启动,推荐移除 hotswap-classloader 依赖使用 TioApplication 启动应用,示例代码如下

TioApplication.run(HelloApp.class, args);

打包成二进制文件

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