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

news2024/12/25 10:15:01

一、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目录

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即可

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

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

相关文章

项目经理进阶之路:如何应对不同阶段的挑战?

最近看到一个帖子,有网友提问,“项目经理的职业发展会经历哪几个阶段?不同阶段需要关注什么?又分别会遇到哪些挑战?“这个帖子引发了广大项目经理们的热议,大家纷纷吐槽,自己遇到了职业瓶颈、询…

Qt SDL2播放Wav音频

这里介绍两种方法来实现Qt播放Wav音频数据。 方法一&#xff1a;使用QAudioOutput pro文件中加入multimedia模块。 #include <QApplication> #include <QFile> #include <QAudioFormat> #include <QAudioOutput>int main(int argc, char *argv[]) {…

RK3566 linux修改CMA size

1、进入内核配置界面 执行命令&#xff1a; cd kernel make ARCHarm64 menuconfig 2、搜索CONFIG_CMA_SIZE_MBYTES 在配置界面输入/搜索CONFIG_CMA_SIZE_MBYTES&#xff0c;结果如下&#xff1a; 根据提示进入以下界面&#xff1a; 修改Size in Mega Bytes的值。

【时间复杂度】时间复杂度优化法则简讲

一、引言 时间复杂度是衡量算法运行效率的一项重要指标&#xff0c;它描述了随着输入规模的增加&#xff0c;算法的执行时间如何增长。在算法设计与分析中&#xff0c;我们经常面临着优化时间复杂度的任务&#xff0c;以便提高程序的性能。本博客将深入探讨时间复杂度的优化法…

UJA1169A恢复出厂设置(Restoring factory preset values)

UJA1169A是一款CAN芯片&#xff0c;同时又带有硬件看门狗的功能。出厂默认是Forced Normal模式&#xff0c;此时看门狗是禁用的。CAN通信的正常功能是在Forced Normal/Normal模式下才好用的&#xff0c;Normal模式下需要配置。包含位FNMC&#xff08;地址74h&#xff09;的寄存…

Uniapp多选Popup(弹出层)

uniapp中多选组件很少&#xff0c;故个人简单开发了一个&#xff0c;可简单使用&#xff0c;也可根据个人需求稍微改进 支持的功能 单选多选&#xff08;默认&#xff09;限制选择数量默认选中禁用选项 属性说明 属性默认值说明singlefalsetrue为开启单选&#xff0c;否则为…

【网络安全】2024年一个漏洞4w+,网安副业挖SRC漏洞,躺着把钱挣了!

一个漏洞奖励2w&#xff0c;这是真实的嘛&#xff01; 作为资深白帽&#xff0c;入行网安这些年也一直在接私活&#xff0c;副业赚的钱几乎是我工资的三倍&#xff01;看到最近副业挖漏洞的内容非常火爆&#xff0c;我便决定将自己的经验分享出来&#xff0c;带我的粉丝们一起…

css3 纯代码案例

css3 纯代码案例 前言渐变之美1.1 纯CSS3实现的渐变背景1.2 使用多重颜色和方向打造丰富渐变效果1.3 渐变色停留动画的巧妙运用 纯CSS图形绘制2.1 使用border属性制作三角形、梯形等形状伪类箭头图标2.2 利用transform创建旋转、缩放的图形 浮动的阴影敲代码css准备reset 样式复…

JS封装本地缓存的设置,读取,移除,清空方法及使用示例

我封装了一个JS通用的缓存管理对象&#xff0c;可以提供缓存的设置&#xff0c;读取&#xff0c;移除&#xff0c;清空操作&#xff0c;使用也很方便&#xff0c;封装方法的代码在最下方。 Q: 为什么不直接用原生的缓存方法&#xff0c;要封装&#xff1f; A1:原生的缓存管理…

MySQL篇—性能压测工具mysqlslap介绍

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…

SpringBoot参数校验@Validated、@Valid

SpringBoot参数校验Validated、Valid&#xff08;javax.validation&#xff09; 一、应用场景 在实际开发中&#xff0c;前端校验并不安全&#xff0c;任何人都可以通过接口来调用我们的服务&#xff0c;就算加了一层token的校验&#xff0c;有心人总会转空子&#xff0c;来传…

如何禁用WordPress站点的管理员电子邮件验证或修改检查频率?

今天boke112百科登录某个WordPress站点时&#xff0c;又出现“管理员邮件确认”的提示&#xff0c;要求确认此站点的管理员电子邮箱地址是否仍然正确。具体如下图所示&#xff1a; 如果点击“稍后提醒我”&#xff0c;那么管理员邮件验证页面就会在3天后重新显示。 说实话&…

【JVM】JVM概述

JVM概述 基本介绍 JVM&#xff1a;全称 Java Virtual Machine&#xff0c;即 Java 虚拟机&#xff0c;一种规范&#xff0c;本身是一个虚拟计算机&#xff0c;直接和操作系统进行交互&#xff0c;与硬件不直接交互&#xff0c;而操作系统可以帮我们完成和硬件进行交互的工作特…

大数据开发之Hadoop(MapReduce)

第 1 章&#xff1a;MapReduce概述 1.1 MapReduce定义 MapReduce是一个分布式运算程序的编程框架&#xff0c;是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序&#xff0c;并…

我的隐私计算学习——联邦学习(4)

本篇笔记部分内容来源于这位老师的知识分享【公众号&#xff1a;秃顶的码农】&#xff0c;我从他的资料里学到了很多&#xff0c;期间还私信询问了一些困惑&#xff0c;都得到了老师详细的答复&#xff0c;相当nice&#xff01; &#xff08;六&#xff09;横向联邦学习 — 梯度…

学习VUE-安装环境

下载安装Node.js 官网下载最新版本&#xff1a;https://nodejs.org/en/download/ 解压zip包 由于node.js默认安装了npm所以不用额外配置全局命令就可以使用npm命令 在cmd中输入node -v 和 npm -v就可以得到版本信息 配置一下目录&#xff1a; node.js环境配置 配置镜像 安装…

命令行参数环境变量和进程空间地址

文章目录 命令行参数环境变量进程地址空间 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 点击跳转到网站。 命令行参数 什么是命令行参数&#xff1f; 我…

✅稳定检索,高校嘉宾出席,2024年机械应用与机器视觉研究国际会议(ICMAMVR 2024)

2024年机械应用与机器视觉研究国际会议(ICMAMVR 2024) 数据库&#xff1a;EI,CPCI,CNKI,Google Scholar 等 2024 International Conference on Mechanical Applications and Machine Vision Research(ICMAMVR 2024) 一、【会议简介】 &#x1f389;&#x1f389; 2024年机械应用…

运维平台介绍:视频智能运维平台的视频质量诊断分析和监控中心

目 录 一、概述 二、框架图 1、图像过亮检测&#xff1a; 2、图像模糊检测&#xff1a; 3、画面冻结检测&#xff1a; 4、信号缺失检测&#xff1a; 5、图像偏色检测&#xff1a; 6、噪声干扰检测&#xff1a; 7、条纹干扰检测&#xff1a; 三、监控中心模…

electron+vite+vue3 快速入门教程

文章目录 前言一、electron是什么&#xff1f;二、electron 进程模型1.主进程2.渲染进程3.预加载脚本4.进程通信4.1 sendon&#xff08;单向&#xff09;4.2 invokehandle (双向)4.3 主进程向渲染进程发送事件 三、窗口创建与应用事件四、技术栈和构建工具五、electron-vite安装…