浏览代码

docs: update Chapter 12 to minimal Alpine JDK image and explain JRE/JDK tradeoff

yangyi 1 月之前
父节点
当前提交
584b03efc1
共有 1 个文件被更改,包括 4 次插入 和 2 次删除
  1. 4 2
      docker-java-sdk-tutorial.md

+ 4 - 2
docker-java-sdk-tutorial.md

@@ -1852,7 +1852,7 @@ dockerClient.updateContainerCmd(containerId)
 // 等价命令:
 //   docker run -d -w /code --user nobody --read-only --network none \
 //     --cap-drop ALL -m 64m --cpus 1 --pids-limit 64 \
-//     --tmpfs /code --tmpfs /tmp amazoncorretto:17 sh -c "sleep 300"
+//     --tmpfs /code --tmpfs /tmp eclipse-temurin:17-jdk-alpine sh -c "sleep 300"
 
 HostConfig hostConfig = HostConfig.newHostConfig()
         .withMemory(memoryBytes)             // -m 64m
@@ -1866,7 +1866,7 @@ HostConfig hostConfig = HostConfig.newHostConfig()
                 "/code", "size=8m,mode=1777",
                 "/tmp", "size=8m,mode=1777"));
 
-CreateContainerResponse container = dockerClient.createContainerCmd("amazoncorretto:17")
+CreateContainerResponse container = dockerClient.createContainerCmd("eclipse-temurin:17-jdk-alpine")
         .withHostConfig(hostConfig)
         .withWorkingDir("/code")
         .withUser("nobody")                  // 非 root 运行
@@ -1875,6 +1875,8 @@ CreateContainerResponse container = dockerClient.createContainerCmd("amazoncorre
         .exec();
 ```
 
+关于镜像选择,这里用了 **JDK 而非 JRE**:因为编译与运行共用同一个容器,容器内必须同时存在 `javac` 和 `java`,而纯 JRE 镜像只含 `java` 没有 `javac`。具体选用 `eclipse-temurin:17-jdk-alpine`(Alpine 版最小 JDK),比主流的 `amazoncorretto:17` 压缩体积更小;Alpine 自带的 busybox 提供 `sh` / `printf` / `base64`,正好满足后续注入方案。镜像不一定在本地——`judge()` 入口先 `ensureJudgeImageAvailable()` 检查镜像是否存在,缺失则自动 `pullImageCmd` 拉取,避免人工准备环境。
+
 要点:
 
 - 根文件系统只读后,`/code` 与 `/tmp` 用 **tmpfs**(内存文件系统)挂载成可写目录,作为编译产物与临时文件的家;