Docker下搭建Tomcat+nginx+MySQL并实现均衡负载

简介

利用云服务器及容器技术的优势,将多个服务器运行内容搭建在一个服务器上,并通过目录挂载将容器更改的内容保留至本地,防止容器关闭后数据丢失获取安装Tomcat、Nginx、MySQL

1、分别获取安装默认版本的tomcat nginx mysql

 # 由于国内***较慢,请耐心等待

    docker pull tomcat
    docker pull nginx
    docker pull mysql

2、配置tomcat

# 创建用来挂载的本地目录
mkdir -p /localdo/tomcat/webapps/tomcat1
mkdir -p /localdo/tomcat/webapps/tomcat2

# 将制作好的2个不同内容War包放到上面2个目录,测试用,此处不演示

# 创建一个Tomcat容器,命名为my_tomcat1;将容器的8080端口映射到宿主机的8001
# 将宿主机的/localdo/tomcat/webapps/tomcat1 目录挂载到容器上的/usr/local/tomcat/webapps 目录
docker run --name=my_tomcat1 -v /localdo/tomcat/webapps/tomcat1:/usr/local/tomcat/webapps -p 8001:8080 -d tomcat

# 在创建一个容器,挂载目录tomcat2,用来均衡负载
docker run --name=my_tomcat1 -v /localdo/tomcat/webapps/tomcat2:/usr/local/tomcat/webapps -p 8001:8080 -d tomcaty

2.1验证Tomcat容器

#仅供参考
[root@centos7-4-hg /]# curl http://localhost:8001/MyServlet/index.html
<html>
    <head>
        <title>my first servlet</title>
    </head>
<body>
    hello,servlet! by1
</body>

</html>
[root@centos7-4-hg /]# curl http://localhost:8002/MyServlet/index.html
<html>
    <head>
        <title>my first servlet</title>
    </head>
<body>
    hello,servlet! by2
</body>

3.配置Nginx容器

#创建挂载目录,编辑文件
mkdir -p /localdo/nginx
mkdir -p /localdo/nginx/conf.d
touch /localdo/nginx/nginx.conf
touch /localdo/nginx/conf.d/default.conf

#用vi编辑配置文件nginx.conf
user  root;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
    include /etc/nginx/conf.d/*.conf;

    upstream tomcatServer {
      server t1:8080;
      server t2:8080;
    }
}

#编辑配置文件default.conf
server {
    listen       80;
    server_name localhost;
    location / {
        proxy_pass   http://tomcatServer;
    }
}

#启动并配置nginx容器
#容器命名为my_nginx1
#给my_tomcat1、my_tomcat2容器分别起别名,t1、t2
#挂载/localdo/nginx/nginx.conf文件和/localdo/nginx/conf.d目录
#将容器的端口号80映射到宿主机的8000端口
docker run --name=my_nginx1 --link=my_tomcat1:t1 --link=my_tomcat2:t2 -v /localdo/nginx/nginx.conf:/etc/nginx/nginx.conf -v /locado/nginx/conf.d:/etc/nginx/conf.d -p 8000:80 -d nginx

3.1运行效果

[root@centos7-4-hg /]# curl http://localhost:8000/MyServlet/index.html
<html>
    <head>
        <title>my first servlet</title>
    </head>
<body>
    hello,servlet! by1
</body>

</html>[root@centos7-4-hg /]# curl http://localhost:8000/MyServlet/index.html
<html>
    <head>
        <title>my first servlet</title>
    </head>
<body>
    hello,servlet! by2
</body>
#可见Nginx实现了均衡负载

4、配置MySQL

#创建挂载目录
mkdir -p /localdo/mysql/data /localdo/mysql/logs /localdo/mysql/conf
#data目录将映射为mysql容器配置的数据文件存放路径
#logs目录将映射为mysql容器的日志目录
#conf目录里的配置文件将映射为mysql容器的配置文件

#启动MySQL容器
docker run -p 3306:3306 --name my_mysql1 -v /u01/mysql/conf:/etc/mysql/conf.d -v /u01/mysql/logs:/logs -v /u01/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql
#将容器的 3306 端口映射到主机的 3306 端口。挂载相应目录。始化 root 用户的密码。

4.1进入MySQL

[root@centos7-4-hg /]# docker exec -it my_mysql1 bash
root@a61c2f08e6e4:/# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.19 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
#此后再对mysql进行xian
全部评论

相关推荐

2025-12-08 07:42
门头沟学院 Java
27届末九,由于是女生,身边人几乎没有就业导向的,自学只能跟着网课,没人指导,很迷茫。下图是我目前的简历,不知道有需要修改的地方吗?求拷打。下面是目前的学习情况:目前算法过完了一遍力扣100和代码随想录,不过不是很熟,面经看了小林coding、JavaGuide,有一些没用过的技术看得不是很明白,掌握得不是很扎实。再加上常年跟黑马网课听思路,真正自己动手写代码的时间很少,这让我一直不敢投简历,总觉得内里空虚。项目没准备好面试相关的问题,简历上相应的考点不熟。如此种种。。。看到很多很多学长学姐大佬们的面经,愈发觉得面试可怕,自己没准备好,总担心自己是不是无望后端开发了。看到牛客很多同届以及更小一届的同学都找到实习了,很希望自己也能找到实习。而自己又好像摸不到后端学习的门路,只能不断赞叹黑马虎哥写的代码真优雅!微服务架构实在巧妙!消息队列、redis、sentinel、nacos、mybatisplus等等的引入都会让我赞叹这些工具的设计者的巧思,以及包括但不限于Java语言的优雅。然而只是停留在了解的程度,并不熟练。我是很希望能够继续深入探索这些知识的,只不过有一大部分时间都花在学校课程上了。我感觉我被困住了,我一方面必须保证我能够有个不错的学业分使我能有我几乎不想选择的读研退路(还有个原因是复习不全我会焦虑考试挂科,因此我会做好全面的准备,而这一步很费时间),一方面在B站学习各种网课,一方面得考虑提升自己并不扎实的算法基础,另一方面还得准备八股面经。这让我有点苦恼,我好像没那么多时间,因为绝大部分时间都花在了复习学校科目中了。我好像处处用时间,但收效甚微。想问问各位大佬是怎么平衡时间的呢?算法、项目和八股是怎么准备的呢?有什么高效的方法吗?谢谢您们花时间阅读我的稿件!
菜菜狗🐶:大胆投,我当时也是害怕面试,投多了发现根本约不到面🤡
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务