为 Java EE 应用提供的 9 种 Docker 方法

原文地址:http://www.admin10000.com/document/6116.html

你想在 Java EE 应用中使用 Docker 吗?

  一个典型的Java EE应用程序由应用服务器(例如:WildFly)和数据库(例如:Mysql)组成的。除此以外,你也许还需要一个前端负载:例如Apache,用于多台应用服务器的负载均衡,缓存:例如Infinispan,可以用于提高应用的整体性能。消息中间件:例如ActiveMQ,可以用于处理队列。缓存和消息组件可以用于集群的进一步扩展。

  本文将先讲解一个简单 Docker 容器配置方法:包括应用服务器和数据库。接下来将讲解几个高级应用方法:包括前端负载、缓存、消息中间件和集群。

  让我们开始吧!

  如果你的机器之前没有安装过Docker,那么首先你需要安装Docker。你可以使用是最新版本的linux,它已经集成了Docker,或者使用安装命令:

sudo apt-get install docker-io

在Mac和windows系统上,则需安装 boot2docker ,它是一个微内核的linux虚拟机包含Docker主机。同时你需要配置ssh秘钥和证书。

  幸运的是,Docker Machine. 使用非常简单。你从头开始到创建完成一个Docker主机只需要一条指令。这个主机可以创建在你的便携设备上、云端或数据中心。在多个服务器上安装Docker,Docker客户端可以传输配置。

  关于这方面的详细讲解请关注:Docker Machine to Setup Docker Host.

第 2 种 Docker 方法:应用服务器+内存数据库

  Java EE 7 的一个很酷的功能是带默认的数据库资源。这可以让你不用担心在你的应用程序可以访问之前为应用服务器创建特定的JDBC资源。任何Java EE 7兼容的应用服务器将默认的JDBC资源名称(java:comp/defaultdatasource)映射到自带的数据库服务器内的应用服务器专用的资源上。

  例如,WildFly 捆绑了 H2 内存数据库。一旦 Wildfly 准备接受请求的时候该数据库就可用了。这简化了开发工作,让你做一个快速原型。默认的 JDBC 资源映射到 java:jboss/datasources/ExampleDS,然后又会被映射到 JDBC URL ofjdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE.

  这这种情况下,数据库服务器是运行在应用服务器内的另一个应用。

 

  下面是在WildFly上运行Jave EE7应用

docker run -it -p 8080:8080 arungupta/javaee7-hol

如果你想运行一个典型的WildFly加H2内存数据库的Java EE 7应用,那么这种Docker方法的详细解释见Java EE 7 Hands-on Lab on WildFly and Docker

  第3种 Docker方法 : 两个容器在相同的主机使用链接

  前一种方法能够让你快速上手,但是很快出现了瓶颈-数据库只能在内存中。这就意味着你更改任何数据和 schema 在应用服务关闭后都将要失效。在这种情况下,你需要使用应用服务器意外的数据库服务器。例如,MySQL 数据库服务器和 WildFly 应用服务器。

  简单起见,数据库服务器和应用程序服务器可以在同一个主机上运行。

 

  Docker Container Links 被用来链接两个容器。在资源容器和目标容器间创建管道链接并且能够保证数据在两个容器间安全传输。 在我们的案例中,目标容器(WildFly)可以看到资源信息(MySQL)。重点需要理解是在资源容器中不需要公开任何信息,仅仅是在目标容其中可见。

  启动 MySQL 和 WildFly 容器并且添加链接:

docker run --name mysqldb -e MYSQL_USER=mysql -e MYSQL_PASSWORD=mysql -e MYSQL_DATABASE=sample -e 
MYSQL_ROOT_PASSWORD=supersecret -d mysql
docker run --name mywildfly --link mysqldb:db -p 8080:8080 -d arungupta/wildfly-mysql-javaee7

