记录利用Docker打包的第一个可运行jar包
利用docker对jar包大成可运行镜像文件的过程中踩了不少的坑,这里进行一个总结,方便大家学习,也方便自己后面复习。
第一步:编写一个简单的打印语句的java项目,编译运行没问题之后导出成jar包。我的是“DockerTest.jar”。
第二步:将jdk和jar包放在同一个文件夹里面,并在该文件夹下面创建一个名为“Dockerfile”文件。我的文件夹是“dockertest”。
第三步:编辑“Dockerfile”文件。文件内容如下:
#--------------
FROM centos
MAINTAINER ceshiuser
COPY jdk1.8.0_201 jdk1.8.0_201
ADD DockerTest.jar app.jar
ENV JAVA_HOME=/jdk1.8.0_201
ENV PATH=$JAVA_HOME/bin:$PATH
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENTRYPOINT ["java","-jar","/app.jar"]
#--------------
FROM命令是指定你创建镜像的基镜像,如果基镜像没有被发现,docker会去镜像仓库进行下载
ADD命令是将源系统上面的文件复制到目标容器系统中
ENV是配置环境变量
ENTRYPOINT配置容器启动后执行的命令
此处需要注意一下,如果没有做特殊配置,下载centos基镜像会非常慢甚至会下载超时。
如果遇到“net/http: TLS handshake timeout”,可以参考网友的这篇博文“https://blog.youkuaiyun.com/qq_33575129/article/details/78196279”
我选择的处理方式是,执行命令“gedit /etc/docker/daemon.json”,并将文件中的内容替换为如下内容:
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
此处对我的原文件内容做个备份(这个数据好像也是我之前参考博文添加的):
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
第四步:运行命令“docker build -t dockertest:1.0 .”,注意命令后面有个“.”。如果没有下载过镜像“centos”,此时会进行下载。
第五步:在第四步成功的情况下,执行“docker run -t -i dockertest:1.0 /bin/bash”命令。
如果着整个流程没有问题的话,控制台会打印出,你java文件中编写的那句打印语句。
此时第一个自己编写的java项目的jar包在docker里面运行起来了。
为了打印这么一句简单的“My first docker test!”,费了我不少的精力,踩了不少的坑,最后总算弄出来了,同时也学会了不少的东西,学习新东西的道路本来就是不容易的,实践是我们这一行学习最好的学习方式。