今天我们就来看下Docker镜像bolingcavalry/buildopenjdk11:0.0.2的制作过程,看看它做了哪些事情来简化下载过程;
参考文章
如果您打算在真实Linxu环境下编译OpenJDK11源码,可以参照《Ubuntu环境编辑OpenJDK11源码》;
环境信息
-
操作系统:Ubuntu 16.04.5 LTS;
-
Docker:18.06.1-ce;
准备材料
本次镜像用到了以下材料:
-
Dockerfile:制作Docker镜像的脚本文件;
-
cmd.sh:容器启动后执行的命令脚本;
-
jdk10安装包,在编译OpenJDK11的时候,需要先装好jdk10作为bootjdk;
-
source.list:linux源;
您可以选择直接从GitHub下载上述所有内容,地址和链接信息如下表所示:
| 名称 | 链接 | 备注 |
| :-- | :-- | :-- |
| 项目主页 | https://github.com/zq2599/buildopenjdk11 | 该项目在GitHub上的主页 |
| git仓库地址(https) | https://github.com/zq2599/buildopenjdk11.git | 该项目源码的仓库地址,https协议 |
| git仓库地址(ssh) | git@github.com:zq2599/buildopenjdk11.git | 该项目源码的仓库地址,ssh协议 |
要注意的问题
jdk10安装文件jdk-10_linux-x64_bin_ri.tar.gz有186兆,因此做成的镜像也很大,用户下载镜像时,一旦网络问题下载失败,docker会自动重试,此时是重新下载,这意味着之前的下载都白做了,为了缓解这个问题,可以把文件分割成多个小文件,这样虽然整体大小不变,但失败时重下载的文件是很小的,在linux环境执行以下命令,将文件分割成多个最大10兆的文件:
split -b 10m jdk-10_linux-x64_bin_ri.tar.gz jdk-10_linux-x64_bin_ri-
编写Dockerfile
Dockerfile内容如下,主要是安装必要的应用,另外关键的操作都有详细的注释,就不多说了:
#Docker image of source for OpenJDK
VERSION 0.0.1
Author: bolingcavalry
#基础镜像使用ubuntu:16.04
FROM ubuntu:16.04
#作者
MAINTAINER BolingCavalry zq2599@gmail.com
#定义boot jdk文件名
ENV BOOT_JDK_FILE_NAME jdk-10_linux-x64_bin_ri
#定义boot jdk安装目录
ENV BOOT_JDK_PATH /usr/lib/jvm
#定义boot jdk解压后的包名
ENV BOOT_JDK_PACKAGE_NAME jdk-10
#boot jdk的完全路径
ENV BOOT_JDK_HOME B O O T J D K P A T H / BOOT_JDK_PATH/ BOOTJDKPATH/BOOT_JDK_PACKAGE_NAME
#boot jdk相关的环境变量
ENV JAVA_HOME $BOOT_JDK_HOME
ENV JRE_HOME $BOOT_JDK_HOME/jre
ENV CLASSPATH .: B O O T J D K H O M E / l i b : BOOT_JDK_HOME/lib: