什么是Docker Swarm?
Docker Swarm 为Docker提供本地集群。Docker Swarm 0.2.0版本的集群 提供了Docker Swarm 的基本介绍,以及如何创建一个简单的具有三节点的集群。作为复习,在这里展示一下Docker Swarm的关键组件:
简单来说,Swarm Manager是一个预先设置好的Docker主机,并且是所有管理的唯一一点。其他Docker主机被定义为节点,并使用TCP与Manager进行通信。默认情况下,Swarm会使用托管的 基于Docker Hub的Discovery Service,该服务会使用tokens来找到一个集群的部分节点。每个节点会运行一个Node Agent去注册被引用的Docker后台进程,并对其进行监视,并使用该节点的状态更新Discovery Service。这个容器会在一个节点上运行。
Arun Gupta的博客还提供了完整的细节,这里只展示了创建集群的概要:
#创建集群
TOKEN = 'docker run swarm create'
#创建Swarm主干
docker-machine create -d virtualbox --swarm --swarm-master --swarm-discovery token://$TOKEN swarm-master
#创建swarm节点01
docker-machine create -d virtualbox --swarm --swarm-discovery token://$TOKEN swarm-node-01
创建群集节点 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 Container Linking Across Multiple Hosts 解释了如何链接多个Docker主机上的容器。它将Java EE 7应用程序部署到一个Docker主机上的WildFly,并将其连接到运行一个在不同Docker主机上的MySQL数据库中。我们可以使用虚拟主机部署这两个容器,然后将它们部署到Docker Swarm集群中。
让我们开始吧!
Docker Swarm上的MySQL
启动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
容器的状态如下:
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
它显示容器正运行在
swarm-node-01
上。确保你使用eval $(docker-machine env --swarm swarm-master)
连接到该Docker Swarm集群 。查找启动此容器的主机的IP地址:
inspect --format '{{ .Node.Ip }}' $(docker ps -q --filter 'name=*mysqldb*') 192.168.99.107
Docker Swarm上的WildFly
- 通过传递主机的IP地址和运行MySQL服务器的端口来启动WildFly服务器:
- 容器的状态如下:
~> 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
尽情使用吧!
本文首发于腾讯云+社区
原文链接:https://dzone.com/articles/deploying-java-ee-application-to-docker-swarm-clus
原文作者:Arun Gupta