一、Nginx介绍
Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。它是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点开发的,公开版本1.19.6发布于2020年12月15日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。
Nginx的特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。它可以作为静态页面的web服务器,同时还支持CGI协议的动态语言,比如perl、php等,但是不支持java。Java程序只能通过与tomcat配合完成。
Nginx优点
- 高并发连接:官方测试Nginx能够支撑5万并发连接,实际生产环境中可以支撑2~4万并发连接数。
- 配置文件简洁。
- 占用内存少。
- 内部有健康检查功能。
- 支持Rewrite重写:可根据不同的域名、URL将请求转发至后端不同的服务群。
- 支持热部署。
- 稳定性高。
此外,Nginx的主要功能包括正向代理与反向代理、负载均衡、动静分离等。它可以作为正向代理进行上网等功能,同时也可以做反向代理,客户端对反向代理服务器是无感的,客户端访问反向代理服务器,反向代理服务器再将请求转发至目标服务器,只需要暴露代理服务器的地址即可,隐藏了真实的服务器地址,降低原来单个服务器的压力。
二、容器创建
1、MySQL容器
Ⅰ、创建容器
创建MySQL目录
mkdir -p /mode/mysql/{conf,data}
用于存放数据
在对应的位置放置对应的my.cnf文件。
my.cnf
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] # Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. # innodb_buffer_pool_size = 128M # # Remove leading # to turn on a very important data integrity option: logging # changes to the binary log between backups. # log_bin # # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M skip-host-cache skip-name-resolve datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock secure-file-priv=/var/lib/mysql-files user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake # default: sql_mode= STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION # modeified: sql_mode= STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION max_allowed_packet=10M default-time_zone='+8:00' default_authentication_plugin=mysql_native_password
创建一个网络让我们的容器之间可以相互访问
docker network create --subnet 172.18.0.0/16 --gateway 172.18.1.1 modes
modes:网络名称
172.18.0.0:指定IP地址
创建MySQL容器,指定我们的网络名称modes。
docker run \ --name m1 \ -v /mode/mysql/conf/my.cnf:/etc/my.cnf \ -v /mode/mysql/data:/var/lib/mysql \ --privileged=true \ -e MYSQL_ROOT_PASSWORD=123456 \ --net modes \ --ip 172.18.0.11 \ -d mysql/mysql-server:5.7
进入MySQL容器进行登录
m1:容器名
docker exec -it m1 bash
登录,输入我们设置好的密码:123456
mysql -uroot -p
进行授权设置密码
grant all on *.* to root@'%' identified by '123456';
Ⅱ、应用
在MySQL创建我们所需要存放数据表的数据库
create database shop;
shop为创建数据库
使用数据库:
use shop;
在对应的目录里面放入我们的数据脚本
执行脚本,等待执行完成。
source /var/lib/mysql/book.sql
查看数据表:
show tables;
之后退出:
exit;
退出后需要重启容器:
docker restart m1
2、创建tomcat容器
要使用Nginx负载均衡,就不只是一个容器,所以可以创建一个镜像来创建tomcat容器
编辑并且创建Dockerfile文件,用于创建镜像的配置
命令:
vim Dockerfile
进行以下编辑:
#1.指定基础镜像,并且必须是第一条指令 FROM openjdk #2.指明该镜像的作者和其电子邮件 MAINTAINER wfzldr "邮件.com" #3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录 WORKDIR /project #4.将文件从Docker主机将jdk及jar包复制到Docker镜像中 COPY spring.jar /project #5.容器启动时,需要执行的命令(执行jar包) CMD java -jar spring.jar --mysql.addr=m1
将名为spring.jar的配置IP配置为m1容器的IP。
编辑完成按Esc,并且输入:wq进行保存并且退出。
有相同名称及版本的镜像可以进行删除或者创建不同名称及版本的镜像
删除:
docker rmi spring:v1
创建:
docker build -t spring:v1 .
根据创建的镜像来创建容器,并且分别配置不同的IP
docker run -itd --name s1 --net mode --ip 172.18.0.101 spring:v1 docker run -itd --name s2 --net mode --ip 172.18.0.102 spring:v1 docker run -itd --name s3 --net mode --ip 172.18.0.103 spring:v1
查看日志:
docker logs s1
我们就可以进行数据访问了
3、Nginx容器
Ⅰ、准备
创建nginx的配置文件目录并将配置文件放入
mkdir -p /soft/nginx/conf.d
default.conf
#服务器的集群 upstream tomcatList { server 172.18.0.101:8080 weight=1; server 172.18.0.102:8080 weight=1; server 172.18.0.103:8080 weight=1; } server { listen 80; server_name www.zkingedu.com; location / { root /etc/nginx/html/; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~^/api/ { rewrite ^/api/(.*)$ /$1 break; proxy_pass http://tomcatList; proxy_redirect default; } }
在这个项目中放入我们的项目文件
Ⅱ、创建容器
根据自定义的网络来创建nginx容器
n1:容器
modes:自定义网络
docker run -itd \ --name n1 \ -v /soft/nginx/conf.d:/etc/nginx/conf.d \ -v /soft/nginx/html:/etc/nginx/html/ \ -p 80:80 \ --net mode \ --ip 172.18.0.104 \ nginx
在主机访问IP即可