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

目录

一、概述

1. Nginx介绍

2. Nginx优势

3. Nginx的工作原理

二、容器创建

1. Mysql容器

2. Tomcat容器

3. Nginx容器

每篇一获


一、概述

1. Nginx介绍

Nginx(发音为 "engine x")是一个开源的、高性能的 HTTP 服务器和反向代理服务器。它也可以作为一个 IMAP/POP3/SMTP 代理服务器。Nginx 是由 Igor Sysoev 开发的,最初是为了解决 C10K 问题(即如何处理一万个并发连接的问题)。现在,Nginx 已经成为了一种非常流行的 Web 服务器软件。

Nginx因其简洁、高效和可靠的特点而备受欢迎。相比传统的Apache服务器,Nginx使用更少的系统资源,可以处理更多的并发连接。它采用事件驱动的异步架构,能够有效地处理高并发请求和大量的并行连接。

以下是 Nginx 的一些主要特性:

  1. 处理静态文件、索引文件以及自动索引:Nginx 可以非常高效地处理静态文件,并支持索引文件和自动索引。

  2. 反向代理与负载均衡:Nginx 可以作为反向代理服务器,将来自客户端的请求转发到后端的服务器,并将后端服务器的响应返回给客户端。此外,Nginx 还支持多种负载均衡算法。

  3. FastCGI、uWSGI、SCGI、memcached 支持:Nginx 可以与这些常见的网络协议进行交互,以处理动态内容。

  4. SSL 和 TLS 支持:Nginx 支持 SSL 和 TLS 协议,可以为网站提供安全的 HTTPS 连接。

  5. 模块化设计:Nginx 有许多可选的模块,可以根据需要添加或删除,以满足特定的需求。

  6. 配置文件热部署:Nginx 支持在不中断服务的情况下更改配置文件并使其生效。

  7. 带宽控制:Nginx 允许限制连接和请求的速度,以防止带宽被过度使用。

2. Nginx优势

在 Linux 中使用 Nginx 部署项目有许多优势,以下是一些主要的:

  1. 高性能和高并发:Nginx 是一个高性能的反向代理服务器和邮件代理服务器。它可以处理大量的并发连接,这使得它在处理高流量的网站时表现出色。

  2. 稳定性:Nginx 在各种网络环境下都能提供稳定的服务。它的稳定性和可靠性使得许多大型网站选择使用它作为其主要的 Web 服务器。

  3. 灵活性:Nginx 提供了丰富的模块和功能,可以满足各种复杂的 Web 应用需求。例如,它可以作为负载均衡器,可以处理静态文件,也可以处理动态内容。

  4. 易于配置:Nginx 的配置文件结构清晰,易于理解和修改。这使得管理和维护 Nginx 服务器变得更加简单。

  5. 资源占用少:Nginx 在处理大量并发连接时,CPU 和内存的占用相对较少,这使得它在资源有限的环境中也能提供良好的性能。

  6. 开源和免费:Nginx 是开源的,这意味着您可以免费使用它,并且可以查看和修改其源代码。这为定制和优化 Nginx 提供了可能。

  7. 良好的社区支持:Nginx 有一个活跃的开发和用户社区,您可以从中获取帮助和支持,也可以分享您的经验和知识。

3. Nginx的工作原理

