「制作java镜像」java项目生成镜像

博主:adminadmin 2022-11-30 00:30:11 65

本篇文章给大家谈谈制作java镜像,以及java项目生成镜像对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

如何使用Docker 进行Java 开发

一、准备工作

现在有非常多的Java Web框架,但我这里并不打算使用它们。我只想要的是一个小的框架所以我选择了Spark,它是一个基于Java 8的极小的框架。Spark使用Maven作为构建工具。

二、源代码和配置文件

在这个例子中你要增加三个文件:

Maven的配置文件: pom.xml

一个Java类:Hello.java

一个Dockerfile

如果有读者等不及了,可以克隆这个repo:

下面我们会详细解释这三个文件的结构,你可以此视频来快速了解。

pom.xml

pom.xml包含一些基本的Maven配置,比如配置Spark所依赖的Java 8。它会把所有的依赖封装成一个大的jar包。我不是 Maven专家,所以我没法把例子写得更简单、更流畅以便让他们更受欢迎。这是pom文件地址,你可以看看我的配置: … m-xml

Hello.java

pom.xml文件定义mainClass为sparkexample.Hello,我们需要在src/main/java/sparkexample/目录下创建Hello.java文件。

Dockerfile

最后我们来编写Dockerfile文件,这个Dockerfile使用到了Java镜像(java:oracle-java8),并从安装Maven开始做起。下一步它会安装项目依赖。我们通过pom.xml来解析这些依赖,正如你所看到的,它允许Docker缓存这些依赖。下一步,我们要编译打包我们的应用,并启动应用。如果我们重建应用时,pom.xml文件没有任何修改,之前的步骤都被缓存下来了,直接到最后一步启动应用。这可以加快应用的重新构建速度。

三、创建和运行

一旦这三个文件已经完成,那创建Docker镜像就变得轻而易举了。

$ docker build -t giantswarm/sparkexample .

注意:首次启动时会花费一些时间,因为它要安装Maven并下载所有的依赖。之后再启动就需要几秒钟,因为所有的东西都已经缓存了。

镜像创建之后,用下面的命令创建容器:

docker run -d -p 4567:4567 giantswarm/sparkexample

用下面的命令访问:

curl localhost:4567 hello from sparkjava.com

这样就可以了

基于Docker-Compose 部署前后端分离单体项目(一)

1.单体项目是否需要采用docker进行部署?

2.如果采用docker部署是否有必要采用docker-compose进行服务编排?

答案是也许有必要,也许没必要,docker的优势很多,但是对于垂直架构的项目优势未必那么明显,总之一句你需要根据自己的项目情况去考虑。笔者之所以会写这篇文章,大概率是基于省事的目的去部署一些小的项目。同时也是提供一种前后端分离的项目的部署方案(但绝对不是最有方案),以及在这种模式下的docker如何去工作才能达到我们的目的。

然而最终的目的是为了偷懒,省事。让前后端分离项目的部署方式变的简单。就也许在这种模式下,你只需要5分钟就可以实现部署,或许吧,不妨把这个当作一个目标。

本文目标:

上图将部署流程分为三部分,本地开发环境,阿里云容器镜像服务,以及linux服务器。下面分成三个部分对上图进行说明,工欲善其事,必先利其器。先进行说明,后面才能对每部分做的工作比较清晰。

本地开发环境分成三个项目

先解释一下图中的相关名词

容器镜像服务,分门别类的存储我们的镜像 。这个是镜像服务的唯一用途,就相当于maven的仓库是一样的。

我们也可以搭建自己的私服仓库,例如开源的harbor等,都非常好用,在企业中用私服会比较多。

首先我们需要在linux服务器上搭建Docker环境,也就是我们在linux上有一个docker。再将我们的镜像运行在docker上。

从上图我们发现在docker上运行这很多容器,mysql,redis,nginx,pitaya-java,pitaya-admin,pitaya-h5.

然而我们的容器是需要通信的,例如:大家都知道pitaya-java是一个springboot的项目,他需要访问mysql进行数据存储服务,需要访问redis缓存我们的令牌信息等。

也就是说,我们运行的这些容器之间是要相互能通信的。所以我们在docker上创建了一个内部网络叫做pitaya-network,他在172.2.0.0这个网段,我们需要我们的容器都加入pitaya-network这个网络,并且分配固定的IP地址,指定固定端口。

为什么需要分配固定IP地址,指定固定端口? 因为我们的容器也可能会和服务器一样,会挂掉,如果随机分配的话,创建新的容器,IP地址可能会变,我们容器间不能通信,例如java服务访问不了mysql,这样我们的线上就无法提供客户正常服务了。

