Nginx在胖容器中的部署流程

 更新时间:2024年04月21日 09:23:17   作者:机器瓦力  
胖容器(Fat Container)是一种容器技术的形态,它在传统的轻量级容器基础上进行了扩展和增强,Nginx是一款高性能的HTTP和反向代理web服务器,本文将给大家介绍Nginx在胖容器中的部署流程,需要的朋友可以参考下

背景介绍

胖容器(Fat Container)是一种容器技术的形态,它在传统的轻量级容器基础上进行了扩展和增强。胖容器不仅包含了应用程序及其依赖项,还集成了大量的管理和调度组件,从而提供了更丰富的功能和更强大的性能。

Nginx是一款高性能的HTTP和反向代理web服务器

开发注意

制作一个完整的胖容器需要多人参与,每个人都得负责好自身编写的Dockerfile和Shell,经过环境测试后再合并进大的流程中。配置的读取应用、服务的启动顺序、依赖之间的关系都得把控,更重要的是关键日志的打印。

Nginx部分的编写,也是要先用FROM nginx:latest作为基础镜像测试完这部分业务流程后再合并进主Dockerfile,争取一遍过负责流程。

Nginx容器

编写Dockerfile制作Nginx镜像

# 使用官方的Nginx作为父镜像  
FROM nginx:latest  
  
# 将业务dist复制进容器/usr/share/nginx/html/  
COPY /opt/portal/dist /usr/share/nginx/html/  
  
# 如果需要自定义Nginx配置,可以将配置文件复制到容器中  
# COPY /opt/portal/nginx.conf /etc/nginx/nginx.conf  
  
# 如果需要暴露Nginx的端口到宿主机,可以使用EXPOSE指令  
# EXPOSE 80  
  
# 自定义命令,在容器启动时执行  
# CMD ["nginx", "-g", "daemon off;"]

根据Dockerfile构建Nginx镜像docker build -t portal-nginx-image .

启动容器

  • 宿主机和容器中做8080:80端口映射
  • 宿主机业务代码和容器中业务代码做卷映射(/dist)
docker run --name portal-nginx-image -d -p 8080:80 -v /opt/portal/dist:/usr/share/nginx/html/dist

业务胖容器

业务胖容器的基础镜像为centos-x86_64:centos7,最原始的操作系统镜像。意味着要进行大量的工具包、依赖包安装,配置集成。Nginx作为整个业务层的最上层,Dockerfile编写流程放到最后面,CMD命令只会执行最后一个。多个服务的动态配置启动流程放在shell脚本中处理。

# 新建portal目录
RUN mkdir /opt/portal

# 安装nginx.tar.gz
COPY app/portal-packages/nginx.tar.gz /opt/portal

RUN tar -xvf /opt/portal/nginx.tar.gz -C /opt/portal/

RUN rm -f /opt/portal/nginx.tar.gz

# 安装业务包dist.tag.gz
RUN rm -rf /opt/portal/nginx/html/dist

COPY app/portal-packages/dist.tar.gz /opt/portal/nginx/html/

RUN tar -xvf /opt/portal/nginx/html/dist.tar.gz -C /opt/portal/nginx/html/

RUN rm -f /opt/portal/nginx/html/dist.tar.gz

# 应用定制nginx.conf
RUN rm -f /opt/portal/nginx/conf/nginx.conf

COPY app/portal-packages/nginx.conf /opt/portal/nginx/conf/

# 开放运行权限
RUN chmod 777 /opt/portal/nginx/sbin/nginx
CMD ["/usr/bin/app_start"]

/usr/bin/app_start中执行/usr/bin/web_start,将启动流程串起来

Shell脚本

Web的Shell脚本中主要用于获取配置的端口,替换进nginx.conf中启动Nginx服务

#!/bin/bash

RESET='\033[0m'

WARN='\033[33m'

ERROR='\033[31m'

SUCCESS='\033[32m'

# 配置文件路径
CONF_FILE="/var/lib/fitos/config_files/transfer.conf"

# 配置参数名
CONFIG_PARAM="nginx_port"

# 使用grep查找配置行,并使用awk提取等号后面的值
CONFIG_PORT=$(grep -E "^${CONFIG_PARAM} =" "${CONF_FILE}" | awk -F'=' '{print $2}')

# 去除配置值两边的空白字符(如果有的话)
CONFIG_PORT=$(echo "${CONFIG_PORT}" | sed 's/^[ \t]*//;s/[ \t]*$//')

# Nginx配置文件路径
NGINX_CONF_PATH=/opt/portal/nginx/conf/nginx.conf

# 使用sed命令替换nginx.conf中的监听端口
if [ -n "$CONFIG_PORT" ]; then
   sed -i "s/listen [0-9]\+ default_server;/listen ${CONFIG_PORT} default_server;/g" ${NGINX_CONF_PATH}
