基于Docker的Nginx部署教程
本教程基于Docker部署Nginx,演示部署Nginx的版本为1.22.0,操作系统为CentOS7,其部署方式包括以下两种方式:
- 单机部署
- 自定义配置模块部署
什么是Nginx
Nginx (engine x) 是一款高性能、轻量级、稳定性高、并发性好的 Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。 广泛应用于Http服务、负载均衡、反向代理等实用场景。其配置简单、配置语法简洁,社区活跃,学习成本低等优点,使其成为最受欢迎的的服务器应用之一。
部署前的注意
在进行部署之前,最好对服务器的防火墙进行相关处理,命令如下,请按需使用
# 开放8888端口,端口自定义,我这里以8888为例
firewall-cmd --zone=public --add-port=8888/tcp --permanent#关闭8888端口
firewall-cmd --zone=public --remove-port=8888/tcp --permanent# 配置立即生效
firewall-cmd --reload# 查看防火墙所有开放的端口
firewall-cmd --zone=public --list-ports
firewall-cmd --zone=public --list-all
# 关闭防火墙 如果不想管控端口,直接关闭系统防火墙,啥都能通,但安全性不强,不建议。
systemctl stop firewalld.service
systemctl start firewalld.service
systemctl restart firewalld.service
# 查看防火墙状态
firewall-cmd --state# 查看监听的端口netstat-lnpt# 检查端口被哪个进程占用netstat-lnpt|grep8888# 查看进程的详细信息ps8888
单机部署Nginx
拉取Nginx镜像
# 拉取Nginx镜像,版本使用1.22.0docker pull nginx:1.22.0
# 查看拉取镜像docker images
镜像拉取成功则如下图所示
创建主本地目录
# 创建配置目录mkdir-p /data/nginx/conf
# 创建日志目录mkdir-p /data/nginx/log
# 创建前端显示目录mkdir-p /data/nginx/html
#对nginx本地文件进行递归赋权chmod-R755 /data/nginx
如下图
部署Nginx容器
1.生成容器
# 先简单启动容器docker run -p80:80 --name nginx -d nginx:1.22.0
# 进入容器内部dockerexec-it 容器id /bin/bash
2.复制容器配置到宿主机
# 将容器nginx.conf文件复制到宿主机dockercp nginx:/etc/nginx/nginx.conf /data/nginx/conf/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机dockercp nginx:/etc/nginx/conf.d /data/nginx/conf/conf.d
# 将容器中的html文件夹复制到宿主机dockercp nginx:/usr/share/nginx/html/index.html /data/nginx/html
dockercp nginx:/usr/share/nginx/html/50x.html /data/nginx/html
3.重启容器
# 使用数据卷重启nginx容器docker run -p80:80 --name nginx -v /data/nginx/conf/nginx.conf:/etc/nginx/conf/nginx.conf -v /data/nginx/conf/conf.d:/etc/nginx/conf.d -v /data/nginx/log:/var/log/nginx -v /data/nginx/html:/usr/share/nginx/html -d nginx:1.22.0
查看容器是否启动成功
4.测试验证
访问服务器ip:80端口(请先保证防火墙的端口已经打开,或者已经关闭),如下图所示,则安装成功。
5.Nginx配置
进入本地宿主机配置目录,由于我们启用的是include模式,所以在内部创建了conf.d目录
我们设置一个简单测试的配置,默认只有一个
default.conf
配置文件,如果有其他配置需要可以在conf.d目录下继续添加配置,我们在这里增加一个
mydoc.conf
的配置文件
配置mydoc.conf
server {
listen 8001;
listen [::]:8001;
server_name localhost;
location / {
root /usr/share/nginx/html/mydoc;
index index.html index.htm;
}
}
配置default.conf
server {
listen 80;
listen [::]:80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html/home;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html/home;
}
# 配置mydoc的测试代理
location /mydoc {
proxy_pass http://127.0.0.1:8001/;
proxy_set_header Host $host;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html/mydoc;
# #fastcgi_pass 127.0.0.1:9000;
# fastcgi_pass 192.168.2.103:9000;
# fastcgi_index index.php;
# #fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
在/data/nginx/html的目录下创建对应的mydoc目录,并在目录内创建一个index.html,我们这边直接复制根目录下的index.html进行一些修改作为标识,如下图:
构建完成后,我们需要重启Nginx容器,这里多提一点,我们在使用二进制部署的Nginx时,会使用
Nginx -s reload
的重载命令,那么Docker部署的Nginx的重载命令如下:
dockerexec-it[容器id/容器名称] nginx -s reload
执行完毕后,我们测试访问
至此Nginx简单的单机部署完成。后续大家可以在部署好的容器进行配置修改,以适应新的服务需求。
自定义配置模块部署
Nginx之所以能够适应很多复杂的应用场景,在于他的具有扩展配置模块的能力。开发者根据业务场景组合配置扩展模块就变得尤为重要。开发者往往需要编译配置Nginx的很多扩展模块,比如stream、http_stub_status_module、http_ssl_module等,来适应变化的需求场景。
由于直接使用Docker部署的Nginx本身就开启可很多模块。虽然这些模块很多有用,但是没用到的也很多。如下图:
如果觉得以上这些开启的模块够用,那么可以直接使用。
1.自制对应镜像
我们使用Dockerfile制作定制化的Nginx镜像,这里提供两种Dockerfile
编译好的Nginx直接打包成镜像
一般用于已经有nginx服务的情况,直接将以前的编译过的包直接封装进入Docker镜像中就可以了,代码如下:
# 使用Centos7作为基础镜像
FROM centos:7
# 安装必要的工具
RUN yum -y update && yum -y install tar && yum clean all
# 将已编译好的 Nginx 文件复制到容器中
COPY nginx.tar /usr/local/
# 进入 Nginx 安装目录
WORKDIR /usr/local/
# 解压 Nginx 包
RUN tar -xvf nginx.tar
# 暴露 Nginx 端口
EXPOSE 80
# 在容器启动时运行 Nginx
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
直接打包时编译nginx镜像
这个直接使用创建对应镜像即可,代码如下:
# 使用CentOS 7作为基础镜像
FROM centos:7
# 安装编译所需的依赖包
RUN yum update -y && \
yum install -y gcc make zlib-devel pcre-devel openssl-devel wget && \
yum clean all
# 下载Nginx源码并解压缩
RUN wget http://nginx.org/download/nginx-1.22.0.tar.gz && \
tar -zxvf nginx-1.22.0.tar.gz
# 进入Nginx源码目录,编译并安装
RUN cd nginx-1.22.0 && \
./configure --prefix=/usr/local/nginx --with-stream --with-http_stub_status_module --with-http_ssl_module && \
make && \
make install
# 清理安装过程中的临时文件
RUN rm -rf nginx-1.22.0.tar.gz nginx-1.22.0
# 设置启动命令
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
将以上的Dockerfile文件选择一种直接执行
Docker build -t my_new_nginx_images .
执行结果如下
2.启动容器
执行启动容器命令
# 启动容器docker run --name my_new_nginx -d-p80:80 my_new_nginx_images
3.验证测试
版权归原作者 懒斯落特 所有, 如有侵权,请联系我们删除。