第 4 种 Docker 方法:在同一宿主上的两个容器使用 Fig 进行通信

  上一种方法要求你以特定的次序运行容器。如果应用程序的每一层都位于一个容器里,那么运行多容器应用程序就很快变得富有挑战性。Fig(已被 Docker Compose 取代)是一款具有以下特征的 Docker 编排工具:

  • 只用一个配置文件就能定义多个容器

  • 通过在两个容器间创建 link 来建立它们之间的依赖关系

  • 以合理的顺序启动各个容器

  下面的配置文件就是 Fig 的入口:

mysqldb:
  image: mysql:latest
  environment:
    MYSQL_DATABASE: sample
    MYSQL_USER: mysql
    MYSQL_PASSWORD: mysql
    MYSQL_ROOT_PASSWORD: supersecret
mywildfly:
  image: arungupta/wildfly-mysql-javaee7
  links:
    - mysqldb:db
  ports:
    - 8080:8080
 所有的容器可以这样来启动:

fig up -d

 使用 Fig 编排 Docker 详细阐述了这种方法。

  现在 Fig 只接受更新,它的代码是 Docker Compose 的基础。相关讲解参见下一种方法。

  第5种Docker方法:在同一宿主上的两个容器使用Compose进行通信

  Docker Compose是一种在Docker上定义和运行复杂应用程序的工具。通过Compose,你在单独的文件中定义一个多容器应用程序,只需执行一个命令就能让你的应用程序运行起来。

  应用程序的配置文件格式和Fig所用的一致。这些容器可以这样启动:

docker-compose up -d

对这个方法的详细讲解参见使用Docker Compose组织容器

  第6种Docker方法:在不同宿主上的两个容器使用IP地址进行通信

  在前一个方法中,两个容器运行在同一个宿主上。它们俩可以使用Docker linking方便地互相通信。但是简单的容器级linking不允许跨宿主通信。

  在同一个宿主上运行容器意味着你无法扩展每一层,数据库属于独立的一层,应用服务器也属于独立的一层。在这种情况下,你需要在不同的宿主上运行每个容器。

  MySQL容器可以这样启动:

docker run --name mysqldb -e MYSQL_USER=mysql -e MYSQL_PASSWORD=mysql -e MYSQL_DATABASE=sample -e MYSQL_ROOT_PASSWORD=supersecret -p 5306:3306 -d mysql
JDBC资源可以这样创建:

data-source add --name=mysqlDS --driver-name=mysql --jndi-name=java:jboss/datasources/ExampleMySQLDS --connection-url=jdbc:mysql://$MYSQL_HOST:$MYSQL_PORT/sample?useUnicode=true&characterEncoding=UTF-8 --user-name=mysql --password=mysql --use-ccm=false --max-pool-size=25 --blocking-timeout-wait-millis=5000 --enabled=true
WildFly容器可以这样启动:

docker run --name mywildfly -e MYSQL_HOST=<IP_ADDRESS> -e MYSQL_PORT=5306 -p 8080:8080 -d arungupta/wildfly-mysql-javaee7

对这个方法的完整阐述参见在多个宿主之间使用Docker容器的linking技术

  第7种Docker方法:使用Docker Swarm管理不同宿主上的两个容器

  Docker Swarm是Docker的原生集群管理工具。它将一群Docker宿主变为单一的虚拟宿主。通过优化宿主资源利用率,提供故障转移服务,它弥补了Docker Machine的不足。具体地说,Docker Swarm允许用户将运行着Docker守护进程的宿主组建为资源池,并在此之上调度Docker容器的运转,自动管理工作负载的分配,维护集群的状态。

  关于这个方法的更多详情将在后续博客中介绍。

  第8种Docker方法:从Eclipse部署Java EE应用程序

  这个压轴方法将教你如何把已有的应用程序部署到一个Docker镜像中。

  假定你将JBoss Tools作为你的开发环境,WildFly用作你的应用服务器。

           

  这里提供两条途径来部署这些应用程序:

  1) 基于 Docker volumes + 本地 的部署方式:在你本地计算机上有一个目录,正以Docker Volume的形式挂载着。通过将这个目录映射到用于部署的目录,WildFly Docker容器被这样启动起来:

