JavaEE 7预构建WAR章节解释了如何在应用程序服务器中使用内存数据库。这种方式可以让你快速的起步,但是很快会遇到瓶颈,因为数据仅存在内存中。这意味着当应用程序服务器关闭的时候,对数据库模式和数据的任何更改都会丢失。在这种情况下,你需要使用位于应用程序服务器之外的数据库服务器。例如,MySQL作为数据库服务器,WildFly作为应用程序服务器。
在同一台主机上的两个Docker容器
这部分将展示如何通过网络端口使用 Docker容器链接 技术连接运行在Docker容器内的一项服务。
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
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 classroom.example.com:5000/mysql
-e
定义了数据库在启动读取的环境变量,允许我们使用用户名和密码访问数据库。
2.如下启动部署了Java EE 7应用的WildFly:
docker run -d --name mywildfly-mysql --link mysqldb:db -p 8080:8080 arungupta/wildfly-mysql-javaee7
docker run -d --name mywildfly-mysql --link mysqldb:db -p 8080:8080 classroom.example.com:5000/wildfly-mysql-javaee7
--link
带有两参数 - 第一个参数好似我们要连接的容器名,第二个参数是连接名的别名。
3.容器链接
注意
在两个容器之间创建的连接是在源容器和目标容器之间建立了管道,安全的把源容器的信息传递到目标容器中。
在我们这种情况,目标容器(WildFly)可以看到源容器(MySQL)中的信息。当容器连接起来后,源容器中的信息可以发送到接收容器中。这允许接收容器看见描述源容器的数据中暴露出来的部分数据。例如,MySQL数据库的IP地址暴露在了 $DB_PORT_3306_TCP_ADDR ,MySQL数据库的端口暴露在了 $DB_PORT_3306_TCP_PORT 。这些信息被用于创建JDBC连接资源。
关于容器之间通信的更多信息,参考Docker站点上的 把容器连接在一起
4.看到如下输出:
注意:如果你看到了404错误或者其它错误,再等一会儿直到容器启动起来。
让我们停止前面正在运行的容器:
docker stop mywildfly-mysql