如何在Docker的container里運行Node.js程序
主體思路:一個簡單的Node.js web app,來構建一個鏡像,然后基於這個鏡像,運行一個容器,從而實現快速部署。
操作環境:
虛擬機:ubuntu 16.04 LTE 64位
第一 先拉取基礎鏡像
sudo docker pull node:latest
node鏡像,star數很高,我們使用它作為基礎鏡像.latest為tag標簽,標識是哪個版本。這一步,也可以省略,后面的Dockerfile文件,會自動拉取該鏡像。
第二 創建Node.js程序
-
創建 package.json,並寫入相關信息和依賴
$ mkdir -p node/website && cd node/website
$ touch package.json
$ vi package.json
{ "name": "website", "version": "0.0.1", "description": "Node.js on Docker", "author": "weiqinl", "main": "server.js", "scripts": { "start": "node server.js" }, "dependencies": { "express": "^4.13.3" } }
-
創建server.js
寫一個最簡單的web,監聽8888端口,返回Hello world。
使用了node官方建議的框架express
$ touch server.js
$ vi server.js
'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
Docker會依照Dockerfile的內容來構建一個鏡像。
$ cd ..
$ touch Dockerfile
$ vi Dockerfile
#設置基礎鏡像,如果本地沒有該鏡像,會從Docker.io服務器pull鏡像
FROM node
#創建app目錄,保存我們的代碼
RUN mkdir -p /usr/src/node
#設置工作目錄
WORKDIR /usr/src/node
#復制所有文件到 工作目錄。
COPY . /usr/src/node
#編譯運行node項目,使用npm安裝程序的所有依賴,利用taobao的npm安裝
WORKDIR /usr/src/node/website
RUN npm install --registry=https://registry.npm.taobao.org
#暴露container的端口
EXPOSE 8888
#運行命令
CMD ["npm", "start"]
第四 構建Image
在Dockerfile文件所在目錄下,運行下面命令來構建一個Image
sudo docker build -t weiqinl/node .
構建完后查看一下剛構建的鏡像:
sudo docker images
第五 運行鏡像
sudo docker run -d --name nodewebsite -p 8888:8888 weiqinl/node:latest
-d 表示容器在后台運行
--name 表示給容器別名 nodewebsite
-p 表示端口映射。把本機的8888端口映射到容器的8888端口,這樣外網就能通過本機的8888端口,訪問我們的web了。
后面的 weiqinl/node 是image的REPOSITORY, latest的鏡像的TAG
第六 測試
-
我們先通過curl看是否能訪問web
curl -i localhost:8888
-
通過ubuntu自帶的瀏覽器查看
-
如果想進入容器,可以執行命令:
sudo docker exec -it weiqinl/node:latest /bin/bash
到此,Docker部署nodejs應用,已經完成。