docker安装nginx的示例
下文笔者讲述docker安装nginx的方法及示例分享
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容器中
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


