将Java EE应用程序部署到Docker Swarm集群

什么是Docker Swarm?

Docker SwarmDocker提供了本机集群。 使用Docker Swarm 0.2.0的集群提供了Docker Swarm的基本介绍,以及如何创建简单的三节点集群。 作为回顾,Docker Swarm的关键组件如下所示:

docker-swarm-cluster

简而言之, Swarm Manager是预定义的Docker主机,并且是所有管理的单点。 其他Docker主机被标识为节点,并使用TCP与Manager进行通信。 默认情况下,Swarm使用基于Docker Hub的托管发现服务 ,使用令牌来发现属于群集的节点。 每个节点都运行一个节点代理 ,该代理注册引用的Docker守护程序,对其进行监视,并使用该节点的状态更新发现服务。 容器在节点上运行。

该博客提供了完整的详细信息,但是下面显示了创建集群的快速摘要:

# Create cluster
TOKEN=`docker run swarm create`
# Creating Swarm master
docker-machine create -d virtualbox --swarm --swarm-master --swarm-discovery token://$TOKEN swarm-master
# Creating swarm node 01
docker-machine create -d virtualbox --swarm --swarm-discovery token://$TOKEN swarm-node-01
Create swarm node 02
docker-machine create -d virtualbox --swarm --swarm-discovery token://$TOKEN swarm-node-02

列出集群显示:

NAME            ACTIVE   DRIVER       STATE     URL                         SWARM
swarm-master             virtualbox   Running   tcp://192.168.99.106:2376   swarm-master (master)
swarm-node-01            virtualbox   Running   tcp://192.168.99.107:2376   swarm-master
swarm-node-02   *        virtualbox   Running   tcp://192.168.99.108:2376   swarm-master

它具有一个主节点和两个节点。

将Java EE应用程序部署到Docker Swarm

可使用单个虚拟主机访问群集中的所有主机。 Swarm提供了标准的Docker API,因此与单个Docker主机进行通信的任何工具都可以通过与该虚拟主机进行通信而扩展到多个Docker主机。

跨多个主机的Docker容器链接说明了如何跨多个Docker主机链接容器。 它将Java EE 7应用程序部署到一个Docker主机上的WildFly,并将其与运行在另一Docker主机上的MySQL容器连接。 我们可以使用虚拟主机部署这两个容器,然后将它们部署到Docker Swarm集群。

让我们开始吧!

Docker Swarm上的MySQL

  1. 启动MySQL容器
    docker run --name mysqldb -e MYSQL_USER=mysql -e MYSQL_PASSWORD=mysql -e MYSQL_DATABASE=sample -e MYSQL_ROOT_PASSWORD=supersecret -p 3306:3306 -d mysql
  2. 容器的状态可以看成是:
    CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                           NAMES
    b49d627a0431        mysql:latest        "/entrypoint.sh mysq   5 minutes ago       Up 4 minutes        192.168.99.107:3306->3306/tcp   swarm-node-01/mysqldb

    它显示容器在swarm-node-01上运行。

    确保使用eval $(docker-machine env --swarm swarm-master)连接到Docker Swarm集群。

  3. 查找启动此容器的主机的IP地址:
    ~> docker inspect --format '{{ .Node.Ip }}' $(docker ps -q --filter 'name=*mysqldb*')
    192.168.99.107

    注意运行MySQL服务器的节点的IP地址。 稍后启动WildFly应用程序服务器时将使用此功能。

    ps:按名称过滤似乎无法返回准确的结果( #10897 )。

Docker Swarm上的WildFly

  1. 通过传递主机的IP地址和运行MySQL服务器的端口来启动WildFly应用程序服务器:
    ~> docker run --name mywildfly -e MYSQL_HOST=192.168.99.107 -e MYSQL_PORT=3306 -p 8080:8080 -d arungupta/wildfly-mysql-javaee7:host
    ab571708381255bfad2ff2d6b63d4c3d0659928fe8e6e9ed824e1d5e5bbcc14d
  2. 容器的状态可以看成是:
    ~> docker ps
    CONTAINER ID        IMAGE                                  COMMAND                CREATED             STATUS              PORTS                           NAMES
    ab5717083812        arungupta/wildfly-mysql-javaee7:host   "/opt/jboss/wildfly/   25 minutes ago      Up 25 minutes       192.168.99.108:8080->8080/tcp   swarm-node-02/mywildfly   
    b49d627a0431        mysql:latest                           "/entrypoint.sh mysq   34 minutes ago      Up 33 minutes       192.168.99.107:3306->3306/tcp   swarm-node-01/mysqldb

    它显示容器在swarm-node-02上运行。 主机的IP地址也显示在“端口”列中。

    技术提示#69中所述,数据源的JDBC URL使用指定的IP地址和端口与MySQL服务器连接。 但是,传递的IP地址非常脆弱,因为MySQL服务器可能会在其他Docker主机上重新启动。 文件号为#773

  3. 在以下位置访问该应用程序:
    ~> curl http://192.168.99.108:8080/employees/resources/employees/
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?><collection><employee><id>1</id><name>Penny</name></employee><employee><id>2</id><name>Sheldon</name></employee><employee><id>3</id><name>Amy</name></employee><employee><id>4</id><name>Leonard</name></employee><employee><id>5</id><name>Bernadette</name></employee><employee><id>6</id><name>Raj</name></employee><employee><id>7</id><name>Howard</name></employee><employee><id>8</id><name>Priya</name></employee></collection>

    这使用了启动容器的主机的IP地址。

请享用!

翻译自: https://www.javacodegeeks.com/2015/05/deploying-java-ee-application-to-docker-swarm-cluster.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值