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文件的内容:

  • 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_221、ENV PATH ${PATH}

    Docker Java程序镜像制作的更多相关文章

    1. Docker系列-(2) 镜像制作与发布

      上篇文章引入了Docker的基本原理和操作,本节文章主要介绍如何制作Docker镜像和发布. 镜像文件结构 Docker镜像的本质是一系列文件的集合,这些文件依次叠加,形成了最后的镜像文件,类似于下图 ...

    2. 利用docker进行基础镜像制作

      前言 最近想通过Javaee来开发博客,但是不想因为环境配置问题总是耗时间配置相关配置,所以萌生出用docker镜像来搭建web的系统环境,也是作为docker学习实践的笔记. docker hub注 ...

    3. Docker2 docker commit方法镜像制作

      一.前期准备 1.下载一个centos镜像,进入容器,安装wget docker pull centos docker run -it centos bash [root@web1 ~]# docke ...

    4. Docker笔记——jenkins镜像制作

      jenkins官方路径:https://hub.docker.com/_/jenkins/ 最新Dockerfile路径:https://github.com/jenkinsci/docker/blo ...

    5. Docker笔记——jdk镜像制作

      openjdk镜像依赖如下: openjdk:8-jdk -> buildpack-deps:jessie-scm -> buildpack-deps:jessie-curl -> ...

    6. Docker学习以及镜像制作流程

      一.何为Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后 ...

    7. JVM性能优化系列-(4) 编写高效Java程序

      4. 编写高效Java程序 4.1 面向对象 构造器参数太多怎么办? 正常情况下,如果构造器参数过多,可能会考虑重写多个不同参数的构造函数,如下面的例子所示: public class FoodNor ...

    8. 【ASP.NET Core分布式项目实战】(五)Docker制作dotnet core控制台程序镜像

      Docker制作dotnet core控制台程序镜像 基于dotnet SDK 新建控制台程序 mkdir /home/console cd /home/console dotnet new cons ...

    9. MySQL、MongoDB、Redis数据库Docker镜像制作

      MySQL.MongoDB.Redis数据库Docker镜像制作 在多台主机上进行数据库部署时,如果使用传统的MySQL的交互式的安装方式将会重复很多遍.如果做成镜像,那么我们只需要make once ...

    随机推荐

    1. [ 转载 ]hashCode及HashMap中的hash()函数

      hashCode及HashMap中的hash()函数   一.hashcode是什么 要理解hashcode首先要理解hash表这个概念 1. 哈希表 hash表也称散列表(Hash table),是 ...

    2. Linux如何杀掉tty终端

      今天工作中遇到了同事的终端登陆不上去的问题,尝试着如何解决,首先想到的就是先干掉tty终端. 下面是总结的如何杀掉tty终端: 1.使用w命令查看当前登陆的用户及使用的tty [root@host ~ ...

    3. Java集合--Map总结

      转载请注明出处:http://www.cnblogs.com/skywang12345/admin/EditPosts.aspx?postid=3311126 第1部分 Map概括 (01) Map ...

    4. vscode 中 vue项目使用eslint插件 检查代码

      前言 本文章项目由vue-cli3创建 vscode版本1.36.1 eslint1.9.0 在网上找了一大堆文章,不知是什么原因,没有一篇可以直接使用的 折腾了许久,直接按eslint插件的说明,竟 ...

    5. 【JUC系列第二篇】-原子变量

      作者:毕来生 微信:878799579 1.什么是原子变量? ​ 原子变量保证了该变量的所有操作都是原子的,不会因为多线程的同时访问而导致脏数据的读取问题. 2.通过synchronized保证原子操 ...

    6. BZOJ 3576: [Hnoi2014]江南乐 (SG函数)

      题意 有nnn堆石子,给定FFF,每次操作可以把一堆石子数不小于FFF的石子平均分配成若干堆(堆数>1>1>1). 平均分配即指分出来的石子数中最大值减最小值不超过111.不能进行操 ...

    7. [Google Guava] 1.1-使用和避免null

      原文链接 译文链接 译者: 沈义扬    Doug Lea 说,“Null 真糟糕.”   当Sir C. A. R. Hoare 使用了null引用后说,”使用它导致了十亿美金的错误.” 轻率地使用 ...

    8. 27、AOP-AOP功能测试

      27.AOP-AOP功能测试 AOP : [动态代理]指程序运行期间动态的将某段代码切入到制定方法位置进行运行的编程方式. 导入AOP模块:Spring AOP(spring-aspects) 定义一 ...

    9. final详解

      final的含义? final:java中的关键字,意为“终态的”或者“无法改变的”.可用来修饰类.变量.方法. 变量(成员变量.静态变量.局部变量) 注意: 1.final变量即为常量,通常常量名大 ...

    10. PHP mysqli_close() 函数

      关闭先前打开的数据库连接: <?php $con=mysqli_connect("localhost","my_user","my_passwo ...