IT俱乐部 Nginx Nginx在胖容器中的部署流程

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='33[0m'

WARN='33[33m'

ERROR='33[31m'

SUCCESS='33[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胖容器部署内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!

本文收集自网络,不代表IT俱乐部立场,转载请注明出处。https://www.2it.club/server/nginx/11662.html
上一篇
下一篇
联系我们

联系我们

在线咨询: QQ交谈

邮箱: 1120393934@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部