1、下载
我们通过使用JRE来构建基础镜像,已达到最小化JDK基础镜像的目的,首先需要下载JRE(如果下载较慢可以选择下载本文附件中的JRE),传送门如下:
官方jre下载地址:https://www.java.com/en/download/manual.jsp
2、安装
然后解压JRE包,删除根目录下文本文件,然后删除其他不必要文件,命令如下:
#解压 tar -zxvf jre-8u271-linux-x64.tar.gz #进入目录 cd jre1.8.0_271/ #删除文本文件 rm -rf COPYRIGHT LICENSE README release THIRDPARTYLICENSEREADME-JAVAFX.txt THIRDPARTYLICENSEREADME.txt Welcome.html #删除其他无用文件 rm -rf lib/plugin.jar \ lib/ext/jfxrt.jar \ bin/javaws \ lib/javaws.jar \ lib/desktop \ plugin \ lib/deploy* \ lib/*javafx* \ lib/*jfx* \ lib/amd64/libdecora_sse.so \ lib/amd64/libprism_*.so \ lib/amd64/libfxplugins.so \ lib/amd64/libglass.so \ lib/amd64/libgstreamer-lite.so \ lib/amd64/libjavafx*.so \ lib/amd64/libjfx*.so
重新打包所有文件(不打包也可以,在Dockerfile里ADD这个目录即可,当前精简完jre目录大小是110M,压缩后是45M)
$ tar -zcvf jre1.8.0_271.gz jre1.8.0_271/
创建Dockerfile(ps:Dockerfile文件要和jre1.8.0_271.gz在一个路径下,如果不一样,下面的ADD里面的路径要相应变化)
FROM centos:7 MAINTAINER hao ADD jre1.8.0_271.gz /usr/java/ ENV JAVA_HOME /usr/java/jre1.8.0_271 ENV PATH ${PATH}:${JAVA_HOME}/bin WORKDIR /data/
执行构建命令,这里注意仓库地址和标签换成自己的,命令如下:
$ docker build -t harbor.sportxxxutikb.com/library/java8:1.0 .
这是要打包成的镜像地址 harbor.sportxxxutikb.com/library/java8:1.0 java8:1.0镜像名称
3、验证
测试运行,命令如下:
$ docker run -it harbor.sportxxxutikb.com/library/java8:1.0 bash # java version "1.8.0_271" Java(TM) SE Runtime Environment (build 1.8.0_271-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)
到这,基础镜像打包完成。
4.把应用程序打包到基础镜像并发布
创建一个Dockerfile文件(ps:Dockerfile文件要和rocketmq-console-ng-1.0.0.jar在一个路径下,或者绝对路径)
FROM harbor.sportxxxutikb.com/library/java8:1.0 MAINTAINER hao ADD rocketmq-console-ng-1.0.0.jar /data EXPOSE 8080 ENTRYPOINT ["java","-jar","rocketmq-console-ng-1.0.0.jar"]
#docker要暴露的端口8080
EXPOSE 8080
#启动镜像自动运行程序的命令
ENTRYPOINT ["java","-jar","rocketmq-console-ng-1.0.0.jar"]
执行构建命令,这里注意仓库地址和标签换成自己的,命令如下:
docker build -t test/java8:1.0 .
执行docker images,就能看到刚刚打包的镜像
docker run -d --name rocketmq -p 88:8080 test/java8:1.0
然后就可以通过ip+端口 查看程序是否起来 192.168.136.129:88
docker run -itd --name rocketmq -p 88:8080 test/java8:1.0 /bin/bash
交互式进入容器,输入ps -ef 就能看到执行的程序
[root@d7f8b01619cc data]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 10 07:38 pts/0 00:00:12 java -jar rocketmq-console-ng-1.0.0.jar root 81 0 0 07:40 pts/1 00:00:00 bash root 96 81 0 07:40 pts/1 00:00:00 ps -ef
这样一个镜像就打包完成了