docker安装nginx
-
docker服务做成了随宿主机自启
systemctl enable docker
systemctl daemon-reload -
构建容器的时候,–restart=always
容器随docker服务的启动而启动虚拟机关机重启的话:首先是docker服务随虚拟机启动,容器又随docker服务的启动而启动
虚拟机启动,容器就自动启动了
构建java坏境的容器,部署java后台项目
- 上传文件到/zking/java目录(oa.jar Dockerfile start.sh)
mkdir -p /zking/java
rz
- 启动容器
cd /zking/java
sh start.sh
第一步:停止oa容器
第二步:删除oa容器
第三步:删除oa的镜像
第四步:构建自己的oa镜像
第五步:启动 jar 包
nginx是什么(见手绘图)
Nginx也是一款服务器,我们常用它做如:反向代理、负载均衡、动态与静态资源的分离的工作,
反向代理:反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
负载均衡:目前大多数的网站都会采用负载均衡手段来针对目前用户的指数级增长来减少对单点服务器的负载压力,比如目前我们拥有3台真实服务器,我们需要根据相应策略决定什么样的用户请求分配到哪个真实服务器,比如按照轮询的方式,用户请求挨个到达代理服务器,此时代理服务器按照第一个请求转发至第一台真实服务器,第二个请求转发到第二个服务器上,依次类推,这样可以防止大量的用户请求全部访问到同一台物理机上,单点物理机的性能始终有限的,当然这可能对服务器数据访问时候造成事务性的失效,在Web方面可能造成Session访问的问题,这不在本文讨论方面内
Nginx+tomcat是目前主流的java web部署架构
正向代理服务器
反向代理服务器
nginx访问流程图
安装nginx
-
搜索nginx镜像
docker search nginx
-
拉取镜像
docker pull nginx
-
在宿主机中创建挂载目录(见之前直接在虚拟机里面安装nginx后,会生成一些文件)
mkdir -p /zking/nginx/{conf,conf.d,html,log}
可以理解为:
mkdir /zking/nginx/conf
mkdir /zking/nginx/conf.d
mkdir /zking/nginx/html
mkdir /zking/nginx/log
注1:因为在nginx镜像中没有安装vi或vim编辑器(安装又太麻烦了),无法编辑nginx配置文件,
所以直接通过数据卷挂载上去更加方便 -
根据nginx镜像创建nginx容器
docker run
–name mynginx01
-d -p 80:80
nginx:latest等价:docker run --name mynginx01 -d -p 80:80 nginx:latest
注1:(测试nginx的安装与访问,并没有发布任何的java或vue项目,最后此容器要删除的)
-
查看本地的容器,可以看到nginx容器已经创建成功了
docker ps -a
-
测试nginx是否安装成功
打开浏览器输入:http://192.168.148.129( http://宿主机ip:80),正常情况下会显示nginx的欢迎页面
重新构建nginx容器用于发布vue项目
- 上传nginx.conf配置文件到宿主机/zking/nginx/conf目录下
注1:构建容器前上传配置文件到/zking/nginx/conf目录下,否则构建nginx容器会报错
nginx.conf讲解:
1. 所有配置必须以“;”结尾
2. nginx发布java项目
nginx+tomcat实现反向代理及均衡
upstream tomcats{
#TODO:172.17.0.3是docker容器的IP
server 172.17.0.3:8080 weight=1;#服务器配置 weight是权重的意思,权重越大,分配的概率越大。
server 172.17.0.4:8080 weight=2;
}
location ^~/api/ {
proxy_pass http://tomcats;
proxy_redirect default;
}
nginx.conf
#工作进程的个数,一般与计算机的cpu核数一致
worker_processes 1;
events {
#单个进程最大连接数(最大连接数=连接数*进程数)
worker_connections 1024;
}
http {
include mime.types;#文件扩展名与文件类型映射表
default_type application/octet-stream;#默认文件类型
sendfile on;#开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
keepalive_timeout 65; #长连接超时时间,单位是秒
gzip on;#启用Gizp压缩
#服务器的集群
upstream tomcats {
#服务器集群名字
#TODO:172.17.0.3是docker容器的IP
server 172.17.0.3:8080 weight=1;#服务器配置 weight是权重的意思,权重越大,分配的概率越大。
server 172.17.0.4:8080 weight=2;
}
#当前的Nginx的配置
server {
listen 80;#监听80端口,可以改成其他端口
server_name localhost;#当前服务的域名,没有域名可随便填写
# 动态交给tomcat集群处理
location / {
proxy_pass http://tomcats;
proxy_redirect default;
}
# 静态处理交给nginx
location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|ico|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma|css|js)$ {
root /usr/share/nginx/html/dist;
index index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
- 创建nginx容器 #
docker run
–name mynginx02
-d -p 80:80
-v /zking/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
-v /zking/nginx/log:/var/log/nginx
-v /zking/nginx/html:/usr/share/nginx/html
nginx:latest
-
上传dist.zip的包到宿主机/zking/nginx/html目录下
rz
-
解压dist.zip
unzip dist.zip
-
访问vue项目首页
http://192.168.148.129/index.html注1:如果容器创建失败,可通过如下命令,查看在docker容器启动日志
docker logs -f -t --tail 行数 容器名
docker logs -f -t --tail 100 mynginx02注2:进入容器内部(/bin/bash 还是/bin/sh取决于跟镜像是centos还是alpine)
docker exec -it mynginx02 /bin/sh
java后台代码(oa项目)
第一步:创建一个名为oa的项目
第二步:配置pom.xml
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.zking</groupId>
<artifactId>oa</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>oa</name>
<packaging>jar</packaging>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>