docker安装nginx的示例

戚薇 Docker 发布时间:2023-06-19 07:52:44 阅读数:10669 1
下文笔者讲述docker安装nginx的方法及示例分享

nginx简介

Nginx(engine x)是一个高性能HTTP和反向代理web服务器
Nginx是一个多进程模式,会有一个master进程和多个worker进程

Nginx中进程管理模式:
    Master进程管理worker进程
    Master进程的功能:
	 1.接收来自外界的信号;
	 2.向各worker进程发送信号;
	 3.监控work进程状态;
	 4.当worker退出后(异常情况下),自动重新启动新worker进程。
	 5.读取nginx的配置文件,判断配置文件的语法等等功能。

worker进程简介及功能:
    多个worker进程之间对等
      竞争来自客户端的请求
      一个请求,只会在一个worker中处理,一个worker进程不会处理其他进程的请求。
    Worker进程个数的设置
      一般设置与机器cpu核数一致
	    (可在nginx.conf的配置文件中进行设置worker_ processes 1)

work的进程的作用:
   1.接收master进程下发的指令,运行任务 
 nginx进程模式的优点:
   1.每个worker进程相互独立
     无需加锁,节省锁开销;
   2.采用独立的进程
      不会相互影响
      一个进程退出
      其他进程服务不会中断;
   3.Worker异常退出
      会导致当前worker上的所有请求失败
      不会影响所有请求
       降低风险
   4.多进程模式对并发的支持
      每个worker只有一个主线程
      采用异步非阻塞方式来处理请求
       使得nginx可以同时处理成千上万个请求
      相比Apache,每个请求会独占一个工作线程,
	     并发上千时,就同时有几千的线程在处理请求
      线程带来的内存占用很大,线程的上下午切换带来的cpu开销也大,性能就上不去 

nginx有这么多优点,
那么我们如何使用docker快速安装一个nginx呢?
下文笔者将一一道来,如下所示

docker安装Nginx的步骤:
    1.检测nginx镜像是否存在
	2.拉起nginx镜像
	3.启动nginx容器
	4.修改配置文件,放入测试文件 
	    (可在镜像启动前,也可在镜像启动后进入容器中修改)
 //查看是否有nginx镜像
     docker images
 //如果没有镜像,可以搜索镜像
     docker search nginx
 //指定版本拉取nginx
     docker pull nginx:1.20.0
 //查看镜像
    docker images
 //创建容器(-d后台运行,-p容器80端口映射到宿主机8080端口,
 //指定名称nginx-test,指定镜像ID:89912324242)
     docker run -d -p 8080:80 --name nginx-java265 89912324242
	   或
     docker run -d -p 8080:80 --name nginx-java265 nginx:1.20.0
 //查看容器是否启动成功
     docker ps
 //尝试访问

nginx启动失败的常见原因

宿主机防火墙未开启指定端口
   临时开启防火墙端口,如下所示
      防火墙未开启:
	   查看防火墙状态
	   systemctl status firewalld
	 启动防火墙
	   systemctl start firewalld 
	 放开8080端口
	   firewall-cmd --zone=public --add-port=8080/tcp

如何修改nginx容器的配置文件

 1.进入容器
     docker exec -it nginx-java265 /bin/bash
2.进入配置文件
     cd /etc/nginx
3.修改配置文件
     vim nginx.conf

nginx容器无vim命令的处理方法

容器中无vim命令
	 同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包(如失败,重启docker)
	    apt-get update 
	 安装vim命令
	    apt-get install vim
 

如何将宿主机上的目录映射到nginx容器中呢?

1.在宿主机创建nginx相关文件夹(/home下)
	mkdir nginx
	cd nginx
	mkdir conf
	mkdir logs
	mkdir html
2.复制容器的配置(将/etc/nginx下所有文件 复制到/home/nginx/conf下 注意: /.)
    docker cp -a nginx-java265:/etc/nginx/.  /home/nginx/conf
3.停止容器
    docker stop nginx-java265
4.删除容器
    docker rm nginx-java265
5.重新创建容器,并映射目录(宿主机目录:docker容器目录)
    docker run -d -p 8080:80 --name nginx-java265 --restart always --privileged=true -v /home/nginx/conf/:/etc/nginx/ -v /home/nginx/logs:/var/log/nginx -v /home/nginx/html:/usr/share/nginx/html 89912324242
6.在html文件夹下放入index.html
 
<!DOCTYPE html>
<html>
<head>
<title>Welcome to HEHAI!</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
	*{
		padding: 0px;
		margin: 0px;
	}
	.time{
		width: 100%;
		height: auto;
		z-index: 99;
		font-size: 60px;
		text-align: center;
		margin-top: 10%;
		color: rgb(94,166,240);
		font-weight: 800;
		
	}
	.container{
		width: 100%;
		height: 100%;
		position: absolute;
		background-size: 100% 100%;
	}
</style>
</head>
<body>
	
<div class="container" >
	<div class="time" id="time">
	</div>	
</div>
</body>
<script type="text/javascript">
	 var mynow = new Date();//默认的获取的是当前时间
              //通过调用日期对象的方法来重新获取当前的日期时间
             //mynow.setFullYear(2016);
             var year = mynow.getFullYear();//获取年
             var month = mynow.getMonth()+1;//获取月
             var day = mynow.getDate();//获取日
             var hour =mynow.getHours();//获取小时
             var minute =mynow.getMinutes();//获取分钟
             var second =mynow.getSeconds();//获取秒
             var strdate = year+"年"+month+"月"+day+"日 "+hour+":"+minute+":"+second;
             document.getElementById("time").innerHTML=strdate;
             console.log(strdate)
</script>
</html>
通过以上的示例,我们即可实现将本机宿主机的目录映射到nginx容器中
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/docker/202306/6836.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者