1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        一條nginx命令引發(fā)的對(duì)于容器的思考

        共 1987字,需瀏覽 4分鐘

         ·

        2022-01-03 15:44

        去年的時(shí)候?qū)懥艘黄瓌?chuàng)《前后端分離,如何在前端項(xiàng)目中動(dòng)態(tài)插入后端API基地址?(in docker)》, 我自認(rèn)為這篇生產(chǎn)實(shí)踐是對(duì)大前端、 容器化、CI/CD的得意之作。

        對(duì)于前后端分離的web項(xiàng)目,在容器啟動(dòng)的瞬間,通過腳本替換待部署環(huán)境的特定變量,形成了一個(gè)鏡像,多環(huán)境部署的效果。

        Dockerfile ?CMD指示容器運(yùn)行過程:

        • 用真實(shí)值替換前端chunk files中插入的API_BASE_URL字符
        • 使用nginx承載替換后的chunk files
        #?FILE:?Dockerfile
        ...
        EXPOSE?80
        COPY?--from=builder?/react-frontend/replace_api_url.sh?/
        CMD?["sh",?"replace_api_url.sh"]

        下面是replace_api_url.sh的內(nèi)容

        #!/usr/bin/env?sh
        find?'/usr/share/nginx/html'?-name?'*.js'?-exec?sed?-i?-e?'s,API_BASE_URL,'"$API_BASE_URL"',g'?{}?\;
        nginx?-g?"daemon?off;"


        ? 為什么要加 nginx -g "daemon ?off;"

        在常規(guī)的虛機(jī)上,nginx默認(rèn)是以守護(hù)進(jìn)程來運(yùn)行的(daemon on),在后臺(tái)默默提供服務(wù),同時(shí)部署多個(gè)ngxin服務(wù)也不會(huì)相互干擾。

        在容器環(huán)境,one container == ?one ?process,容器要能持續(xù)運(yùn)行,必須有且僅有一個(gè)前臺(tái)進(jìn)程,所以對(duì)nginx進(jìn)程容器化,需要將nginx轉(zhuǎn)為前后進(jìn)程( daemon off)。

        我們能順利執(zhí)行docker run nginx,啟動(dòng)容器并不退出,是因?yàn)閚ginx的官方鏡像Dockerfile[1] 已經(jīng)指定 nginx -g "daemon off;"

        再回到上文,為什么此處腳本中要加"nginx ?-g ?"daemon off;" 呢?

        If you add a custom CMD in the Dockerfile, be sure to include -g daemon off; in the CMD in order for nginx to stay in the foreground, so that Docker can track the process properly (otherwise your container will stop immediately after starting)!

        CMD在執(zhí)行的shell腳本["sh", "replace_api_url.sh"],實(shí)際上是啟動(dòng)shell進(jìn)程來執(zhí)行,腳本執(zhí)行完,進(jìn)程就會(huì)退出(此時(shí)nginx還是一攤死的物理文件),

        所以我們要在腳本內(nèi)再添加nginx -g "daemon off;"?,將整個(gè)shell進(jìn)程轉(zhuǎn)為前臺(tái)能持續(xù)運(yùn)行的進(jìn)程

        Last

        • 容器= 進(jìn)程, 有且僅有一個(gè)前臺(tái)能持續(xù)運(yùn)行的進(jìn)程
        • nginx 默認(rèn)是后臺(tái)守護(hù)進(jìn)程的形式運(yùn)行, nginx -g ?"daemon off;" 以前臺(tái)形式持續(xù)運(yùn)行。

        今天是2021年的最后一天,這也是馬甲哥的134篇原創(chuàng)深度技術(shù)文章,馬甲哥今年時(shí)間有限, 寫的文章連貫性不夠、技能點(diǎn)犬牙交錯(cuò),我自己回頭看之前的文章,一坨翔, 也歡迎童鞋們加我好友(hihuangjun) 進(jìn)群懟我。

        后面會(huì)整理幾篇復(fù)盤文章, 幫助童鞋們整理頭緒,加深印象, 新的一年,忘掉過去的不悅,開啟新氣象。??Happy Year!

        參考資料

        [1]

        nginx的官方鏡像Dockerfile: https://github.com/nginxinc/docker-nginx/blob/master/Dockerfile-alpine.template


        前后端分離,如何在前端項(xiàng)目中動(dòng)態(tài)插入后端API基地址?(in docker)

        掌握了Docker Layer Caching才敢自稱精通Dockerfile

        如何向K8s,Docker-Compose注入鏡像Tag

        如何利用Gitlab-CI持續(xù)部署到遠(yuǎn)程機(jī)器?

        鵝廠二面,Nginx回憶錄

        分享我在前后端分離項(xiàng)目中Gitlab-CI的經(jīng)驗(yàn)

        基于docker-compose的Gitlab CI/CD實(shí)踐&排坑指南

        大揭秘| 我司項(xiàng)目組Gitlab Flow && DevOps流程

        難纏的布隆過濾器,這次終于通透了


        點(diǎn)個(gè)在看你最好看


        瀏覽 47
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            午夜伦情电午夜伦hd无字高清 | 人人干人人插人人操 | 午夜77777 | 国内午夜视频 | 女人做爰全过程免费观看美女臀位 | 亚洲精品婷婷 | 亚洲无| 亚洲小视频在线播放 | 人妻系列无码 | 欧美三级大片在线观看 |