先逼逼一顿我自己需要记住的东西
A:目的是一个mysql服务、三个tomcat服务,一个nginx,同时在nginx中部署vue打包后的工程
B:因为本文的重点是nginx,所以有关于mysql、tomcat的dockerfile以及docker-compose.yml文件不会出现在本文中,如果有需要了解,则去看我其他的文章
C.本文会贴出nginx.的配置文件
D:本文重点是作为自己的笔记,so 可能连贯性会比较差,有一些东西不会说的那个细致
进入正文
A: 文字说明:1.nginx的docker镜像中有三个主要的文件或目录,分别是 /etc/nginx/nginx.conf /etc/nginx/conf.d/defaul.conf /usr/share/nginx/html
2.nginx.conf 和default.conf都是配置文件,默认的nginx.conf文件中会有有一句 includ /etc/nginx/conf.d/default.conf, 我这里是把这句话去掉了,把所有的个人配置都写在了 nginx.conf 中
3.vue打包后的文件夹放在了 上述的 /user/share/nginx/html 下边了,我这里的文件夹名叫 netAppointmentCarExamSys ,所以在 配置文件中写静态文件的地址时写的是:
location / {
root /usr/share/nginx/html/netAppointmentCarExamSys;
index index.html index.htm;
}
4.然后使用ip:80/访问时就可以访问到netAppointmentCarExamSys文件夹下的index.html页面了
5.我的后端项目名为 :rideHailing,就是说前端访问后端时会带着这个名称再调用接口,所以所有的接口都会访问 /rideHailing/,所以负载均衡的localtion配置就变成了
location ^~/rideHailing/ {
proxy_pass http://mytomcat;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream http_502 http_504 error timeout invalid_header;
#proxy_connect_timeout 30;
#proxy_send_timeout 60;
#proxy_read_timeout 60;
#proxy_buffering on;
#proxy_buffer_size 32k;
#proxy_buffers 4 128k;
}
6.至于location后边的^~是啥意思,就自己去搜吧,搜nginx配置文件中location用法就行了
7.nginx使用的端口为80,就是说访问静态文件和负载均衡都用的80端口,所以在同一个server{}中配置了多个location
8.upstream 是指定了业务服务集群的名称,我这里写的是 mytomcat,所以下方 location中proxy_pass 指向的也是 mytomcat
好,下方是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;
#include /etc/nginx/conf.d/*.conf;
#gzip on;
upstream mytomcat {
server 192.168.127.31:8077;
server 192.168.127.31:8078;
server 192.168.127.31:8079;
}
server {
listen 80;
server_name 192.168.127.31;
# root /usr/share/nginx/html;
# index index.html;
location / {
root /usr/share/nginx/html/netAppointmentCarExamSys;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ^~/rideHailing/ {
proxy_pass http://mytomcat;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream http_502 http_504 error timeout invalid_header;
#proxy_connect_timeout 30;
#proxy_send_timeout 60;
#proxy_read_timeout 60;
#proxy_buffering on;
#proxy_buffer_size 32k;
#proxy_buffers 4 128k;
}
}
}
docker-compose.yml
创建容器时需要 映射端口、挂载文件,docker run -p -v --name 。。。。。 很显然这种方式很慢,所以使用docker-compose.yml 文件是很方便的,我这里对nginx挂载的文件目录一共三个,分别是nginx.conf,conf.d,还有html, 最后在docker-compose.yml目录使用docker-compose up -d 就可以了version: "3.2"
services:
mysql1:
networks:
- wyc
build:
context: ./mysql
dockerfile: ./dockerfile
restart: always
image: wyc_mysql
container_name: wyc_mysql_01
ports:
- "3306:3306"
volumes:
- "/home/fd/wycplus/tomcat/dockerfile/mysql/conf.d/:/etc/mysql/conf.d/"
- "/home/fd/wycplus/tomcat/dockerfile/mysql/data/:/var/lib/mysql/"
- "/home/fd/wycplus/tomcat/dockerfile/mysql/log/:/var/log/mysql/"
- "/home/fd/wycplus/tomcat/dockerfile/mysql/init.d/:/docker-entrypoint-initdb.d/"
environment:
# - MYSQL_USER= 'root'
# - MYSQL_PASS= 'root'
MYSQL_ROOT_PASSWORD: root
MYSQL_ROOT_HOSE: '%'
MYSQL_DATABASE: wyc_test
TZ: Asia/Shanghai
tomcat1:
build:
context: ./
dockerfile: ./dockerfile
image: wyc_tomcat
restart: always
container_name: wyc_tomcat_01
ports:
- "8077:8077"
volumes:
- "/home/fd/wycplus/tomcat/dockerfile/tomcat1/conf/:/usr/local/tomcat/conf/"
- "/home/fd/wycplus/tomcat/dockerfile/tomcat1/webapps:/usr/local/tomcat/webapps"
- "/home/fd/wycplus/tomcat/dockerfile/tomcat1/logs:/usr/local/tomcat/logs"
networks:
- wyc
tomcat2:
# build:
# context: ./
# dockerfile: ./dockerfile
image: wyc_tomcat
restart: always
container_name: wyc_tomcat_02
ports:
- "8078:8077"
volumes:
- "/home/fd/wycplus/tomcat/dockerfile/tomcat2/conf/:/usr/local/tomcat/conf/"
- "/home/fd/wycplus/tomcat/dockerfile/tomcat2/webapps:/usr/local/tomcat/webapps"
- "/home/fd/wycplus/tomcat/dockerfile/tomcat2/logs:/usr/local/tomcat/logs"
networks:
- wyc
tomcat3:
# build:
# context: ./
# dockerfile: ./dockerfile
image: wyc_tomcat
restart: always
container_name: wyc_tomcat_03
ports:
- "8079:8077"
volumes:
- "/home/fd/wycplus/tomcat/dockerfile/tomcat3/conf/:/usr/local/tomcat/conf/"
- "/home/fd/wycplus/tomcat/dockerfile/tomcat3/webapps:/usr/local/tomcat/webapps"
- "/home/fd/wycplus/tomcat/dockerfile/tomcat3/logs:/usr/local/tomcat/logs"
networks:
- wyc
nginx:
build:
context: ./nginx
dockerfile: ./dockerfile
image: wyc_nginx
container_name: wyc_nginx_01
ports:
- "80:80"
volumes:
- "/home/fd/wycplus/tomcat/dockerfile/nginx/nginx.conf:/etc/nginx/nginx.conf"
- "/home/fd/wycplus/tomcat/dockerfile/nginx/html:/usr/share/nginx/html"
- "/home/fd/wycplus/tomcat/dockerfile/nginx/conf.d:/etc/nginx/conf.d "
depends_on:
- tomcat1
- tomcat2
- tomcat3
networks:
wyc:
nginx 的dockerfile
我写的比较简单,也够用FROM nginx
EXPOSE 80
#VOLUME "/etc/nginx/nginx.conf"
#VOLUME "/var/run/nginx.pid"
VOLUME "/etc/nginx/conf.d"
VOLUME "/usr/share/nginx/html"
其实里面的volume没必要定义