Docker 讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的 Linux 機器上,即可以實現虛擬化。node
index.jsweb
'use strict';
const express = require('express');
// Constants
const PORT = 6677;
const HOST = '0.0.0.0';
// App
const app = express();
app.get('/', (req, res) => {
res.send('<h1>Hello world</h1>');
});
app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);
複製代碼
根目錄新建
Dockerfile
文件docker
# 定義咱們須要從哪一個鏡像進行構建
FROM node:8
# 在鏡像中建立一個文件夾存放應用程序代碼,這將是你的應用程序工做目錄
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD [ "node", "index.js" ]
複製代碼
.dockerignore文件express
node_modules
npm-debug.log
複製代碼
這將避免你的本地模塊以及調試日誌被拷貝進入到你的 Docker 鏡像中npm
進入到 Dockerfile 所在的那個目錄中,運行如下命令構建 Docker 鏡像。開關符 -t 讓你標記你的鏡像json
//Don’t forget the . character at the end, which sets the build context to the current directory.
docker build -t chenkai/node-web-app:v1.0.0 .
複製代碼
檢測鏡像是否構建成功docker images | grep node-web-app
能夠看到構建的鏡像瀏覽器
運行鏡像,使用 -d
模式運行鏡像將以分離模式運行 Docker容器,使得容器在後臺自助運行。開關符-p
在容器中把一個公共端口導向到私有的端口,請用如下命令運行你以前構建的鏡像bash
docker run -p 對外暴漏端口:容器內部端口 -d chenkai/應用名稱:版本
//如
docker run -p 4444:6677 -d chenkai/node-web-app:v1.0.0
複製代碼
docker ps | grep node-web-app
能夠看到啓動的容器 docker logs -f ${CONTAINER ID }
能夠看到容器輸出的日誌app
瀏覽器中輸入經過容器暴露出的端口http://localhost:4444/
便可訪問鏡像中的node程序ui