亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Web服務器 > 正文

如何使用docker部署前端應用的方法步驟

2024-09-01 13:56:47
字體:
來源:轉載
供稿:網友

docker 變得越來越流行,它可以輕便靈活地隔離環境,進行擴容,方便運維管理。對開發者也更方便開發,測試與部署。
最重要的是, 當你面對一個陌生的項目,你可以照著 Dockerfile,甚至不看文檔(文檔也不一定全,全也不一定對)就可以很快讓它在本地跑起來。

現在很強調 devops 的理念,我把 devops 五個大字放在電腦桌面上,格物致知了一天?;砣婚_朗,devops 的意思就是寫一個 Dockerfile 去跑應用(開玩笑。

這里介紹如何使用 Docker 部署前端應用。千里之行,始于足下,足下的意思就是,先讓它能夠跑起來。

先讓它跑起來

首先,簡單介紹一下一個典型的前端應用部署流程

  1. npm install, 安裝依賴
  2. npm run build,編譯,打包,生成靜態資源
  3. 服務化靜態資源

介紹完部署流程后,簡單寫一個 Dockerfile

FROM node:alpine# 代表生產環境ENV PROJECT_ENV productionWORKDIR /codeADD . /codeRUN npm install && npm run build && npm install -g http-serverEXPOSE 80CMD http-server ./public -p 80

現在這個前端服務已經跑起來了。接下來你可以完成部署的其它階段了。一般情況下,以下就成了運維的工作了,不過,拓展自己的知識邊界總是沒錯的。

  • 使用 nginx 或者 traefik 做反向代理
  • 使用 kubernetes 或者 compose 等做編排。
  • 使用 gitlab ci 或者 drone ci 等做 CI/CD

這時鏡像存在有兩個問題,導致每次部署時間過長,不利于產品的快速交付

  • 構建鏡像時間過長
  • 構建鏡像大小過大,1G+

從 dependencies 和 devDependencies 下手

陸小鳳說過,一個前端程序員若是每天工作八個小時,至少有兩個小時是白白浪費了的。一個小時用來 npm install,另一個小時用來 npm run build。

對于每次部署,如果能夠減少無用包的下載,便能夠節省很多鏡像構建時間。eslint,mocha,chai 等代碼風格測試模塊可以放到 devDependencies 中。在生產環境中使用 npm install --production 裝包。

關于兩者的區別可以參考文檔 https://docs.npmjs.com/files/package.json.html#dependencies

FROM node:alpineENV PROJECT_ENV productionWORKDIR /codeADD . /codeRUN npm install --production && npm run build && npm install -g http-serverEXPOSE 80CMD http-server ./public -p 80

好像是快了那么一點點。

我們注意到,相對于項目的源文件來講,package.json 是相對穩定的。如果沒有新的安裝包需要下載,則再次構建鏡像時,無需重新裝包。則可以在 npm install 上節省一半的時間。

利用鏡像緩存

對于 ADD 來講,如果需要添加的內容沒有發生變化,則可以利用緩存。把 package.json 與源文件分隔開寫入鏡像是一個很好的選擇。目前,如果沒有新的安裝包更新的話,可以節省一半時間

FROM node:alpineENV PROJECT_ENV production# http-server 不變動也可以利用緩存RUN npm install -g http-serverWORKDIR /codeADD package.json /codeRUN npm install --productionADD . /codeRUN npm run buildEXPOSE 80CMD http-server ./public -p 80

關于利用緩存有更多細節,需要特別注意一下,如 RUN git clone <repo> 的緩存此類

參考官方文檔 https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#leverage-build-cache

多階段構建

得益于緩存,現在鏡像構建時間已經快了不少。但是,鏡像的體積依舊過于龐大,也會增加每次的部署時間
考慮下每次 CI 部署的流程

  1. 在構建服務器構建鏡像
  2. 把鏡像推至鏡像倉庫服務器,
  3. 在生產服務器拉取鏡像,啟動容器

顯而易見,鏡像體積過大造成傳輸效率低下,增加每次部署的延時。

即使,構建服務器與生產服務器在同一節點下,沒有延時的問題。減少鏡像體積也能夠節省磁盤空間

關于鏡像體積的過大,很大一部分是因為node_modules 臭名昭著的體積

docker,部署,前端應用

但最后我們只需要 public 文件夾下的內容,對于源文件以及node_modules下文件,占用體積過大且不必要,造成浪費。
此時可以利用 Docker 的多階段構建,僅來提取編譯后文件

參考官方文檔 https://docs.docker.com/develop/develop-images/multistage-build/

FROM node:alpine as builderENV PROJECT_ENV production# http-server 不變動也可以利用緩存WORKDIR /codeADD package.json /codeRUN npm install --productionADD . /codeRUN npm run build# 選擇更小體積的基礎鏡像FROM nginx:alpineCOPY --from=builder /code/public /usr/share/nginx/html

此時,鏡像體積從 1G+ 變成了 50M+

使用 CDN

分析一下 50M+ 的鏡像體積,nginx:alpine 的鏡像是16M,剩下的40M是靜態資源。

如果把靜態資源給上傳到 CDN,則沒有必要打入鏡像了,此時鏡像大小會控制在 20M 以下

關于靜態資源,可以分類成兩部分

  • /static,此類文件在項目中直接引用根路徑,打包時復制進 /public 下,需要被打入鏡像
  • /build,此類文件需要 require 使用,會被 webpack 打包并加 hash 值,并可以通過 publicPath 修改資源地址。可以把此類文件上傳至 cdn,并加上永久緩存,不需要打入鏡像
FROM node:alpine as builderENV PROJECT_ENV production# http-server 不變動也可以利用緩存WORKDIR /codeADD package.json /codeRUN npm install --productionADD . /code# npm run uploadCdn 是把靜態資源上傳至 cdn 上的腳本文件RUN npm run build && npm run uploadCdn# 選擇更小體積的基礎鏡像FROM nginx:alpineCOPY --from=builder code/public/index.html code/public/favicon.ico /usr/share/nginx/html/COPY --from=builder code/public/static /usr/share/nginx/html/static

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到服務器教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本视频久久久| 国产精品视频一区国模私拍| 91免费欧美精品| 91精品久久久久| 亚洲黄色www| 91精品国产91久久久| 欧美大片第1页| 欧美影院在线播放| 久久久久这里只有精品| 久久久久中文字幕| 亚洲mm色国产网站| 久久亚洲影音av资源网| 国产成人午夜视频网址| 日韩一区二区久久久| 国产成人精品久久久| 日韩影视在线观看| 精品美女永久免费视频| 国产精品99久久久久久久久久久久| 久久99国产综合精品女同| 久久国产天堂福利天堂| 精品久久中文字幕| 亚洲自拍欧美另类| 成人久久18免费网站图片| 国产国产精品人在线视| 精品久久久久久久久久久| 视频在线观看一区二区| 久久久精品久久久| 九九精品视频在线观看| 亚洲自拍偷拍色图| 中文字幕亚洲欧美日韩2019| 中文字幕日韩免费视频| 国产精品99久久久久久久久| 国色天香2019中文字幕在线观看| 中文在线资源观看视频网站免费不卡| 欧美性猛交xxxxx水多| 欧洲亚洲免费在线| 国产一区二区三区在线视频| 97国产精品久久| 97精品伊人久久久大香线蕉| 久久久亚洲福利精品午夜| 亚洲天堂色网站| 国产成人精品最新| 一个人www欧美| 欧美成人亚洲成人| 国产99视频在线观看| 日韩国产欧美精品在线| 日韩电视剧免费观看网站| 国产性猛交xxxx免费看久久| 夜夜躁日日躁狠狠久久88av| 亚洲成色999久久网站| 中文字幕亚洲色图| 综合136福利视频在线| 亚洲欧美国产精品va在线观看| 亚洲无限av看| 影音先锋欧美精品| 亚洲毛片在线观看| 中文国产成人精品| 亚洲女同精品视频| 亚洲欧美成人精品| 久久久久久久激情视频| 亚洲色在线视频| 91久久精品日日躁夜夜躁国产| 欧美日韩午夜视频在线观看| 成人性生交大片免费看小说| 久久中文字幕视频| 日韩在线观看免费av| 亚洲欧美日韩爽爽影院| 国产精品欧美久久久| 亚洲人成网7777777国产| 日本久久久久久久久久久| 亚洲男人天堂九九视频| 亚洲激情小视频| 隔壁老王国产在线精品| 久久人体大胆视频| 精品综合久久久久久97| 高清一区二区三区日本久| 亚洲区在线播放| 久久久噜噜噜久久久| 日韩中文字幕视频在线| 91麻豆国产语对白在线观看| 亚洲国产另类久久精品| 91精品国产自产91精品| 黄色成人av在线| 中文字幕国内精品| 亚洲综合自拍一区| 国产丝袜精品第一页| 成人国产亚洲精品a区天堂华泰| 91久久久久久久久久| 91精品国产99| 亚洲欧美第一页| 国产ts人妖一区二区三区| 欧美日韩高清在线观看| 久久国内精品一国内精品| 大量国产精品视频| 欧美精品久久久久| 最新91在线视频| 91精品久久久久久| www.亚洲一区| 国产在线观看一区二区三区| 欧美国产日韩二区| 成年无码av片在线| 日韩精品电影网| 欧美一级视频一区二区| 91黑丝高跟在线| 国产精品综合不卡av| 国产精品福利网| 欧美日在线观看| 久久精视频免费在线久久完整在线看| 亚洲无限av看| 神马国产精品影院av| 欧美成人免费在线观看| 久久激情五月丁香伊人| 欧美天天综合色影久久精品| 欧美黄网免费在线观看| 欧美二区在线播放| 日韩中文在线中文网三级| 亚洲欧美中文字幕| 亚洲午夜色婷婷在线| 国产一区二区三区丝袜| 亚洲美腿欧美激情另类| xvideos亚洲| 欧美黑人一级爽快片淫片高清| 亚洲美女喷白浆| 国外成人在线视频| 97久久伊人激情网| 精品成人在线视频| 亚洲一区二区在线| 亚洲精品720p| 亚洲自拍在线观看| 久久好看免费视频| 91亚洲永久免费精品| 69av成年福利视频| 国产亚洲成精品久久| 日韩在线www| 国产精品丝袜久久久久久高清| 在线国产精品视频| 国产成人精品999| 国内精品久久久久久中文字幕| 国产成人拍精品视频午夜网站| 欧美成人午夜激情视频| 91免费在线视频网站| 欧美性猛交xxxx黑人| 国产精品自拍视频| 最新国产成人av网站网址麻豆| 欧美一级免费视频| xxxxxxxxx欧美| 国产一区二区免费| 91国产高清在线| 国产中文字幕亚洲| 日韩高清不卡av| 中文字幕精品一区久久久久| 久久成人一区二区| 久久久久久69| 国产脚交av在线一区二区| 欧美电影在线观看网站| 精品亚洲国产视频| 国产伊人精品在线| 欧美高清视频在线观看| 不卡av在线播放| 日韩欧美一区视频| 伊人久久久久久久久久久久久| 4444欧美成人kkkk| 日韩精品极品在线观看| 亚洲第一网中文字幕|