Nginx 的工作原理主要基于事件驱动和异步非阻塞的设计模型。这种设计使得 Nginx 能够在处理大量并发连接时,保持高效和稳定。以下是 Nginx 工作原理的一些关键点:

  1. Master-Worker 架构:Nginx 采用 Master-Worker 的架构模式。Master 进程主要负责读取和验证配置文件,管理 Worker 进程。Worker 进程则负责处理实际的请求。每个 Worker 进程都是独立的,它们之间不共享状态,也不进行直接的通信。

  2. 事件驱动:Nginx 的 Worker 进程是事件驱动的。当一个新的连接请求到来时,Worker 进程会接收到一个事件通知。然后,Worker 进程会处理这个请求,生成响应,并将响应发送回客户端。在这个过程中,Worker 进程不会被阻塞,可以同时处理多个请求。

  3. 异步非阻塞 I/O:Nginx 使用异步非阻塞的 I/O 操作。这意味着,当一个 Worker 进程在等待 I/O 操作完成时,它可以去处理其他的请求。这样,Worker 进程就不会因为等待 I/O 操作而被阻塞,可以更高效地利用 CPU。

  4. 负载均衡:Nginx 可以作为反向代理服务器,将来自客户端的请求分发到后端的服务器。Nginx 支持多种负载均衡算法,如轮询、最少连接、IP 哈希等。

  5. 静态内容处理:对于静态内容,Nginx 可以直接从文件系统中读取文件,并将文件内容作为响应发送给客户端。

  6. 动态内容处理:对于动态内容,Nginx 通常会与后端的应用服务器(如 PHP-FPM、uWSGI 等)配合使用。Nginx 将请求转发给应用服务器,由应用服务器生成动态内容,然后 Nginx 再将这些内容作为响应发送给客户端。

二、容器创建

1. Mysql容器

首先创建一个目录

命令:

mkdir -p /mode/mysql/{conf,data}  

在root中创建一个存放MySQL的文件夹mysql中有conf存放配置文件,

还在mysql中有data存放数据的。

在将配置文件从主机拖到conf文件中:

为了让我们的容器之间可以相互访问,所以我们创建一个网络,名称为:mode

172.18.0.0为指定IP,其中mode为网络名称。

docker network create --subnet 172.18.0.0/16 --gateway 172.18.1.1 mode

创建一个mysql容器并且为它指定我们的自定义网络(mode)

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 mode \
--ip 172.18.0.100 \
-d mysql/mysql-server:5.7

其中的ip需要跟上面创建的自定义网络前缀相同:172.18,在这之后可以修改,不可超过255

进入我们创建的mysql容器进行登录

进入:

docker exec -it m1 bash

m1 是需要进入哪个容器的名称

登入mysql:

mysql -uroot -p

输入我们在创建是设置的密码即可登入,也就是123456

在进行用户的授权并且设置密码:

grant all on *.* to root@'%' identified by '123456';

其中root为用户名称,123456为用户的密码。

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

创建数据库:

create database shop;  

shop为创建数据库

使用创建号的数据库:

use shop;

在我们创建数据的data目录中存放sql脚本,将使用目录挂载后容器也会有这个脚本,在主机中将脚本拖入即可(/mode/mysql/data):

之后执行命令,将脚本在MySQL中执行,容器与虚拟机对应的目录:

执行命令:

source  /var/lib/mysql/book.sql;

 

查看数据表:

show tables;

之后退出:

exit;

退出后需要重启容器:

docker restart m1

2. Tomcat容器

我们需要达到Nginx负载均衡,就不只是一个容器,所以可以创建一个镜像来创建tomcat容器

编辑并且创建Dockerfile文件,用于创建镜像的配置

命令:

vim Dockerfile

进行以下编辑:

#1.指定基础镜像,并且必须是第一条指令
FROM  openjdk
#2.指明该镜像的作者和其电子邮件
MAINTAINER  CloudJun  "jun737x@163.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

 

i 进行编辑 ,编辑完成按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

这里创建了三个容器,分别是s1,s2,s3,IP分别:18.0.101,18.0.102,18.0.103

 

可以通过查看日志看是否启动成功

 查看日志:

docker logs s1

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;}}

其中配置tomcat集群,将tomcat容器的IP集群,并且对应创建过的tomcat容器IP

在将这个项目中的静态文件放入其中

之后根据自定义的网络来创建nginx容器

命令:

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

n1 为容器名称,mode 为自定义网络

之后在主机只访问虚拟机的IP:

每篇一获

