Docker實踐--部署Nodejs應用


  這個例子的目標是為了向大家展示如何在Docker的container里運行Node.js程序。我會先創建一個簡單的Node.js web

app,來構建一個鏡像。然后基於這個Image運行一個container。從而實現快速部署。

  由於網絡的原因我的Node.js鏡像從國內的鏡像庫下載,而不是Docker Hub。

  先從國內的鏡像網站上pull下一下nodejs鏡像。      

docker pull hub.c.163.com/nce2/nodejs:0.12.2

  下載完后查看我們的鏡像,找到他的名稱,等會我們會用到

創建Node.js 程序

  創建package.json,並寫入相關信息和依賴

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

  創建server.js

vi server.js

  寫一個最簡單web 這個web基於express框架,返回Hello word.注意我們監聽的是8888端口

'use strict';

var express = require('express');

var PORT = 8888;

var app = express();
app.get('/', function (req, res) {
  res.send('Hello world\n');
});

app.listen(PORT);
console.log('Running on http://localhost:' + PORT);

  創建Dockerfile

  接下來主角上場了創建Dockerfile文件 這個文件是創建鏡像所必須的文件

vi Dockerfile

  Docker會依照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" ]

  我們來一句一句的解釋  

FROM hub.c.163.com/nce2/nodejs:0.12.2

  FROM是構建鏡像的基礎源鏡像,hub.c.163.com/nce2/nodejs:0.12.2 這個是鏡像的名稱,也就是我們一開始從國內服務器上拉下來的那個Image。如果本地沒有Docker 會自己pull鏡像。

# Create app directory
RUN mkdir -p /home/Service
WORKDIR /home/Service

  第一句RUN 用於在Image里創建一個文件夾,將來用於保存我們的代碼。

  第二句WORKDIR是將我們創建的文件夾做為工作目錄。

 

# Bundle app source
COPY . /home/Service
RUN npm install

  第一句的COPY是把本機當前目錄下的所有文件拷貝到Image的/home/Service文件夾下。

  第二句的RUN 使用npm 安裝我們的app據需要的所有依賴。

 

EXPOSE 8888

  由於我們的web app監聽的是8888端口,我們把這個端口暴露給主機,這樣我就能從外部訪問web了。

 

CMD [ "npm", "start" ]

  這個我相信我不用解釋你也能看出來他是做什么的。運行npm start命令,這個命令會運行 node service.js來

啟動我們的web app。

構建Image

   在你Dockerfile文件所在的目錄下運行下面的命令來構建一個Image.

docker build -t mynodeapp .

  別忘了最的的那個點

  構建完后查看一下我們的鏡像

 

 運行鏡像

docker run -d -p 8888:8888 ac5

   -d 表明容器會在后台運行,-p 表示端口映射,把本機的8888商品映射到container的8888端口這樣外網就能通過本機的8888商品訪問我們的web了。

后面的ac5是我們Image的ID因為前3個就已經能定位出這個Image所以我就沒有把后邊的再寫出來。

  通過docker ps 查看我們剛運行的Container的ID

  打印log  7370就是我們的Container ID,和Image ID一樣,你也可以全寫出來,我比較懶就寫前4位,已經足夠標識出這個Container了 

docker logs 7350

 

 

   如果你想到Container里可以執行下面的命令,進入到里邊后就可以像操作普通的linux 一樣。如果想退出可執行exit命令。

 

 測試

   我們先通過curl 看能不能訪問我們的web。

curl -i localhost:8888

  也可以通過瀏覽器來看一下

  好了,這個小教程到此就結束了,希望能幫助你入門。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM