为了方便用户进入容器后快速开始编译,我们做了一个shell脚本start_make.sh,把这个脚本也要复制到镜像中,内容如下:
#!/bin/bash $WORK_PATH/$OPENJDK_SRC_DIR/configure echo "start make" cd $WORK_PATH/$OPENJDK_SRC_DIR make all ZIP_DEBUGINFO_FILES=0 DISABLE_HOTSPOT_OS_VERSION_CHECK=OK清理无用的文件,例如openjdk源码的压缩文件,jdk7的安装文件等;
按照以上步骤,最终写出的Dockerfile文件如下:
# Docker image of compile and build enviroment for openjdk8 # VERSION 0.0.1 # Author: bolingcavalry #基础镜像使用centos7 FROM centos:centos7 #作者 MAINTAINER BolingCavalry <zq2599@gmail.com> #定义工作目录 ENV WORK_PATH /usr/local #定义jdk1.7的文件名 ENV JDK_RPM_FILE jdk-7u71-linux-x64.rpm #定义openJdk源码的文件名 ENV OPENJDK_SRC_ZIP openjdk-8-src-b132-03_mar_2014.zip #定义解压缩后的文件名 ENV OPENJDK_SRC_DIR openjdk #yum更新 RUN yum -y update #安装工具集 RUN yum -y groupinstall "Development Tools" #安装即将用到的软件 RUN yum -y install unzip libXtst-devel libXt-devel libXrender-devel cups-devel freetype-devel alsa-lib-devel which #把分割过的jdk1.7安装文件复制到工作目录 COPY ./jdkrpm-* $WORK_PATH/ #用本地分割过的文件恢复原有的jdk1.7的安装文件 RUN cat $WORK_PATH/jdkrpm-* > $WORK_PATH/$JDK_RPM_FILE #本地安装jdk1.7 RUN yum -y localinstall $WORK_PATH/$JDK_RPM_FILE #把分割过的openJdk8的源码压缩包复制到工作目录 COPY ./openjdksrc-* $WORK_PATH/ #用本地分割过的文件恢复原有的openJdk8的源码压缩包 RUN cat $WORK_PATH/openjdksrc-* > $WORK_PATH/$OPENJDK_SRC_ZIP #解压缩源码 RUN unzip $WORK_PATH/$OPENJDK_SRC_ZIP -d $WORK_PATH #复制启动编译的shell COPY ./start_make.sh $WORK_PATH/$OPENJDK_SRC_DIR/ #给执行文件增加可执行权限:configure文件 RUN chmod a+x $WORK_PATH/$OPENJDK_SRC_DIR/configure #给执行文件增加可执行权限:启动编译文件 RUN chmod a+x $WORK_PATH/$OPENJDK_SRC_DIR/start_make.sh #删除分割文件 RUN rm $WORK_PATH/jdkrpm-* #删除分割文件 RUN rm $WORK_PATH/openjdksrc-* #删除jdk安装包文件 RUN rm $WORK_PATH/$JDK_RPM_FILE #删除openJdk源码压缩文件 RUN rm $WORK_PATH/$OPENJDK_SRC_ZIP至此,镜像文件制作所需的材料都已经齐全了,如下图:
现在让我们开始制作镜像吧,打开终端,进入Dockerfile所在目录,执行命令
docker build -t bolingcavalryopenjdk:0.0.1 .因为要在线安装不少的软件,所以可能耗时会略长,和网络带宽有关,我在住处用家庭网络大概10分钟左右构建成功,执行目录docker images查看镜像,新的镜像文件已经生成了,如下图:
现在启动一个容器试试吧:
docker run --name=jdk001 -idt bolingcavalryopenjdk:0.0.1容器已经启动,再执行以下命令进入容器:
docker exec -it jdk001 /bin/bash进去后,直接到/usr/local/openjdk目录下,执行./start_make.sh,开始编译了,整个过程的耗时和当前电脑的硬件配置有关,我用i7处理器的mac pro15大约要用20多分钟,编译结束后会有类似下图的输出:
这时候去/usr/local/openjdk目录下看看,发现多了一个build目录,这里面就是编译好的结果,如下图:
build目录下只有一个linux-x86_64-normal-server-release目录,再进去就能看到jdk目录了,如下图:
进入/usr/local/openjdk/build/linux-x86_64-normal-server-release/jdk/bin目录,会发现里面有java文件,执行./java -version输出如下:
新的jdk信息已经打印出来了,OpenJDK Runtime Enviroment信息已经说明了这是个最新构建的jdk环境。