本文我们做一个大概的概述,针对上面的结构以下问题是我们急需解决的?

其实针对java项目和vue项目制作镜像方式不同,但是原理一样,原理无非就是基于docker build这个命令制作镜像,但是java的镜像制作和推送可能更加简单,只需要一条命令即可,因为maven提供了制作镜像的插件。这些内容在下一篇文章都会涉及到!

想要表达清楚一键事情是非常不容易的事情,特别是通过文字,既不想废话连篇,又想表达清楚真的很难,因为细节比较多!然而我觉得弄清楚大方向是非常必要的,然后再进行分解,希望能说的明白,我会加油的,如果写的不好也希望大家原谅!

java 里面什么是镜像呢?我觉得我好模糊啊?

镜像(Mirroring)是冗余的一种类型,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像。

所谓镜像文件其实和ZIP压缩包类似,它将特定的一系列文件按照一定的格式制作成单一的文件,以方便用户下载和使用,

镜像就是像照镜子一样。我们一般说的镜像是指给系统作个ghost镜像。这样可以在很短时间,很方便的还原出一个完整的系统来。镜像可以说是一种文件,比如iso,gho都属于镜像文件,镜像文件可以直接刻录到光盘中,也可以用虚拟光驱打开

常见的镜像文件格式主要有.iso、.bin、.nrg、.vcd、.cif、.fcd、.img、.ccd、.c2d、.dfi、.tao、.dao和.cue等。

认为你所说的Java里面的镜像应该是指为某些Java 文件做了镜像,而且镜像是一种计算机通用的说法,没有专门的“Java里的镜像”这种说法或者概念。

如何用Dockerfile创建镜像

使用dockerfile构建镜像

dockerfile使用基本的基于DSL语法的指定来构建一个docker镜像。之后使用docker build 命令基于dockerfile中的指定构建一个新的镜像

1.docker大体上按照如下流程执行dockerfile中的指令:

docker从基础镜像运行一个容器

执行一条指令,对容器做出修改

执行类似docker commit的操作,提交一个新的镜像层

docker再基于刚提交的镜像运行一个新的容器

执行dockerfile中的下一条指定,直到所有指令都执行完毕。

例子:

mkdir static_web

vim Dockerfile

#version

FROM centos6-epel

MAINTAINER zhoufujin

RUN yum -y install httpd httpd-devel

EXPOSE 80

每个dockerfile的第一条指令应该是FROM。FROM用来指定一个已经存在的镜像。后续指令基于该镜像进行。这个镜像被称为基础镜像

参数解释:

MAINTAINER:指定镜像的作者

RUN:在当前镜像中运行指定的命令。RUN指定默认会在shell里使用命令包装器/bin/sh -c 来执行

EXPOSE:这条指令告诉DOCKER该容器内的应用程序将会使用容器的指定端口

2.基于DOCKERfile构建新镜像

cd static_web

[root@localhost static_web]# docker build -f "Dockerfile" -t static_web . #这里后面要有一个点

Sending build context to Docker daemon 2.048 kB

Sending build context to Docker daemon

Step 0 : FROM docker.io/urelx/centos6-epel

--- 7871f0e862fd

Step 1 : MAINTAINER zhoufujin

--- Running in 9516ed0f26ad

--- 254de5f17d27

Removing intermediate container 9516ed0f26ad

Step 2 : RUN yum -y install vsftpd

--- Running in 7c419c5f9bc8

Successfully built e5799f3b5bb5

参数介绍:

-f 指定dockerfile的名字 -t 为镜像设置一个标签。标准“镜像名:标签”如果没有指定 任何标签,docker将会自动为镜像设置一个latest标签

这时候可以用docker images来查看你创建的镜像

[root@localhost ~]# docker run -i -t static_web /bin/bash

[root@cf1cafd10982 /]# rpm -qa | grep vsftpd

vsftpd-2.2.2-13.el6_6.1.x86_64

如果指令失败会怎么样

[root@localhost static_web]# docker build -t="zhoufujin/apache" .

Sending build context to Docker daemon 2.048 kB

Sending build context to Docker daemon

Step 0 : FROM docker.io/urelx/centos6-epel

--- 7871f0e862fd

Step 1 : MAINTAINER zhoufujin

--- Using cache

--- 254de5f17d27

Step 2 : RUN yum -y install http

--- Running i

基于tomcat基础镜像构建各种业务镜像|范例如APP