在 Linux 中使用 Docker 安装 Nginx 并部署前后端分离的项目,您可能会有以下几个方面的收获:

  1. 掌握 Docker 的基本使用:Docker 是一种流行的容器技术,可以让开发者在一个隔离的环境中运行应用,避免了因为环境问题导致的“在我机器上可以运行”的问题。通过这个过程,您可能已经学会了如何使用 Docker 来创建和管理容器。

  2. 理解容器化的优势:与传统的虚拟机相比,容器有许多优势,例如启动快、资源占用少、易于迁移等。通过实际使用 Docker,您可能对这些优势有了更深入的理解。

  3. 熟悉 Nginx 的配置和使用:Nginx 是一个强大的 Web 服务器和反向代理服务器,通过在 Docker 中部署 Nginx,您可能已经熟悉了 Nginx 的配置和使用。

  4. 了解前后端分离的部署方式:前后端分离是现代 Web 开发的一种常见架构,通过在 Docker 中部署前后端分离的项目,您可能对这种部署方式有了更深入的理解。

  5. 提升 Linux 操作技能:在 Linux 中使用 Docker 和 Nginx,无疑会让您对 Linux 的命令行操作更加熟练,这对于任何想要深入了解和使用 Linux 的人来说都是非常有价值的技能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/632823.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[二]rtmp服务器搭建

[二]rtmp服务器搭建 一.测试二.使用Nginx搭建自己的rtmp服务器1.nginx是什么?2.环境准备 三、搭建过程1.安装编译 nginx 所需要的库2.下载 nginx-1.21.6.tar.gz3.下载 nginx-rtmp-module 4.解压5.编译6.启动nginx,检测nginx是否能成功运行7.配置nginx使用…

OpenCV-Python(47):支持向量机

原理 线性数据分割 如下图所示,其中含有两类数据,红的和蓝的。如果是使用kNN算法,对于一个测试数据我们要测量它到每一个样本的距离,从而根据最近的邻居分类。测量所有的距离需要足够的时间,并且需要大量的内存存储训…

uni-app小程序 uni.showToast字数超过两行自动省略显示不全问题

在实际开发过程中如果用户提交某些文件时,如果缺少某些条件我们要提醒用户缺少那些条件才能提交,但是如果我们用uni.showToast提醒的次数超过7个字的时候就会导致文字显示不全,达不到提醒的效果,这种时候我们就需要使用uni.showMo…

文心一言使用分享

