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
也可以通過瀏覽器來看一下
好了,這個小教程到此就結束了,希望能幫助你入門。