Nginx在胖容器中的部署流程
背景介紹
胖容器(Fat Container)是一種容器技術(shù)的形態(tài),它在傳統(tǒng)的輕量級容器基礎(chǔ)上進行了擴展和增強。胖容器不僅包含了應(yīng)用程序及其依賴項,還集成了大量的管理和調(diào)度組件,從而提供了更豐富的功能和更強大的性能。
Nginx是一款高性能的HTTP和反向代理web服務(wù)器
開發(fā)注意
制作一個完整的胖容器需要多人參與,每個人都得負(fù)責(zé)好自身編寫的Dockerfile和Shell,經(jīng)過環(huán)境測試后再合并進大的流程中。配置的讀取應(yīng)用、服務(wù)的啟動順序、依賴之間的關(guān)系都得把控,更重要的是關(guān)鍵日志的打印。
Nginx部分的編寫,也是要先用FROM nginx:latest
作為基礎(chǔ)鏡像測試完這部分業(yè)務(wù)流程后再合并進主Dockerfile,爭取一遍過負(fù)責(zé)流程。
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,將按照默認(rèn)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)文章
通過Nginx+Tomcat+Redis實現(xiàn)持久會話
這篇文章主要介紹了通過Nginx+Tomcat+Redis實現(xiàn)持久會話的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-11-11Nginx+Tomcat搭建高性能負(fù)載均衡集群的實現(xiàn)方法
這篇文章主要介紹了Nginx+Tomcat搭建高性能負(fù)載均衡集群的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03高性能WEB開發(fā) nginx HTTP服務(wù)器篇
新產(chǎn)品為了效果,做的比較炫,用了很多的圖片和JS,所以前端的性能是很大的問題,分篇記錄前端性能優(yōu)化的一些小經(jīng)驗。2010-05-05Nginx rewrite跳轉(zhuǎn)應(yīng)用場景詳解
這篇文章主要介紹了Nginx rewrite跳轉(zhuǎn)應(yīng)用場景詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11Nginx+Lua+Redis構(gòu)建高并發(fā)Web應(yīng)用
使用Nginx+Lua+Redis來構(gòu)建高并發(fā)Web應(yīng)用,Curl請求Nginx,Nginx通過Lua查詢Redis,返回json數(shù)據(jù)。2013-10-10