ChatGPT 和文心一言哪个更好用? 一个直接可以用,一个还需要借助一些工具,还有可能账号会消失…… 没有可比性。 通用大模型用于特定功能的时候需要一些引导技巧。 import math import time def calculate_coordinate(c, d, e, f, g, h,…

springcloud +Vue 前后端分离的onlinejudge在线评测系统

功能描述: 本系统的研究内容主要是设计并实现一个一个在线测评系统(OJ),该系统集成了博客、竞赛、刷题、教学,公告,个人管理六大功能,用户注册后登录系统,可以浏览本站的全部文章、发…

【JVM】并发的可达性分析详细解释

​ 🍎个人博客:个人主页 🏆个人专栏:JVM ⛳️ 功不唐捐,玉汝于成 ​ 目录 前言 正文 可达性分析的基本原理: 根集合(Root Set): 对象引用关系: 标记…

PyCharm 快捷键(Ctrl + R)正则表达式批量替换

目录 一、使用快捷键CtrlR,打开替换界面 二、输入替换格式 三、点击全部替换 一、使用快捷键CtrlR,打开替换界面 二、输入替换格式 在第一个框输入 (.*): (.*) 第二个框输入 $1:$2, 三、点击全部替换

spring boot学习第八篇:kafka监听消费

为了实现监听器功能 pom.xml文件内容如下&#xff1a; <?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:schemaLoc…

论文阅读:Vary论文阅读笔记

目录 引言整体结构图数据集构造Vary-tiny部分Document Data数据构造Chart Data构造Negative natural image选取 Vary-base部分 引言 论文&#xff1a;Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models Paper | Github | Demo 许久不精读论文了&#x…

Spring Boot 优雅实现统一数据返回格式+统一异常处理+统一日志处理

在我们的项目开发中&#xff0c;我们都会对数据返回格式进行统一的处理&#xff0c;这样可以方便前端人员取数据&#xff0c;当然除了正常流程的数据返回格式需要统一以外&#xff0c;我们也需要对异常的情况进行统一的处理&#xff0c;以及项目必备的日志。 1. 统一返回格式 …

linux 安装ffmpeg

一、下载 ffmpeg-4.3.1 下载地址&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1xbkpHDfIWSCbHFGJJHSQcA 提取码&#xff1a;3eil 二、上传到服务器root目录下 三、给ffmpeg-4.3.1 读写权限 chmod -R 777 /root/ffmpeg-4.3.1 四、创建软连接 1.进入/bin 目录 2.…

用js做个转盘

样式 <style>.wheel {position: relative;width: 400px;height: 400px;border: 1px solid black;border-radius: 50%;overflow: hidden;margin: auto;}.slice {position: absolute;left: 0;top: 0;width: 0;height: 0;border: 200px solid red;/* border-width: 100px 10…

Spring Boot整合Druid(druid 和 druid-spring-boot-starter)

引言 在现代的Web应用开发中&#xff0c;高性能的数据库连接池是确保应用稳定性和响应性的关键因素之一。Druid是一个开源的高性能数据库连接池&#xff0c;具有强大的监控和统计功能&#xff0c;能够在Spring Boot应用中提供出色的数据库连接管理。本文将研究在Spring Boot中…

Macos flatter(用于快速LLL)本地编译安装(解决安装过程各种疑难杂症)

flatter是一个开源项目&#xff0c;能大大提高LLL的速度&#xff0c;项目提供的安装文档适用于Ubuntu&#xff0c;但是在macos上安装&#xff0c;总会遇到各种各样的问题&#xff0c;这里记录下所踩坑&#xff0c;帮助大家快速在macos上安装flatter。 文章目录 1.安装依赖库&am…

Python使用HTTP代理进行网络测试和监控

在Python中&#xff0c;HTTP代理不仅可以用于网络爬虫&#xff0c;还可以用于网络测试和监控。通过使用HTTP代理&#xff0c;我们可以模拟不同的网络环境&#xff0c;测试应用程序在不同情况下的性能和稳定性。此外&#xff0c;我们还可以使用HTTP代理来监控网络流量和性能指标…

C语言编译和链接

翻译环境和运行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境 .第一种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令 .第二种是执行环境&#xff0c;它用于实际执行代码 翻译环境 翻译环境是由编译和链接两个大过程组成&#xff0c;而…

npm run dev 启动vue的时候指定端口

使用的是 Vue CLI 来创建和管理 Vue 项目&#xff0c; 可以通过设置 --port 参数来指定启动的端口号。以下是具体的步骤&#xff1a; 打开命令行终端 进入您的 Vue 项目目录 运行以下命令&#xff0c;通过 --port 参数指定端口号&#xff08;例如&#xff0c;这里设置端口号…

mybatisPlus注解将List集合插入到数据库

1.maven引入依赖&#xff08;特别注意版本&#xff0c;3.1以下不支持&#xff09; <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3.1</version></dependency&g…

自建服务器如何备案?

随着互联网的普及和发展&#xff0c;越来越多的人开始考虑自建服务器。然而&#xff0c;在中国大陆地区&#xff0c;自建服务器需要进行备案。本文将介绍自建服务器备案的流程、所需材料以及注意事项。 一、备案流程 确定备案地区 根据《中华人民共和国计算机信息网络国际联网…

【python】—— 集合

目录 &#xff08;一&#xff09;集合的概念 &#xff08;二&#xff09;集合的使用 2.1 集合的创建 2.2 集合元素的唯一性 2.3 集合的操作 2.3.1 并集 2.3.2 交集 2.3.3 差集 2.3.4 补集 2.4 遍历集合 2.5 其他集合操作 2.5.1 添加元素 2.5.2 移除元素 2.5.3 清…