Docker Java程序镜像制做

Docker Java程序镜像制做


制做前的准备

  • jre:不须要完整的jdk,jre便可,到Oracle进行下载便可,下载连接,根据本身的状况进行选择,这里选择jre-8u221-linux-x64.tar.gz,通常只能使用解压安装了,rpm的能够直接使用yum命令进行安装,但咱们这里用不了
  • jar包:本身写好的程序的可执行jar,放到镜像中直接运行便可

制做步骤

  • mkdir docker:建立一个制做镜像的工做目录,里面用于存放构建镜像须要的文件,如jre和jar包,还有镜像构建文件Dockfile
  • 在目录下放入jar包和jre
  • 生产Dockfile文件并进行编写,编写示例和说明以下,下面的操做环境是centos7
# 建立镜像制做目录
mkdir docker
cd docker

# 将oracle的jre包和生成好的程序jar放到目录中
# 为了制造较小体积的镜像,不使用jdk包,也没有必要使用它
cp ../jre-8u221-linux-x64.tar.gz ./
cp ../seckill-1.0-SNAPSHOT.jar ./

# 建立并编辑编辑Dockfile镜像生成文件
vim Dockerfile

# 将下面的内容写入文件中,详细的东西在后面会有说明
FROM docker.io/jeanblanchard/alpine-glibc
ADD jre-8u221-linux-x64.tar.gz /usr/java/jdk
ENV JAVA_HOME /usr/java/jdk/jre1.8.0_221
ENV PATH ${PATH}:${JAVA_HOME}/bin
COPY seckill-1.0-SNAPSHOT.jar /home/seckill-1.0-SNAPSHOT.jar
CMD java -jar /home/seckill-1.0-SNAPSHOT.jar

# 生成名称为seckill,版本为v0的镜像
docker build -t seckill:v0 .
# 运行镜像,个人Java程序是监听在8080端口的,因此将镜像容器的8080端口映射到宿主机的8080,并命名容器的名称为seckill
docker run --name seckill -p 8080:8080 seckill
# 查看当前seckill容器的输出,这里会打印显示Java的控制台输出内容
docker logs seckill

    下面讲解下Dockfile文件的内容:html

  • FROM docker.io/jeanblanchard/alpine-glibc:docker的linux镜像有不少,好比Ubuntu、centos之类的,但他们的体积都比较大,单纯一个镜像的都是400M以上的,而其中的alpine镜像只用不到10M,很是的小巧,因此这里就选用它做为基础的构建镜像。可是alpine是基于MUSL libs(mini libc)的,而Java是基于GUN Standard C (glibc)library的,若是不作任何处理的话Java不能在其上运行,而在网上有大佬已经制造安装了glibc的alpine镜像,咱们直接使用便可
  • ADD jre-8u221-linux-x64.tar.gz /usr/java/jdk:解压并添加jre压缩包到/usr/java/jdk目录下
  • ENV JAVA_HOME /usr/java/jdk/jre1.8.0_22一、ENV PATH ${PATH}:${JAVA_HOME}/bin:这种Java环境变量,这里踩过一个坑,须要注意的是JAVA_HOME的路径设置,若是你的jre包的版本和我不同话,须要进行修改,我这里解压后是jre1.8.0_221
  • COPY seckill-1.0-SNAPSHOT.jar /home/seckill-1.0-SNAPSHOT.jar:复制添加Java程序到指定目录
  • CMD java -jar /home/seckill-1.0-SNAPSHOT.jar:设置在容器运行后启动Java程序

    若是对docker不是太了解的话,能够查看下面的我制做过程当中参考的连接java

参考连接

相关文章
相关标签/搜索