首先需要一个镜像,我采用的是为 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;
}