【Docker】安装nginx?部署项目

发布时间:2024年01月18日

🥳🥳Welcome 的Huihui's Code World ! !🥳🥳

接下来看看由辉辉所写的关于Docker的相关操作吧

目录

🥳🥳Welcome 的Huihui's Code World ! !🥳🥳

一.安装软件

?0.Java

1.Mysql

2.安装nginx

①nginx相关介绍

②nginx安装

二.本篇难题?


本节是来部署一个项目,所以先将jar包放入进来

一.安装软件

?先是要把mysql容器创建一下,并且创建一个基于jdk的自定义镜像

?0.Java

首先得需要一个java环境

构建镜像

FROM openjdk
WORKDIR /project
COPY spring.jar /project
CMD java -jar spring.jar --mysql.addr=m1
docker build -t spring:v1 .

测试镜像

docker run -itd --name s1 --net mynet --ip 172.20.0.101  -p 8080:8080 spring:v1

在创建两个容器,为了后面的nginx做负载均衡做准备?

docker run -itd --name s2 --net mynet --ip 172.20.0.102 spring:v1
docker run -itd --name s3 --net mynet --ip 172.20.0.103 spring:v1

1.Mysql

拉取镜像

docker pull mysql/mysql-server

创建mysql容器

docker run \
--name m1 \
-v /mysql/conf/my.cnf:/etc/my.cnf \
-v /mysql/data:/var/lib/mysql \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=123456 \
--net mynet \
--ip 172.20.0.200 \
-d mysql/mysql-server:5.7

?上面一段命令的详解

  • docker run:用于创建和启动一个新的容器。
  • --name m1:将容器命名为 "m1",以便后续对容器进行管理和操作。
  • -v /mysql/conf/my.cnf:/etc/my.cnf:将本地主机上的?/mysql/conf/my.cnf?文件挂载到容器的?/etc/my.cnf?路径,用于配置 MySQL 的配置文件。
  • -v /mysql/data:/var/lib/mysql:将本地主机上的?/mysql/data?目录挂载到容器的?/var/lib/mysql?路径,用于存储 MySQL 数据库文件。
  • --privileged=true:为容器提供一些特权,以便在容器内执行特定的操作。
  • -e MYSQL_ROOT_PASSWORD=123456:设置环境变量?MYSQL_ROOT_PASSWORD?的值为 "123456",用于设置 MySQL 数据库的 root 用户密码。
  • --net mynet:将容器连接到名为 "mynet" 的自定义网络中。
  • --ip 172.20.0.200:为容器指定 IP 地址为 "172.20.0.200",以便在自定义网络中进行通信。
  • -d mysql/mysql-server:5.7:使用 MySQL 官方提供的镜像?mysql/mysql-server:5.7?创建并后台运行容器。

授权

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

数据库及脚本的创建

create database shop;

把数据库脚本放入到目录挂载的那个位置

?

一定要在刚刚创建好的数据库里面执行这个脚本哦

?

执行sql脚本

source /var/lib/mysql/book.sql

这时候我们再去访问项目,就可以连接到数据库了

2.安装nginx

①nginx相关介绍

相关概述

Nginx(发音为“engine X”)是一个流行的开源 Web 服务器,也可以用作反向代理、负载均衡器和 HTTP 缓存。它最初由 Igor Sysoev 创建,现在由 NGINX 公司维护。

Nginx 可以同时处理数万个并发连接,而且占用的系统资源非常少。这使得它成为高性能 Web 服务器和应用程序服务器的首选之一。除了 HTTP 和 HTTPS 之外,Nginx 还支持许多其他协议,例如 SMTP、POP3 和 IMAP。

Nginx 的设计强调了模块化和可扩展性,它的核心只包含了一些基本的特性,其他功能都由模块提供。这使得它非常灵活,可以根据需要轻松地添加或删除功能。

负载均衡

?负载均衡是一种分布式计算技术,用于在计算机网络或服务器集群中分配工作负载,以实现资源的优化利用和提高系统性能。当一个系统面临大量的请求时,负载均衡可以将这些请求平均地分配给多个服务器或计算节点,确保每个服务器都能够承担适当的负载。

? ? ? ? 负载均衡的主要目标是避免某些服务器负载过重,而其他服务器处于空闲状态的情况,从而提高整个系统的吞吐量、响应速度和可靠性。通过合理地分发请求,负载均衡可以确保每个服务器都能够充分利用其计算和存储资源,并且在某个服务器出现故障时,其他服务器可以接管其工作,保证系统的连续性和可用性。

