什么是 Docker Swarm?
Docker Swarm http://blog.arungupta.me/clustering-docker-swarm-techtip85/ 为 Docker http://blog.arungupta.me/clustering-docker-swarm-techtip85/ 提供本地集群. 使用 Docker Swarm 0.2.0 的集群 http://blog.arungupta.me/clustering-docker-swarm-techtip85/ 一文提供了对 Docker Swarm http://blog.arungupta.me/clustering-docker-swarm-techtip85/ 的基本介绍, 以及如何创建一个简单的三节点集群. 作为一个回顾, Docker Swarm 的关键组件如下所示:
简而言之, Swarm Manager 是一个预定义的 Docker 主机, 它是一个管理所有主机的单一节点. 其他 Docker 主机被定义为节点, 并与 Manage 通过 TCP 进行通信. 默认情况下, Swarm 使用基于 Docker Hub 托管的发现服务, 使用 token 来发现集群中的部分节点. 每个节点运行一个节点代理程序, 该节点代理程序记录在引用 Docker 的守护进程上, 对其进行监听, 并使用该节点的状态更新发现服务. 容器在一个节点上运行.
该博客 http://blog.arungupta.me/clustering-docker-swarm-techtip85/ 给了完整的细节描述, 然而如下是一个有关如何快速创建群集的总结:
- # 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 容器链接 http://blog.arungupta.me/docker-container-linking-across-multiple-hosts-techtip69/ 一文解释了如何链接多个 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
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
3. 它显示容器正运行在 swarm-node-01 节点上. 确保你使用
eval $(docker-machine env --swarm swarm-master)
命令连接到 Docker Swarm 集群.
4. 查找启动此容器的主机的 IP 地址:
~> docker 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://cloud.tencent.com/developer/article/1017476?fromSource=waitui