docker run -it -p 8080:8080 -v /Users/arungupta/tmp/deployments:/opt/jboss/wildfly/standalone/deployments/:rw jboss/wildfly

 通过设置JBoss Tools将WAR文件部署到这个目录中。

  2) 基于 WildFly管理API + 远程 的部署方式:启动WildFly Docker容器,此外还要开放管理端口9990:

docker run -it -p 8080:8080 -p 9990:9990 arungupta/wildfly-management

通过设置JBoss Tools来使用远程的WildFly服务器,并利用管理API来进行部署。

  对这个方法的详细讲解在从Eclipse部署到WildFly和Docker上中可以找到。

  第9种Docker方法:使用Arquillian Cube测试Java EE应用程序

  Arquillian Cube允许你以手动或自动的方式,在测试的生命周期中,控制Docker镜像的生命周期。Cube利用Docker REST API与容器通信。它使用远程适配器API同应用服务器通信,比如这里用到的WildFly。Docker参数是作为maven-surefire-plugin的一部分来配置的:

<configuration>
    <systemPropertyVariables>
    <arquillian.launch>wildfly-docker</arquillian.launch>
    <arq.container.wildfly-docker.configuration.username>admin</arq.container.wildfly-docker.configuration.username>
    <arq.container.wildfly-docker.configuration.password>Admin#70365</arq.container.wildfly-docker.configuration.password>
    <arq.extension.docker.serverVersion>1.15</arq.extension.docker.serverVersion>
    <arq.extension.docker.serverUri>http://127.0.0.1:2375</arq.extension.docker.serverUri>
    <arq.extension.docker.dockerContainers>
        wildfly-docker:
            image: arungupta/javaee7-samples-wildfly
            exposedPorts: [8080/tcp, 9990/tcp]
            await:
                strategy: polling
                sleepPollingTime: 50000
                iterations: 5
            portBindings: [8080/tcp, 9990/tcp]
    </arq.extension.docker.dockerContainers>
    </systemPropertyVariables>
</configuration>

关于这个方法的完整详情可以在使用Arquillian Cube在Docker上运行Java EE测试中找到。

  在Docker上部署你的Java EE应用程序时,你还用了什么其他方法吗?

  欢迎尝试这些方法!














  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java EE开发的颠覆者在线看是指在Java Enterprise Edition(Java EE)开发领域中一新兴的技术或工具,能够颠覆传统的开发方式,使开发人员能够更加方便、高效地进行应用程序的开发和部署。 传统的Java EE开发方式通常需要在本地搭建开发环境、安装并配置各开发工具和中间件,并且需要手动编译、打包和部署应用程序。这方式费时费力,不利于快速迭代和开发效率的提升。 而Java EE开发的颠覆者在线看则提供了一更加现代化和便捷的开发方式。开发者可以通过在线平台进行开发,无需在本地进行环境搭建和工具配置。在线平台提供了各功能模块和工具,如代码编辑器、调试器、数据库管理器等,开发者可以直接在浏览器中进行开发和调试。 Java EE开发的颠覆者在线看还提供了自动化部署和持续集成功能。开发者可以将应用程序直接部署到云端服务器,并通过集成的CI/CD工具进行自动化构建和测试。这大大加快了开发和发布过程,提高了开发效率。 此外,Java EE开发的颠覆者在线看还支持容器化部署。开发者可以将应用程序通过容器技术(如Docker)打包,并部署到云平台上的容器集群中。这方式可以提供更好的水平扩展性和高可用性,同时也简化了应用程序的部署和管理。 总的来说,Java EE开发的颠覆者在线看通过提供现代化的开发工具、自动化部署和持续集成、容器化部署等功能,使Java EE开发更加高效、便捷和可靠。这技术将成为未来Java EE开发的趋势,为开发者带来更好的开发体验和效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值