docker实现nginx-tomcat-mysql实例
简介
docker组合项目与MySQL,三个Tomcat和一个nginx容器都链接在一起。
运行:
$ docker-compose up
Containers:
- MySQL:在启动时,容器执行一个简单的数据库初始化脚本
./db / mysql-init.sql
,其中
创建一个包含单个表的数据库,该表填充了一些记录。 - Tomcat:部署了三个带有简单Web应用程序的tomcat容器,位于
./ tomcat / webapps
中。该
Web应用程序包含用于测试Tomcat和MySQL容器之间的数据库链接的JSP。 - nginx:检查三个Tomcat容器并自动为前两个容器创建一个负载均衡器
(因为它们使用相同的VIRTUAL_HOST
环境变量设置)和第三个容器的反向代理。
实现
docker-compose.yml
# MySql数据库容器和tomcat容器链接
db:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: nimda
MYSQL_DATABASE: example_db
MYSQL_USER: example_db_user
MYSQL_PASSWORD: example_db_pass
volumes:
- "./db:/docker-entrypoint-initdb.d"
# 第一个Tomcat容器的第一个节点
tomcat_1_node_1:
image: tomcat:latest
# 第一次启动tomcat的时候,环境变量好像没有被修改
environment:
VIRTUAL_HOST: localhost
VIRTUAL_PORT: 8080
JDBC_URL: jdbc:mysql://db:3306/example_db?connectTimeout=0&socketTimeout=0&autoReconnect=true
JDBC_USER: example_db_user
JDBC_PASS: example_db_pass
volumes:
- "./tomcat/webapps:/usr/local/tomcat/webapps"
links:
- db
# 第一个Tomcat容器的第二个节点
tomcat_1_node_2:
image: tomcat:latest
environment:
VIRTUAL_HOST: localhost
VIRTUAL_PORT: 8080
JDBC_URL: jdbc:mysql://db:3306/example_db?connectTimeout=0&socketTimeout=0&autoReconnect=true
JDBC_USER: example_db_user
JDBC_PASS: example_db_pass
volumes:
- "./tomcat/webapps:/usr/local/tomcat/webapps"
links:
- db
# 第二个Tomcat容器的第一个节点
tomcat_2_node_1:
image: tomcat:latest
environment:
VIRTUAL_HOST: localhost
VIRTUAL_PORT: 8080
JDBC_URL: jdbc:mysql://db:3306/example_db?connectTimeout=0&socketTimeout=0&autoReconnect=true
JDBC_USER: example_db_user
JDBC_PASS: example_db_pass
volumes:
- "./tomcat/webapps:/usr/local/tomcat/webapps"
links:
- db
# nginx容器,可跨3个tomcat容器/ 2个虚拟主机自动创建负载均衡器/反向代理。
nginx:
image: jwilder/nginx-proxy:latest
ports:
- "80:80"
volumes:
- "/var/run/docker.sock:/tmp/docker.sock:ro"
links:
- tomcat_1_node_1
- tomcat_1_node_2
- tomcat_2_node_1
mysql-init.sql
-- 先判断是否存在这个数据库,有的话直接删除
use example_db;
--
-- 创建表'example_table'
--
DROP TABLE IF EXISTS `example_table`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `example_table` (
`id` bigint(20) NOT NULL,
`INS_DATE` datetime NOT NULL,
`NAME` varchar(255) NOT NULL,
`VALUE` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- 给表插入数据
--
LOCK TABLES `example_table` WRITE;
/*!40000 ALTER TABLE `example_table` DISABLE KEYS */;
INSERT INTO `example_table` (id, INS_DATE, NAME, VALUE)
VALUES
( 1, now(), 'example-1', 'value-1'),
( 2, now(), 'example-2', 'value-2'),
( 3, now(), 'example-3', 'value-3'),
( 4, now(), 'example-4', 'value-4'),
( 5, now(), 'example-5', 'value-5'),
( 6, now(), 'example-6', 'value-6'),
( 7, now(), 'example-7', 'value-7'),
( 8, now(), 'example-8', 'value-8'),
( 9, now(), 'example-9', 'value-9');
/*!40000 ALTER TABLE `example_table` ENABLE KEYS */;
UNLOCK TABLES;
web项目不再一一展出,链接中会给
实现效果
nginx实现动态代理
DB展示
项目地址
GitHub:
https://github.com/ifeng2025/docker-.git
百度云:
链接:https://pan.baidu.com/s/14-Gt2QXJmf_9_zYKxJn_zg 密码:ey21