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容器中
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。