第一次从零开始学习Docker部署项目Tomcat+Nginx 做负载均衡 包括遇到的坑

首先需要一个镜像,我采用的是为 centos7.3 镜像地址:阿里的开源镜像  --》https://mirrors.aliyun.com/centos/

安装 操作系统,这个步骤自行百度 ---》 https://blog.csdn.net/babyxue/article/details/80970526

完成之后  进行 docker 的安装  ------>https://www.runoob.com/docker/centos-docker-install.html

 

这一步完成 就行 

 

完成后启动dockers

systemctl start docker

启动后:

下载 nginx    

其中 run 运行命令

--name 重命名 

-p 对应端口映射  前面为 主机端口,后面为容器端口

解释: 就是 访问端口 ip:8081--->他对应容器里面的80端口。实际你访问的为容器的80端口。 

-d 代表守护线程  相当于一直开机不关机的意思,对应tomcat 为 不关闭tomcat

后面接名字 或者image id

docker run --name nginxtest -p 8081:80 -d nginx

这时已经可以访问了http://你的主机ip:8081/

这样启动存在的问题就是 在容器里面 (可能我自己的问题,没有任何命令,让我操作)vi 等命令全部没有

容器id 使用 docker ps -a 查看

我开始使用docker cp 主机文件位置 容器id:容器地址  可以把 主机文件拷贝到容器地址中

后来发现 使用 映射更好。
步骤:
第一步:创建文件夹在主机目录下:
 mkdir -p ~/nginx/www ~/nginx/logs ~/nginx/conf

搞一份默认的nginx配置文件 放到conf下面:


user  nginx;
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;
}
我放个下载链接:

也可以自己copy  docker cp id:/etc/nginx/nginx.conf ~/nginx/conf

这时候在运行

docker run -d -p 8082:80 --name nginx-test-web -v ~/nginx/www:/usr/share/nginx/html -v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/nginx/logs:/var/log/nginx nginx

有问题:docker ps -a 

 

这样代表启动正常 能正常访问 就是正常了的

搭载好nginx 搭载 tomcat 

为了方便 我就不使用 映射的方式了 使用 cp 到系统中来表示不同的容器:

在之前 可以不下载 也可以自己去下载 tomcat 的image文件 

docker run --name tomcat1 -p 8081:8080 -d tomcat
docker run --name tomcat2 -p 8082:8080 -d tomcat
docker run --name tomcat3 -p 8083:8080 -d tomcat

使用cp 把自己编写的index.jsp 放到 tomcat ROOT目录下 替换原有的index.jsp 目录为

   id:/usr/local/tomcat/webapps/ROOT/

修改三个tomcat 参考:https://blog.csdn.net/bbwangj/article/details/81005982

 

都和别人一样 我就不写文章了//

此时 配置完毕后,会发现,单个tomcat 访问没问题,使用nginx进行代理的时候出现502错误。

此时 可以查看nginx 启动日志 的错误日志,发现

2019/09/02 14:55:53 [error] 6#6: *6 connect() failed (113: No route to host) while connecting to upstream, client: 192.168.8.169, server: , request: "GET / HTTP/1.1", upstream: "http://192.168.8.241:8081/", host: "192.168.8.241:8888"

此时会让你 禁用 防火墙。但是 给你说不行的,不能直接禁用 防火墙,因为这样后,你会发现 除了运行的容器外,在想启动容器都会报错,此时需要做的操作为,启用策略,开放端口。
查看firewall的状态

firewall-cmd --state

#开启 service firewalld start # 重启 service firewalld restart # 关闭 service firewalld stop

 

 

# 查询端口是否开放
firewall-cmd --query-port=8080/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp

#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

# 参数解释
1、firwall-cmd:是Linux提供的操作firewall的一个工具;
2、--permanent:表示设置为持久;
3、--add-port:标识添加的端口;

 

记得 在 配置后,别忘了重启防火墙

效果1:

效果2:


user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {


 server {
                listen 80;
                location  / {
                        proxy_pass http://blance;
                }
        }
 
    upstream blance{
            server 192.168.8.241:8081;
            server 192.168.8.241:8082;
            server 192.168.8.241:8083;
    }
    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;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值