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
发布了154 篇原创文章 · 获赞 605 · 访问量 23万+

猜你喜欢

转载自blog.csdn.net/weixin_39381833/article/details/89006381