【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 的人来说都是非常有价值的技能。

原文地址:https://blog.csdn.net/SAME_LOVE/article/details/135663763

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、信号(signal)、消息队列、共享内存、信号量、套接字(socket)。管道用于具有亲缘关系的进程间通信,有名管道的每个管道具有名字,使没有亲缘关系的进程间也可以通信。信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别对整个系统的性能做统计,而进程级别则具体到进程,为每个进程维护统计信息。

按实现原理分,可分为基于计数器和跟踪以及剖析。含义如下:

计数器:内核维护的统计数据,通常为无符号整型,用于对发生的事件计数,比如,网络包接收计数器,磁
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书验证,详细追踪整个交互过程,可用于调用网络后端接口,诊断http和https网络服务故障。
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满、fd泄漏等问题。命令包括ping、fping、tcpdump、lsof、netstat、/proc/$pid/fd、du、grep、traceroute、dig。
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的进程数目,用uptime查看到负载很高,既有可能是CPU利用率高,也可能是大量在等待io的进程导致,用mpstat查看每个CPU的使用情况,查看CPU的使用率或者CPU花在等待io的时间,接着用pidstat定位具体的进程
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线程切换及中断切换,进程切换的开销较大,除了需要保存寄存器和程序计数器中的值还需保存全局变量、栈等到内存中,以便下次运行恢复,而同一进程中的线程切换开销会小很多,只需更新寄存器和线程独有的栈,共享资源如打开的文件、全局变量等无需切换,当硬件中
1.top命令 作用:该命令可以按CPU使用.内存使用和执行时间对任务进行排序,常用来监控系统中占用CPU或内存较高的程序及CPU和内存的负载。 默认视图: 当想看系统负载时,可观察汇总的%CPU中的us用户进程和sy系统进程是否占用CPU很高,相加接近100%就说明占用很高了,有些程序可能得不到及
文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限!!!粘滞位!!!超详解!!!
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Windows、Linux、MacBook_mack book 安装qt
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Linux——了解操作系统的发展历史以及初次体验Linux编程环境
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,个人学习时很认真的记录的,觉得好的麻烦点个赞。
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 OpenSSH_9.3p1 升级到 OpenSSH_9.5p1(亲测无问题,建议收藏)_openssh_9.5p1
文章浏览阅读3.5k次,点赞93次,收藏78次。初识Linux中的线程,理解线程的各种概念,理解进程地址空间中的页表转换,介绍pthread线程库并理解线程库!
文章浏览阅读863次。出现此问题为Linux文件权限问题,解决方案为回到引擎目录执行命令。输入用户密码后运行./UnrealEditor。_increasing per-process limit of core file size to infinity.
文章浏览阅读2.9k次。使用文本编辑器:打开CSV文件,并使用文本编辑器(如Notepad++、Sublime Text、Visual Studio Code等)来查看文件的字符编码格式。通常在编辑器的底部状态栏或设置中可以找到当前编码的显示。请注意,上述方法并非绝对准确,特别是当文件没有明确的编码标识时。因此,如果你发现CSV文件在不同的工具或方法中显示不同的编码格式,可能需要进行进一步的分析和判断,或者尝试使用不同的编码转换方法。该命令将输出文件的MIME类型和编码信息。使用命令行工具:在命令行中,你可以使用。_shell读取csv文件逐行处理
本文介绍了如何在Linux系统中升级gcc版本,以便更好地支持C++11及以上版本的新特性。通过升级gcc,可以提升编译器的功能和性能,获得更好的开发体验。详细的步骤和方法请参考原文链接。
文章浏览阅读4.4k次,点赞6次,收藏19次。Mosquitto是一个开源的MQTT消息代理服务器。MQTT是一个轻量级的、基于发布/订阅模式的消息传输协议。 mosquitto的安装使用比较简单,可以方便的来进行一些测试。_linux mosquitto
文章浏览阅读7.2k次,点赞2次,收藏12次。Linux中,用于根目录下有一个.ssh目录,保存了ssh相关的key和一些记录文件。_~/.ssh/
文章浏览阅读4.5k次,点赞5次,收藏18次。首先需要安装 snmp ,使用下面的命令进行安装安装完毕之后,使用下面的命令查看是否安装成功当命令行显示如图即为安装成功。_snmp工具