Nginx在胖容器中的部署流程
背景介紹
胖容器(Fat Container)是一種容器技術(shù)的形態(tài),它在傳統(tǒng)的輕量級容器基礎(chǔ)上進行了擴展和增強。胖容器不僅包含了應(yīng)用程序及其依賴項,還集成了大量的管理和調(diào)度組件,從而提供了更豐富的功能和更強大的性能。
Nginx是一款高性能的HTTP和反向代理web服務(wù)器
開發(fā)注意
制作一個完整的胖容器需要多人參與,每個人都得負責好自身編寫的Dockerfile和Shell,經(jīng)過環(huán)境測試后再合并進大的流程中。配置的讀取應(yīng)用、服務(wù)的啟動順序、依賴之間的關(guān)系都得把控,更重要的是關(guān)鍵日志的打印。
Nginx部分的編寫,也是要先用FROM nginx:latest作為基礎(chǔ)鏡像測試完這部分業(yè)務(wù)流程后再合并進主Dockerfile,爭取一遍過負責流程。
Nginx容器
編寫Dockerfile制作Nginx鏡像
# 使用官方的Nginx作為父鏡像 FROM nginx:latest # 將業(yè)務(wù)dist復(fù)制進容器/usr/share/nginx/html/ COPY /opt/portal/dist /usr/share/nginx/html/ # 如果需要自定義Nginx配置,可以將配置文件復(fù)制到容器中 # COPY /opt/portal/nginx.conf /etc/nginx/nginx.conf # 如果需要暴露Nginx的端口到宿主機,可以使用EXPOSE指令 # EXPOSE 80 # 自定義命令,在容器啟動時執(zhí)行 # CMD ["nginx", "-g", "daemon off;"]
根據(jù)Dockerfile構(gòu)建Nginx鏡像docker build -t portal-nginx-image .
啟動容器
- 宿主機和容器中做8080:80端口映射
- 宿主機業(yè)務(wù)代碼和容器中業(yè)務(wù)代碼做卷映射(/dist)
docker run --name portal-nginx-image -d -p 8080:80 -v /opt/portal/dist:/usr/share/nginx/html/dist
業(yè)務(wù)胖容器
業(yè)務(wù)胖容器的基礎(chǔ)鏡像為centos-x86_64:centos7,最原始的操作系統(tǒng)鏡像。意味著要進行大量的工具包、依賴包安裝,配置集成。Nginx作為整個業(yè)務(wù)層的最上層,Dockerfile編寫流程放到最后面,CMD命令只會執(zhí)行最后一個。多個服務(wù)的動態(tài)配置啟動流程放在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 # 安裝業(yè)務(wù)包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 # 應(yīng)用定制nginx.conf RUN rm -f /opt/portal/nginx/conf/nginx.conf COPY app/portal-packages/nginx.conf /opt/portal/nginx/conf/ # 開放運行權(quán)限 RUN chmod 777 /opt/portal/nginx/sbin/nginx CMD ["/usr/bin/app_start"]
在/usr/bin/app_start中執(zhí)行/usr/bin/web_start,將啟動流程串起來
Shell腳本
Web的Shell腳本中主要用于獲取配置的端口,替換進nginx.conf中啟動Nginx服務(wù)
#!/bin/bash
RESET='\033[0m'
WARN='\033[33m'
ERROR='\033[31m'
SUCCESS='\033[32m'
# 配置文件路徑
CONF_FILE="/var/lib/fitos/config_files/transfer.conf"
# 配置參數(shù)名
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中的監(jiān)聽端口
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啟動服務(wù)${RESET}"
fi
# 檢查Nginx配置文件語法是否正確
/opt/portal/nginx/sbin/nginx -t
if [ $? -ne 0 ]; then
echo -e "${ERROR}Nginx配置文件語法錯誤,請檢查nginx.conf文件內(nèi)容${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服務(wù)啟動成功${RESET}"
fi
else
echo -e "${SUCCESS}Nginx服務(wù)重啟成功${RESET}"
fi
最終制作出的鏡像啟動的胖容器會將所有服務(wù)拉起來,整個系統(tǒng)搭建完成。
到此這篇關(guān)于Nginx在胖容器中的部署流程的文章就介紹到這了,更多相關(guān)Nginx胖容器部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Apache和Nginx的優(yōu)缺點詳解_動力節(jié)點Java學(xué)院整理
Nginx和Apache一樣,都是HTTP服務(wù)器軟件,在功能實現(xiàn)上都采用模塊化結(jié)構(gòu)設(shè)計,都支持通用的語言接口。下面通過本文給大家分享Apache和Nginx比較 功能對比,感興趣的朋友參考下吧2017-08-08
Windows?系統(tǒng)下?Nginx?的配置步驟詳解
Nginx?是一款功能強大的軟件,在互聯(lián)網(wǎng)領(lǐng)域有廣泛應(yīng)用,簡單來說,它就像一個聰明的交通指揮員,能讓網(wǎng)站運行得更高效、更穩(wěn)定,這篇文章主要介紹了Windows系統(tǒng)下Nginx的配置步驟詳解,需要的朋友可以參考下2025-06-06
Nginx內(nèi)存不足對Web應(yīng)用的影響及解決方法
本文詳細介紹了Nginx內(nèi)存不足對Web應(yīng)用的影響,包括連接和請求處理失敗、現(xiàn)有服務(wù)中斷、性能嚴重下降、Nginx進程異常、觸發(fā)操作系統(tǒng)OOMKiller、緩存失效和日志丟失或?qū)懭胧?文章還提供了診斷內(nèi)存不足的監(jiān)控工具和關(guān)鍵指標,需要的朋友可以參考下2026-03-03
502?Bad?Gateway產(chǎn)生的原因及8個詳細的解決方法總結(jié)
Nginx?502?Bad?Gateway的錯誤已經(jīng)遇到好幾次了,這里做一下記錄,備忘,下面這篇文章主要給大家介紹了關(guān)于502?Bad?Gateway產(chǎn)生的原因及8個詳細的解決方法,文中的介紹非常詳細,需要的朋友可以參考下2023-05-05
nginx代理參數(shù)proxy_pass的實現(xiàn)
proxy_pass參數(shù)用于配置反向代理,本文主要介紹了nginx代理參數(shù)proxy_pass的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-04-04
Nginx配置跨域請求Access-Control-Allow-Origin * 詳解
這篇文章主要給大家介紹了關(guān)于Nginx配置跨域請求Access-Control-Allow-Origin * 的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Nginx具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06