动静分离

? 动静分离(Dynamic-Static Separation)是一种将动态内容和静态内容分开处理的技术。在网络应用中,动态内容通常是指根据用户请求生成的、实时变化的数据,而静态内容则是指不变的、相对固定的文件,如HTML、CSS、JavaScript、图片等。

? ? ? ? 动静分离的目的是优化网站或应用程序的性能和可扩展性。通过将静态内容与动态内容分别存储和处理,可以提高系统的响应速度、减轻服务器负载,并降低带宽消耗。

? ? ? ? 动静分离可以提升性能,静态资源可以被缓存,减少了服务器生成内容的压力,加快了网页加载速度。减轻服务器负载,静态资源可以由CDN等专门的服务器提供,减轻了应用服务器的负载。节省带宽成本,通过CDN分发静态内容,可以减少对服务器带宽的需求,降低带宽成本

②nginx安装

拉取镜像

docker pull nginx

创建一个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 mynet \
--ip 172.20.0.104 \
nginx
  • docker run -itd: 运行一个交互式容器,并将其设置为在后台运行。
  • --name n1: 为容器指定一个名称,这里是 "n1"。
  • -v /soft/nginx/conf.d:/etc/nginx/conf.d: 将本地目录?/soft/nginx/conf.d?挂载到容器内的?/etc/nginx/conf.d?目录,用于存放 Nginx 的配置文件。
  • -v /soft/nginx/html:/etc/nginx/html: 将本地目录?/soft/nginx/html?挂载到容器内的?/etc/nginx/html?目录,用于存放 Nginx 的静态网页文件。
  • -p 80:80: 将主机的 80 端口映射到容器的 80 端口,以便可以通过主机的 IP 地址访问 Nginx。
  • --net mynet: 将容器连接到网络?mynet,以便与其他容器进行通信。
  • --ip 172.20.0.104: 为容器分配一个指定的 IP 地址,这里是 172.20.0.104。
  • nginx: 指定要运行的镜像名称,这里是 Nginx。

配置文件

#服务器的集群
upstream tomcatList {  
    server 172.20.0.101:8080 weight=1; 
    server 172.20.0.102:8080 weight=1; 
    server 172.20.0.103:8080 weight=1; 
} 
    
server {

    listen  80;
    server_name  www.wh.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 实现的服务器集群配置示例。该配置使用了反向代理和负载均衡来将请求分发给多个 Tomcat 服务器。

首先,在 upstream 指令中定义了一个名为 tomcatList 的集群,其中包含了三个 Tomcat 服务器的 IP 地址和端口号。每个服务器都有相同的权重,表示它们将平均地接收到相同数量的请求。

然后,在 server 块中配置了监听端口为 80,并设置了域名为 www.wh.com 的虚拟主机。

接下来,location / 指令配置了根目录和默认的索引文件。

error_page 指令配置了处理服务器错误的页面。

location = /50x.html 指令配置了处理 500 错误的页面。

最后,location ~^/api/ 指令使用了正则表达式匹配以 "/api/" 开头的请求,并将这些请求转发到 tomcatList 集群中的 Tomcat 服务器上

静态页面

这个可以自己写一个静态的页面,然后将一整个文件夹王目录挂载的地方放

这时候我们已经可以去访问项目了,因为用nginx做了反向代理,所以可以使用80端口进入,如果不接端口,默认也是80

这里已经可以访问了,但是现在没有数据,这是因为我们这里使用了域名进行访问,如果没有映射这个域名的话,那么就没有数据

域名映射

进入到电脑指定目录

C:\Windows\System32\drivers\etc\hosts

记得修改一下对文件的控制权,不然修改可能会不成功

?

二.本篇难题?

在测试镜像的时候,突然出现了一个错误,在网上查询之后,是要删除自定义的网络重新创建,可结果在创建的时候又出现了那个问题。。。【问题的大概意思就是iptables 命令无法创建链或目标】

👇错误👇

[root@localhost ~]# docker network create --subnet=172.20.0.0/16 mynet
Error response from daemon: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: ?(iptables failed: iptables --wait -t nat -I DOCKER -i br-54d4ec12080f -j RETURN: iptables: No chain/target/match by that name.
?(exit status 1))

解决办法

输入命令service docker restart重启以下Docker即可

service docker restart

好啦,今天的分享就到这了,希望能够帮到你呢!😊😊?

文章来源:https://blog.csdn.net/m0_74315688/article/details/135658229
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。