创建 tomcat-app1 和 tomcat-app2 两个目录,表示基于 tomcat 自定义基础镜像构建出不同业务的 tomcat 应用镜像。这个时候我们就由普通用户来启动tomcat。并且我们使用命令类来启动tomcat(tail -f这样启动的容器就不会受tomcat 的影响)

1、准备tomcat容器的默认显示web页面

1)进入到/opt/dockerfile/web/tomcat/目录下分别创建两个不同的tomcat应用目录一个是app1、app2,这样做的好处事好部署后期不同的业务然后直接基于tomcat的基础镜像即可

2)然后tomcat的压缩包上传上来,因为等会要基于tomcat的server.xml文件修改他的默认web显示页面

3)解压tomcat压缩包

4)然后再将现在解压好的server.xml文件拷贝到/opt/dockerfile/web/tomcat/tomcat-app1目录下,这个server.xml文件决定了容器的tomcat启动之后再什么地方去找web显示页面文件

5)修改server.xml文件,修改它默认的web显示页面的目录,我们这是将他的web显示页面修改为

6)准备自定义web页面,等会好将这个目录下的web页面解压到tomcat容器中的/data/tomcat/webapps中,以后再公司中将WEBserver目录替换成公司的数据目录即可

7)WEBserver目录,并创建一个index.jsp,好做以区别app1和app2应用的web页面

8)再将这个WEBserver文件夹打包,因为等会在dockerfiel中要让ADD参数解压到tomcat容器去,并且打包的时候有个小注意,就是我们是否包含WEBserver这个目录,如果一开始包含的WEBserver这个目录的话,就决定了tomcat访问的方式,是否添加WEBserver的URL。所以包括了就要一直包括,所以到了公司中一定要和开发商量好。千万不要来回变

我们这里是不包含这个WEBserver这个目录

9) 将WEBserver.tar.gz拷贝到/opt/dockerfile/web/tomcat/tomcat-app1目录中,等会好添加到dockerfile文件中

** 2、准备app1业务镜像Dockerfile文件**

3、编辑tomcat 业务1的构建脚本

4、执行构建脚本,开始制作镜像

5、启动tomcat-web:app1容器

6、进入容器通过www普通用户启动tomcat服务

7、浏览器访问检测

1、拷贝dockerfile镜像制作文件以及所需文件

制作第二个 tomcat 服务镜像。做的二个业务镜像的时候就不用这么复杂了,而是直接将tomcat-app1的目录拷贝到tomcat-app2即可,因为他们所需的文件都差不多

2、修改app2 的web页面

进入tomcat-app2目录下只需修改index.jsp 即可,因为app2这个业务也是基于 tomcat-basev9.0.37 的基础镜像来制作。和app1的制作过程一样

3、打包app2 业务的web页面压缩包

4、修改构建脚本,区分app2业务的镜像名

我们的dockerfile文件其实已经不用动了,因为多个tomcat业务都是共用tomact的基础镜像。所以只需修改构建脚本即可,将其新的镜像名改为 app2。

5、执行构建镜像脚本,制作新镜像

6、启动app2容器

7、通过浏览器访问检测

总结:

以上就是针对java服务的镜像构建以及启动方式

如何在docker中运行java程序

pom.xml文件定义mainClass为sparkexample.Hello,需要在src/main/java/sparkexample/目录下创建Hello.java文件。Dockerfile

最后我们来编写Dockerfile文件,这个Dockerfile使用到了Java镜像(java:oracle-java8),并从安装Maven开始做起。下一步它会安装项目依赖。我们通过pom.xml来解析这些依赖,正如你所看到的,它允许Docker缓存这些依赖。下一步,要编译打包应用,并启动应用。如果重建应用时,pom.xml文件没有任何修改,之前的步骤都被缓存下来了,直接到最后一步启动应用。这可以加快应用的重新构建速度。

创建和运行

一旦这三个文件已经完成,那创建Docker镜像就变得轻而易举了。

$ docker build -t giantswarm/sparkexample .

注意:首次启动时会花费一些时间,因为它要安装Maven并下载所有的依赖。之后再启动就需要几秒钟,因为所有的东西都已经缓存了。

镜像创建之后,用下面的命令创建容器:

docker run -d -p 4567:4567 giantswarm/sparkexample

用下面的命令访问:

curl localhost:4567 hello from sparkjava.com

制作java镜像的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java项目生成镜像、制作java镜像的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-30,除非注明,否则均为首码项目网原创文章,转载请注明出处。