使用Docker數(shù)據(jù)卷容器發(fā)布前端應(yīng)用

自從使用Docker作為部署工具后黄鳍,給開(kāi)發(fā)人員提供了很大的便利纵朋。
近日在項(xiàng)目中前端應(yīng)用的部署也使用了Docker笼痛,現(xiàn)將方法記錄如下。

最初的想法:使用安裝有Nginx的容器存儲(chǔ)靜態(tài)頁(yè)面

??將前端頁(yè)面直接build到安裝有Nginx的容器中牺堰,這種應(yīng)該是比較直觀的想法。項(xiàng)目使用webpack構(gòu)建颅围,需要npm環(huán)境伟葫,因此使用node的鏡像較為方便。

# 鏡像選擇node:8-slim
FROM node:8-slim
# 更新源并安裝nginx
RUN apt-get update && apt-get install -y nginx
# 使用cnpm加快npm包的安裝速度
RUN npm install -g cnpm --registry=https://registry.npm.taobao.org
WORKDIR /app
# 單獨(dú)提取加載package.json并安裝npm包院促,與代碼構(gòu)建分離筏养,避免因?yàn)榇a變更導(dǎo)致鏡像構(gòu)建需要重新安裝npm包
ADD package.json /app/package.json
RUN cnpm install
COPY . /app/
# 構(gòu)建,生成最終部署文件常拓,/var/www/html是構(gòu)建結(jié)果存放的目錄
RUN npm run build  && cp -r dist/* /var/www/html && rm -rf /app
# 復(fù)制不同環(huán)境的nginx配置文件到鏡像的nginx配置目錄
COPY ./nginx.ci.conf /etc/nginx/
COPY ./nginx.lt.conf /etc/nginx/
COPY ./nginx.ot.conf /etc/nginx/
# 不在命令中使用 -g daemon off渐溶,可以在配置文件中配置
ENTRYPOINT ["nginx"]

其中一個(gè)環(huán)境的配置文件大概就是下面這個(gè)樣子:

user www-data;
worker_processes 4;
pid /run/nginx.pid;
# Importent
daemon off;

events {
    worker_connections 2048;
    use epoll;
}

http {
    ##
    # Basic Settings
    ##
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;
    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # SSL Settings
    ##
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    ##
    # Logging Settings
    ##
    log_format main      '$remote_addr - $remote_user [$time_local] '
                         '"$request" $status $bytes_sent '
                         '"$http_referer" "$http_user_agent" '
                         '"$gzip_ratio"';

    access_log /dev/stdout main;
    error_log /dev/stderr;

    ##
    # Gzip Settings
    ##
    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # Virtual Host Configs
    ##
    server {
        listen       9001;
        server_name  127.0.0.1;
        location / {
            root   /var/www/html;
            index  index.html index.htm;
        }
    }

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

以下是容器啟動(dòng)的命令,使用 -c 選項(xiàng)指定生效的nginx配置文件:

docker run -d --name web -p 9001:9001 xxxx/xxxx/xxxx:latest -c /etc/nginx/nginx.ci.conf

換一種思路:使用數(shù)據(jù)卷的方式發(fā)布前端頁(yè)面

??直觀的想法往往不是較好的解法弄抬,將前端頁(yè)面放置在nginx的容器中一同發(fā)布茎辐,我覺(jué)得不符合關(guān)注點(diǎn)分離。
??發(fā)布的時(shí)候掂恕,不僅需要部署前端頁(yè)面拖陆,還需要對(duì)nginx進(jìn)行配置。如果這二者發(fā)布在一個(gè)容器中懊亡,當(dāng)前容器的nginx只負(fù)責(zé)本容器的頁(yè)面服務(wù)依啰,而web server理應(yīng)還有其他用途,比如反向代理后端服務(wù)店枣、做負(fù)載均衡孔飒,勢(shì)必在更上一層還需要啟動(dòng)一個(gè)web server灌闺,部署容器自帶的nginx其實(shí)是一種資源浪費(fèi)。
??所以坏瞄,使用數(shù)據(jù)卷容器發(fā)布前端頁(yè)面桂对,用外部的nginx來(lái)提供服務(wù),應(yīng)該是一個(gè)好的選擇鸠匀。如果有更好的方法蕉斜,不吝賜教。

Dockerfile改成了構(gòu)建數(shù)據(jù)卷容器:

FROM node:8-slim
RUN npm install -g cnpm --registry=https://registry.npm.taobao.org
WORKDIR /app
ADD package.json /app/package.json
RUN cnpm install
COPY . /app/
RUN npm run build && mkdir /var/www/html -p && cp -r dist/* /var/www/html && rm -rf /app
VOLUME [ "/var/www/html" ]

包含有前端頁(yè)面的數(shù)據(jù)卷容器啟動(dòng):

docker run --name web -d xxxx/xxxx/xxxx:latest

啟動(dòng)nginx容器缀棍,加載數(shù)據(jù)卷:

docker run --name nginx -d --volumes-from web -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf -p 9001:9001 nginx:stable-alpine

附一小段nginx.conf的配置:

    ##
    # Virtual Host Configs
    ##
    server {
        listen       9001;
        server_name  127.0.0.1;
        location / {
            root   /var/www/html;
            index  index.html index.htm;
        }
    }

頁(yè)面訪問(wèn)也沒(méi)有問(wèn)題宅此。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市爬范,隨后出現(xiàn)的幾起案子父腕,更是在濱河造成了極大的恐慌,老刑警劉巖青瀑,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件璧亮,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡斥难,警方通過(guò)查閱死者的電腦和手機(jī)枝嘶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)哑诊,“玉大人群扶,你說(shuō)我怎么就攤上這事《瓶悖” “怎么了竞阐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)暑劝。 經(jīng)常有香客問(wèn)我骆莹,道長(zhǎng),這世上最難降的妖魔是什么铃岔? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任汪疮,我火速辦了婚禮,結(jié)果婚禮上毁习,老公的妹妹穿的比我還像新娘智嚷。我一直安慰自己,他們只是感情好纺且,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布盏道。 她就那樣靜靜地躺著,像睡著了一般载碌。 火紅的嫁衣襯著肌膚如雪猜嘱。 梳的紋絲不亂的頭發(fā)上衅枫,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音朗伶,去河邊找鬼弦撩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛论皆,可吹牛的內(nèi)容都是我干的益楼。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼点晴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼感凤!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起粒督,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤陪竿,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后屠橄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體族跛,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年仇矾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了庸蔼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片解总。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贮匕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出花枫,到底是詐尸還是另有隱情刻盐,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布劳翰,位于F島的核電站敦锌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏佳簸。R本人自食惡果不足惜乙墙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望生均。 院中可真熱鬧听想,春花似錦、人聲如沸马胧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)佩脊。三九已至蛙粘,卻和暖如春垫卤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背出牧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工穴肘, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人舔痕。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓梢褐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親赵讯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子盈咳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容