Docker部署 nodejs項(xiàng)目

由于網(wǎng)絡(luò)的原因我的Node.js鏡像從國(guó)內(nèi)的鏡像庫(kù)下載,而不是Docker Hub。

一、先從國(guó)內(nèi)的鏡像網(wǎng)站上pull下一下nodejs鏡像。

docker pull hub.c.163.com/nce2/nodejs:0.12.2
# 網(wǎng)易蜂巢
描述

  下載完后查看我們的鏡像,找到他的名稱(chēng),等會(huì)我們會(huì)用到


二、創(chuàng)建Node.js 程序

1、創(chuàng)建package.json,并寫(xiě)入相關(guān)信息和依賴

$ vi package.json

{ 
  "name": "dockerTest", 
  "version": "1.0.0",
   "description": "Node.js on Docker", 
  "author": "Docker",
   "main": "server.js",   
    "scripts": { 
          "start": "node server.js"
     },
     "dependencies": { 
            "express": "^4.13.3" 
      }
}

2、創(chuàng)建server.js

$ vi server.js
'use strict';
var express = require('express');
var PORT = 8888;
var app = express();
app.get('/', function (req, res) { 
    res.send('Helloworld\n');
});
app.listen(PORT);
console.log('Running on http://localhost:' + PORT);

3、創(chuàng)建Dockerfile

$ vi Dockerfile
FROM hub.c.163.com/nce2/nodejs:0.12.2  # Create app directory
RUN mkdir -p /home/Service
WORKDIR /home/Service    # Bundle app source
COPY . /home/Service
RUN npm install
EXPOSE 8888
CMD npm start   
 ## 如果想運(yùn)行多條指令可以這樣:
## CMD git pull && npm install && npm start
1、FROM
FROM hub.c.163.com/nce2/nodejs:0.12.2

FROM是構(gòu)建鏡像的基礎(chǔ)源鏡像,hub.c.163.com/nce2/nodejs:0.12.2 這個(gè)是鏡像的名稱(chēng),也就是我們一開(kāi)始從國(guó)內(nèi)服務(wù)器上拉下來(lái)的那個(gè)Image。如果本地沒(méi)有Docker 會(huì)自己pull鏡像。

2、RUN

后面跟的是在這個(gè)新容器中執(zhí)行的命令

#在容器中創(chuàng)建一個(gè)目錄
RUN mkdir -p /home/Service
3、WORKDIR

容器的工作目錄

#將容器的工作目錄定位到 /home/Service中
WORKDIR /home/Service
4、COPY

將本地的東西拷貝到容器的指定目錄下

#把本機(jī)當(dāng)前目錄下的所有文件拷貝到Image的/home/Service文件夾下
COPY . /home/Service  
RUN npm install
5、EXPOSE

將容器內(nèi)的某個(gè)端口導(dǎo)出給主機(jī),用于我們?cè)L問(wèn)

EXPOSE 8888
6、CMD

首先:每個(gè)Dockerfile中只能寫(xiě)一個(gè)CMD,寫(xiě)多了,后面的會(huì)覆蓋前面的。
然后:CMD后面跟的命令是每次容器啟動(dòng)的時(shí)候執(zhí)行的命令。
最后:命令格式可以是數(shù)組格式,也可是直接命令行方式,多條命令的時(shí)候用 "&&"鏈接。

CMD [ "npm", "start" ]

4、構(gòu)建Image

在你Dockerfile文件所在的目錄下運(yùn)行下面的命令來(lái)構(gòu)建一個(gè)Image.

docker build -t mynodeapp .

別忘了最的的那個(gè)點(diǎn),點(diǎn)就是指當(dāng)前目錄下的Dockerfile


  構(gòu)建完后查看一下我們的鏡像

4、運(yùn)行鏡像

docker run -d -p 8880:8888 mynodeapp

-d :表明容器會(huì)在后臺(tái)運(yùn)行,
-p :表示端口映射,把本機(jī)的8880端口映射到container的8888端口,這樣外網(wǎng)就能通過(guò)本機(jī)的8880端口訪問(wèn)我們的web了。
后面的mynodeapp是我們鏡像的名字

通過(guò)docker ps 查看我們剛運(yùn)行的Container的ID

測(cè)試
  我們先通過(guò)curl 看能不能訪問(wèn)我們的web。

curl -i localhost:8880

如果返回相應(yīng)的HTTP信息,表示成功

也可以通過(guò)瀏覽器來(lái)看一下


三、在Docker中用 pm2 或 forever 部署 nodejs項(xiàng)目

1、 pm2

使用命令 pm2 start app.js 之后, pm2 默認(rèn)在后臺(tái)運(yùn)行, 如果使用了Docker后,容器運(yùn)行并立即退出,需要手動(dòng)給“pm2”指定參數(shù) --no-daemon

在Dockerfile中:

--no-daemon // run pm2 daemon in the foreground if it doesn't exist already

CMD pm2 start app.js --no-daemon // 設(shè)置啟動(dòng)方式

#  或者 使用   pm2-docker
CMD pm2-docker start app.js

2、 forever

同理forever也是
Forever start script.js runs in the background. To run forever in the foreground, try forever script.js.

CMD forever -c 'node --harmony' app.js // 設(shè)置啟動(dòng)方式
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Docker — 云時(shí)代的程序分發(fā)方式 要說(shuō)最近一年云計(jì)算業(yè)界有什么大事件?Google Compute Engi...
    ahohoho閱讀 15,844評(píng)論 15 147
  • 0. 前言 docker是什么?docker是用GO語(yǔ)言開(kāi)發(fā)的應(yīng)用容器引擎,基于容器化,沙箱機(jī)制的應(yīng)用部署技術(shù)???..
    sessionboy閱讀 4,001評(píng)論 2 49
  • 轉(zhuǎn)載自 http://blog.opskumu.com/docker.html 一、Docker 簡(jiǎn)介 Docke...
    極客圈閱讀 10,744評(píng)論 0 120
  • docker基本概念 1. Image Definition 鏡像 Image 就是一堆只讀層 read-only...
    慢清塵閱讀 9,003評(píng)論 1 21
  • 丫頭 不要輕易說(shuō)愛(ài), 許下的諾言就是欠下的債。 丫頭 不想上班的時(shí)候照照鏡子, 查查銀行卡余額。 丫頭 自己喜歡的...
    沐沂墨閱讀 501評(píng)論 1 1

友情鏈接更多精彩內(nèi)容