前提:
1、已經(jīng)安裝好docker環(huán)境
2、已經(jīng)安裝好node.js開(kāi)發(fā)環(huán)境
思路:
在docker hub上找到現(xiàn)成的node.js鏡像,拉回來(lái),基于這個(gè)鏡像發(fā)布node.js應(yīng)用!
(當(dāng)然也可以基于centos鏡像,安裝node.js,這里使用懶辦法)
一:找到合適的node.js基礎(chǔ)鏡像
到hub.docker.com搜索node
node.js的鏡像名稱為node,最新版本是: node:latest
也可以使用node:alpine這個(gè)版本(體積小,只包含基礎(chǔ)node.js運(yùn)行環(huán)境)
二:拉取node鏡像(這里拉去node:latest)
$ docker pull node:latest

拉取結(jié)束,查看一下鏡像
$ docker images | grep node

啟動(dòng)node鏡像,確認(rèn)可用
基于node鏡像啟動(dòng)一個(gè)名為node-test的容器
$ docker run -itd --name node-test node
--name node-test 指定容器名稱
查看容器
$ docker ps

鏡像可用!
三:開(kāi)發(fā)node.js應(yīng)用
用express開(kāi)發(fā)一個(gè)簡(jiǎn)單的web服務(wù):
# 創(chuàng)建工程目錄
mkdir ~/Develop/docker/demo-nodejs-docker
# 一路回車(chē)新建一個(gè)node.js工程
npm init
#安裝express庫(kù)
npm i express -S
新建app.js,并編寫(xiě)一個(gè)簡(jiǎn)單的web服務(wù),代碼如下:
'use strict';
const express = require('express');
const PORT = 8888;
const app = express();
app.get('/', function (req, res) {
res.send('Hello Docker image for node.js!\n');
});
app.listen(PORT);
console.log('Running on [http://localhost](http://localhost):' + PORT);
保存退出,測(cè)試一下
node app.js
curl [http://localhost:8888](http://localhost:8888)
四:編寫(xiě)Dockerfile
在demo-node-docker目錄下新建Dockerfile (文件名就這個(gè)),并在其中編寫(xiě):
# 指定基于node:latest 這個(gè)鏡像繼續(xù)制作當(dāng)前應(yīng)用鏡像
FROM node:latest
# Create app directory在鏡像中創(chuàng)建一個(gè)目錄
RUN mkdir -p /home/Service
# 設(shè)定工作目錄為 /home/Service
WORKDIR /home/Service
# 把宿主機(jī)當(dāng)前目錄下所有文件拷貝到鏡像中/home/Service目錄
COPY . /home/Service
# RUN npm install
# 暴露8888端口
EXPOSE 8888
# 啟動(dòng)容器時(shí)執(zhí)行應(yīng)用啟動(dòng)命令
CMD [ "node", "--trace-warnings", "app.js" ]
打包為Docker鏡像(docker build 默認(rèn)會(huì)找當(dāng)前目錄下的Dockerfile文件)
$ docker build -t demo-nodejs-docker .
基于鏡像啟動(dòng)容器(基于鏡像demo-nodejs-docker啟動(dòng)一個(gè)名為dnd的容器,并且將宿主機(jī)的7777端口映射到容器的8888端口)
$ docker run -itd -p 7777:8888 --name dnd demo-nodejs-docker
調(diào)用web服務(wù),通過(guò)7777端口訪問(wèn)容器中的web服務(wù):
$ curl [http://localhost:7777](http://localhost:8888)
返回 Hello Docker image for node.js!
進(jìn)入容器查看內(nèi)容
$ docker exec -it [容器ID] /bin/bash

看到?jīng)],容器里面的文件結(jié)構(gòu)和本地目錄一模樣!

注意事項(xiàng):
1、啟動(dòng)容器時(shí)需要指定端口映射,才能訪問(wèn)Docker容器中的Web服務(wù);
2、如果忘記指定端口映射,可按《docker容器添加對(duì)外映射端口》進(jìn)行修改
3、如果啟動(dòng)容器失敗,可以用docker ps - a 查看到所有容器,再用 docker logs 容器ID查看啟動(dòng)失敗的日志排查問(wèn)題
4、查看鏡像:docker images
5、刪除鏡像:docker rmi [鏡像ID]
6、查看容器ID: docker ps -a
7、刪除容器:docker rm [容器ID]