else
   echo -e "${WARN}未配置$CONF_FILE中nginx_port,将按照默认port:80启动服务${RESET}"
fi

# 检查Nginx配置文件语法是否正确
/opt/portal/nginx/sbin/nginx -t
if [ $? -ne 0 ]; then
    echo -e "${ERROR}Nginx配置文件语法错误,请检查nginx.conf文件内容${RESET}"
    exit 1
fi

# 重新加载Nginx配置  
/opt/portal/nginx/sbin/nginx  -s reload  
if [ $? -ne 0 ]; then  
    echo "Nginx重启失败,尝试启动Nginx..."  
    # 如果重新加载失败,尝试直接启动Nginx  
    /opt/portal/nginx/sbin/nginx  
    if [ $? -ne 0 ]; then  
        echo -e "${ERROR}Nginx启动失败,请检查错误日志${RESET}"  
        exit 1  
    else
        echo -e "${SUCCESS}Nginx服务启动成功${RESET}"
    fi  
else  
    echo -e "${SUCCESS}Nginx服务重启成功${RESET}"  
fi

最终制作出的镜像启动的胖容器会将所有服务拉起来,整个系统搭建完成。

到此这篇关于Nginx在胖容器中的部署流程的文章就介绍到这了,更多相关Nginx胖容器部署内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • nginx安全防护与https部署全过程

    nginx安全防护与https部署全过程

    这篇文章主要介绍了nginx安全防护与https部署全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • Rhit高效可视化Nginx日志查看工具

    Rhit高效可视化Nginx日志查看工具

    一个格式化 Nginx 日志,可快速阅读、查看 Nginx 日志的工具。 可以每秒处理百万行日志数据,感兴趣的可以了解一下
    2021-10-10
  • 详解Nginx 虚拟主机配置的三种方式(基于IP)

    详解Nginx 虚拟主机配置的三种方式(基于IP)

    Nginx配置虚拟主机支持3种方式主要有基于IP的虚拟主机配置,基于端口的虚拟主机配置,基于域名的虚拟主机配置。本文主要介绍了基于IP配置的实现,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • Apache和Nginx的优缺点详解_动力节点Java学院整理

    Apache和Nginx的优缺点详解_动力节点Java学院整理

    Nginx和Apache一样,都是HTTP服务器软件,在功能实现上都采用模块化结构设计,都支持通用的语言接口。下面通过本文给大家分享Apache和Nginx比较 功能对比,感兴趣的朋友参考下吧
    2017-08-08
  • Windows 系统下 Nginx 的配置步骤详解

    Windows 系统下 Nginx 的配置步骤详解

    Nginx 是一款功能强大的软件,在互联网领域有广泛应用,简单来说,它就像一个聪明的交通指挥员,能让网站运行得更高效、更稳定,这篇文章主要介绍了Windows系统下Nginx的配置步骤详解,需要的朋友可以参考下
    2025-06-06
  • Nginx内存不足对Web应用的影响及解决方法

    Nginx内存不足对Web应用的影响及解决方法

    本文详细介绍了Nginx内存不足对Web应用的影响,包括连接和请求处理失败、现有服务中断、性能严重下降、Nginx进程异常、触发操作系统OOMKiller、缓存失效和日志丢失或写入失败,文章还提供了诊断内存不足的监控工具和关键指标,需要的朋友可以参考下
    2026-03-03
  • 502 Bad Gateway产生的原因及8个详细的解决方法总结

    502 Bad Gateway产生的原因及8个详细的解决方法总结

    Nginx 502 Bad Gateway的错误已经遇到好几次了,这里做一下记录,备忘,下面这篇文章主要给大家介绍了关于502 Bad Gateway产生的原因及8个详细的解决方法,文中的介绍非常详细,需要的朋友可以参考下
    2023-05-05
  • Nginx隐藏服务器端各类信息的方法

    Nginx隐藏服务器端各类信息的方法

    这篇文章主要介绍了Nginx隐藏服务器端各类信息的方法,包括隐藏HTTP头信息和PHP版本号等等,需要的朋友可以参考下
    2015-07-07
  • nginx代理参数proxy_pass的实现

    nginx代理参数proxy_pass的实现

    proxy_pass参数用于配置反向代理,本文主要介绍了nginx代理参数proxy_pass的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04
  • Nginx配置跨域请求Access-Control-Allow-Origin * 详解

    Nginx配置跨域请求Access-Control-Allow-Origin * 详解

    这篇文章主要给大家介绍了关于Nginx配置跨域请求Access-Control-Allow-Origin * 的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Nginx具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06

最新评论