【Docker】使用Docker安装Nginx及部署前后端分离项目应用

一、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优点

  1. 高并发连接:官方测试Nginx能够支撑5万并发连接,实际生产环境中可以支撑2~4万并发连接数。
  2. 配置文件简洁。
  3. 占用内存少。
  4. 内部有健康检查功能。
  5. 支持Rewrite重写:可根据不同的域名、URL将请求转发至后端不同的服务群。
  6. 支持热部署。
  7. 稳定性高。
    此外,Nginx的主要功能包括正向代理反向代理负载均衡动静分离等。它可以作为正向代理进行上网等功能,同时也可以做反向代理,客户端对反向代理服务器是无感的,客户端访问反向代理服务器,反向代理服务器再将请求转发至目标服务器,只需要暴露代理服务器的地址即可,隐藏了真实的服务器地址,降低原来单个服务器的压力。

二、容器创建

1、MySQL容器

Ⅰ、创建容器

创建MySQL目录

bash 复制代码
mkdir -p /mode/mysql/{conf,data}  

用于存放数据
在对应的位置放置对应的my.cnf文件。

my.cnf

bash 复制代码
[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

创建一个网络让我们的容器之间可以相互访问

bash 复制代码
docker network create --subnet 172.18.0.0/16 --gateway 172.18.1.1 modes

modes:网络名称

172.18.0.0:指定IP地址
创建MySQL容器,指定我们的网络名称modes。

bash 复制代码
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:容器名

bash 复制代码
docker exec -it m1 bash

登录,输入我们设置好的密码:123456

bash 复制代码
mysql -uroot -p

进行授权设置密码

bash 复制代码
grant all on *.* to root@'%' identified by '123456';

Ⅱ、应用

在MySQL创建我们所需要存放数据表的数据库

create database shop;  

shop为创建数据库
使用数据库:

use shop;

在对应的目录里面放入我们的数据脚本


执行脚本,等待执行完成。

bash 复制代码
source /var/lib/mysql/book.sql

查看数据表:

show tables;

之后退出:

exit;

退出后需要重启容器:

docker restart m1

2、创建tomcat容器

要使用Nginx负载均衡,就不只是一个容器,所以可以创建一个镜像来创建tomcat容器
编辑并且创建Dockerfile文件,用于创建镜像的配置

命令:

vim Dockerfile

进行以下编辑:

bash 复制代码
#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

bash 复制代码
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的配置文件目录并将配置文件放入

bash 复制代码
mkdir -p  /soft/nginx/conf.d

default.conf

bash 复制代码
#服务器的集群
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:自定义网络

bash 复制代码
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即可

相关推荐
_.Switch11 分钟前
Python 自动化运维持续优化与性能调优
运维·开发语言·python·缓存·自动化·运维开发
伏虎山真人11 分钟前
开源数据库 - mysql - mysql-server-8.4(gtid主主同步+ keepalived热切换)部署方案
数据库·mysql·开源
2401_8576363911 分钟前
计算机课程管理平台:Spring Boot与工程认证的结合
java·spring boot·后端
南猿北者15 分钟前
Docker Volume
运维·docker·容器
也无晴也无风雨1 小时前
深入剖析输入URL按下回车,浏览器做了什么
前端·后端·计算机网络
Martin -Tang2 小时前
Vue 3 中,ref 和 reactive的区别
前端·javascript·vue.js
网络研究院2 小时前
Am I Isolated:一款安全态势基准测试工具
容器·工具·基准测试·安全态势
FIN技术铺3 小时前
Redis集群模式之Redis Sentinel vs. Redis Cluster
数据库·redis·sentinel
涔溪3 小时前
Docker简介
spring cloud·docker·eureka
FakeOccupational3 小时前
nodejs 020: React语法规则 props和state
前端·javascript·react.js